4

現在、次のようにプロパティ ファイルから JDBC ソース値をロードしています。

<context:property-placeholder location="classpath:master.properties" ignore-unresolvable="true" />

<bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource"
    destroy-method="close">
    <property name="driverClass" value="${database.driver}" />
    <property name="jdbcUrl" value="${database.url}" />
    <property name="username" value="${database.user}" />
    <property name="password" value="${database.password}" />
    <property name="idleConnectionTestPeriod" value="60" />
    <property name="idleMaxAge" value="240" />
    <property name="maxConnectionsPerPartition" value="2" />
    <property name="minConnectionsPerPartition" value="2" />
    <property name="partitionCount" value="3" />
    <property name="acquireIncrement" value="10" />
    <property name="statementsCacheSize" value="50" />
    <property name="releaseHelperThreads" value="3" />
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"
    scope="singleton">
    <property name="targetDataSource">
        <ref local="mainDataSource" />
    </property>
</bean>

このセグ。クラスパス ベースの app.properties ファイルで正常に動作し、app.properties を取り除きます。

META-INFこの値を context.xml (またはに配置) からロードしたいと考えています$CATALINA_HOME/conf/context.xml。本番/ステージング サーバーで適切な値をロードするのに役立ちます。

ヘルプまたは代替方法/提案をいただければ幸いです。(同様の質問が既に回答されている場合は、リンクを共有してください) ありがとうございます。

4

3 に答える 3

3

Alan Hay が述べたように、データソース構成を Tomcat 独自の context.xml に外部化してから、Spring に JNDI ルックアップを実行させて取得することができます。これは、私が取り組んできたプロジェクトのいくつかで一般的に使用してきたアプローチです。

達成するために配置する必要がある要素は次のとおりです。

1. データソース構成を $CATALINA_HOME/conf/context.xml に追加します。

<GlobalNamingResources>

    <Resource type="javax.sql.DataSource" 
              name="dsName"
              factory="com.jolbox.bonecp.BoneCPDataSource" 
              driverClassName="your.driver.classname"
              jdbcUrl="your:driver:url" 
              username="username"
              password="password" 
              idleMaxAge="240" 
              idleConnectionTestPeriod="60"
              partitionCount="3" 
              acquireIncrement="10" 
              maxConnectionsPerPartition="2"
              minConnectionsPerPartition="2" 
              statementsCacheSize="50"
              releaseHelperThreads="3" />

</GlobalNamingResources>

2. アプリケーションの META-INF/context.xml にリソース リンクを追加します。

<Context path="/YourApp">
    <ResourceLink description="Datasource for YourApp" 
                  global="jdbc/dsName"
                  name="jdbc/dsName" 
                  type="javax.sql.DataSource" />        
</Context>

3.Spring 構成を変更して、JNDI でデータソースをルックアップします。

<beans xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="http://www.springframework.org/schema/jee classpath:/org/springframework/ejb/config/spring-jee-3.0.xsd">

    <jee:jndi-lookup id="dataSource" 
                     jndi-name="java:comp/env/jdbc/dsName" />

4. ドライバーとデータソース jar を移動します。

データソース構成はコンテナー管理になっているため、データベース ドライバーとデータソース jar を $CATALINA_HOME/lib に配置して、Tomcat がデータソースを作成するときにそれらを使用できるようにする必要があります。これらの jar は、アプリケーションの WEB-INF/lib に存在する必要がなくなりました。

于 2013-10-16T13:09:27.870 に答える
3

私のやり方では、クラスパスにデフォルトのプロパティ ファイルがあり、これらのデフォルト (開発) プロパティをオーバーライドするために使用するプロパティ ファイルが 1 つあります。

私の春のファイルで:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="ignoreResourceNotFound" value="true"/>
      <property name="locations">
        <list>
            <value>classpath:jdbc.properties</value>
            <value>classpath:camel.properties</value>
            <value>classpath:email.properties</value>
            <value>${external_config}</value>
        </list>
    </property>
</bean>

開発では、クラスパスでプロパティ ファイルを使用します。
さまざまな環境、ステージング、統合、本番環境で、次のパラメーターを使用してアプリケーションを開始します。

-Dexternal_config=file:c:/staging.properties

そうすれば、すべての環境で同じビルドを使用して、オーバーライドするプロパティ ファイルの場所を選択できます。

その${external_config}ため、環境に依存する構成ファイルのプレース ホルダーです。Spring は、external_config という名前の環境変数を探します。その変数は、構成ファイルを指す必要があります。ファイルが見つからない場合、Spring は ignoreResourceNotFound = true; でそれを無視します。

于 2013-10-15T17:42:13.190 に答える