0

在我的 Web 应用程序(spring + tomcat)中,下面是applicationContext.xml. 所有数据库信息 ( username, password) 当前直接嵌入。但是现在在我们的应用程序中,服务器派生了一个新JVM实例,这个新JVM实例需要与同一个数据库进行通信。

<bean id="meetingDBSource"
      class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close" p:initialSize="10" p:maxActive="50" p:minIdle="5"
      p:maxIdle="35" p:driverClassName="com.mysql.jdbc.Driver"
      p:url="jdbc:mysql://10.0.1.100/warehouse_mon?useLegacyDatetimeCode=false&amp;useUnicode=true&amp;serverTimezone=UTC&amp;"
      p:username="user" p:password="pass" p:testOnBorrow="true"
      p:validationQuery="SELECT 1" />> 

<bean id="appDB" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
        <ref bean="meetingDBSource" />
    </property>
</bean>

所以我希望在启动它时将所需的信息作为参数传递。现在有什么堂堂正正的获取这个数据库信息的方法呢?

最初在我的 中applicationContext.xml,我制作了一张地图并将所有数据库信息插入到地图中。使用 Spring 特殊表达式,我正在获取值,然后使用它们进行BasicDataSource初始化。在我的代码中,使用依赖注入我获得了对该地图的访问权,然后获得了信息。

但我想应该有一种更标准的工厂方式来做这件事。(或者可能使用context-param,如果是,如何使用?)

4

1 回答 1

1

我像这样使用它。

我有一个这样的 database.properties 文件。

db.driverClassName=com.mysql.jdbc.Driver
db.connectionUrl=jdbc:mysql://localhost:3306/test
db.username=test
db.password=testpass
sql.use.db.data=false
sql.use.db.test.data=false

然后在 applicationContext.xml 我将配置

<!--property place holder bean -->
<bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="ignoreResourceNotFound" value="false"/>
    <property name="locations">
        <list>

            <value>classpath:/properties/database.properties</value>                
        </list>
    </property>

然后数据源是这样配置的

<!-- data source bean-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${db.driverClassName}"/>
    <property name="url" value="${db.connectionUrl}"/>
    <property name="username" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
</bean>

您可以使用 @Value 注释来访问该文件中的属性。

@Value("${sql.use.db.data}")
private String use_data;
于 2013-11-06T07:03:41.580 回答