0

私の Web アプリケーション (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している場合、その方法は?)

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 に答える