我试图弄清楚我的Spring应用程序如何确定它的部署位置并加载适当的数据源。我们有3个环境…我的本地环境,开发服务器和生产服务器。到目前为止,我有3个名为
localhost.datasource.properties development.datasource.properties production.datasource.properties
我让他们像这样配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:/resources/properties/production.datasource.properties</value> <value>classpath:/resources/properties/development.datasource.properties</value> <value>classpath:/resources/properties/localhost.datasource.properties</value> </list> </property> </bean> <bean id="dataSourceMySQL" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${mysql.jdbc.driver.class.name}" p:url="${mysql.jdbc.url}" p:username="${mysql.jdbc.username}" p:password="${mysql.jdbc.password}" /> </beans>
当我在本地主机上时,这工作正常。如果我将war文件部署到开发中,则它仍在读取localhost属性,因为它位于列表的最后,并且出现错误。实现此目的的最佳方法是什么?
谢谢
对于数据源,最简单的方法是定义数据源并让容器管理连接池。
为此,请在web.xml中定义对数据源的资源引用
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/MyDataSource</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
并在春季这样引用它:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" />
然后您可以在应用程序服务器中定义数据源,这意味着您可以更改基础数据库。对于Websphere,这将通过Websphere控制台完成。如果是tomcat,则可以通过Context.xml完成:
<Context> ... <Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest"/> </Context>
这样,您只需更改上下文即可部署到开发,测试和生产中,而无需将您的应用程序绑定到特定的数据库。