在运行时获取数据库信息

时间:2013-11-06 06:46:03

标签: java spring

在我的网络应用程序(spring + tomcat)中,下面是applicationContext.xml。目前,所有数据库信息(usernamepassword)都是直接嵌入的。但是现在在我们的应用程序中,服务器会分叉一个新的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,如果是,如何使用?)

1 个答案:

答案 0 :(得分: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;