我应该在应用程序或应用程序服务器中定义数据源吗?

我已经开发了两个不同团队的应用程序(在Jboss服务器上运行)。 一个团队在应用程序WAR文件中有数据源配置,另一个团队在应用程序服务器的standalone.xml内部有数据源配置。 而且我不确定哪种方法更好。

因此,我在服务器的standalone.xml中定义数据源时发现了一些优点。

  • 在服务器的standalone.xml中定义数据源比在war文件中更安全。 如果数据库连接凭证存储在服务器的standalone.xml中,几乎从未修改过,它比war文件中的密码更安全,war文件经常从开发人员的机器传输到服务器,所有开发人员都会传播数据库配置电脑。
  • 通过在standalone.xml中使用数据源,我们可以使war文件更小,因为JDBC驱动程序可以作为模块安装,并且可以从war文件中删除。 此外,从类路径加载JDBC作为模块更有效。
  • 如果我们不希望应用程序开发团队知道数据库连接设置,我们可以将数据源放在standalone.xml中。

通过在应用程序WAR文件中使用数据源配置,我看到以下优点:

  • 开发团队无权在运行Jboss的环境中更改Jboss配置文件。 因此,只能在应用程序中定义DB连接。
  • 当开发人员经常需要在不同的数据库连接之间切换时,它在开发状态下很有用。 例如,开发人员可以在构建WAR文件时指定连接。

所以我想知道两种方法是否还有其他优点。 而你认为哪种方法更好?

除了问题中提到的要点之外,在应用程序之外使用数据源的另一个优点是它允许在不同区域中使用相同的war文件。 这将允许团队在使用相同的war文件时为不同的环境(如Test,Perf和Prod)提供不同的数据库。

您可以进行一次部署,然后由QA团队测试的war文件可以升级到生产区域。 这将确保没有未经测试的代码进入更高的区域,同时避免需要SCM分支和代码冻结。

我赞成让应用程序服务器公开数据源并提出警告。您需要开发团队至少知道应用程序服务器的方法,或至少访问jboss控制台以查看配置或更改它。原因是例如他们需要监视数据源连接池的连接使用情况。既然你在谈论jboss,我不知道jboss AS的数据源的“live”bean是否暴露了本地相同的信息例如oracle ucp(ucp .getStatistics是一个godSend,原因不止一个……)。

考虑一下即使你在xml中内化数据源,使用概要文件的概念,你可以根据应用程序加载的配置文件,在一个或另一个属性文件中“填充”某个xml字段。

例如,spring你一定可以

                    

在本地配置文件中的含义从类路径中的config_loca.properties文件加载属性

并且也有

                                    

因此,在您的QA环境或其他非开发环境中,您可以参考外部xml文件而不是战争中集成的文件。您甚至可以通过内部//外部属性文件包含用户名和密码“填充”如果您担心,可以提高安全性。

为了正确validation您的应用程序是否正常工作,您应该在将其发送到生产环境之前尝试使用临时服务器。

在这种情况下,您安装到生产环境中的war文件应该与您测试的相同,因此您不需要更改te应用程序的任何内容以在具有不同数据库连接的不同环境中工作。

因此,数据库配置不应位于war文件中,而应位于应用程序服务器中。 此外,您还可以让系统管理员更轻松,因为他们无需操作(解压缩和更改)您的战争即可将其安装到服务器中。

在应用程序的早期开发过程中,添加数据库(以及任何其他开发配置)以减少开发人员将他/她的手放在项目上并开始编程而无需配置应用程序的时间非常有用。开发应用程序服务器。

对我来说,将所有数据源配置排除在war文件之外的第一个好处是易于部署。

如果我正确地阅读了您的问题,如果您在构建中包含任何配置, 则无法将完全相同的构建部署到多个环境。 直接暗示您永远不能将DEV构建部署到QA,更重要的是,您无法将QA构建部署到PROD或UAT。 如果您的流程经过审核,这可能会让您头疼。

如果我误解了你的问题,请告诉我,否则,我希望这会有所帮助。