0

spring project を含む実行可能な Jar があります。コードに変数を提供するプロパティ ファイルがあり、jar と同じディレクトリに存在します。すべてが正常に機能しています。Java コードでは、プロパティ ファイルを次のようにロードします。

Properties properties = new Properties();
properties.load(new FileInputStream(PROPERTY_FILE_NAME));

applicationContext.xml の私のデータソースは

 <bean id="teDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/testDB"/>
    <property name="username" value="t"/>
    <property name="password" value="t"/>
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="10"/>
</bean> 

休止状態のプロパティは次のとおりです。

   <bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
    <props>    
   <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>    
   <!-- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> -->
    <prop key="hibernate.jdbc.fetch_size">250</prop>....

上記のすべてはMySqlまたはOracleの両方で機能し、方言を変更すると(下のコメント付きのpropキー)、切り替えが行われます。しかし、プロパティ ファイルのプロパティに基づいてデータベースを選択できるようにしたいと考えています。私のシナリオでは、どうすればこれを達成できますか?

バージョン:

spring - 3.0.5.RELEASE
hibernate - 3.3.2.GA
4

2 に答える 2

2

アプリケーションの環境に依存するすべてのもの (データベース構成、サーバーの絶対パス、外部 Web サービス URL など) をどこかに置く必要があります。

これは通常、標準の Java プロパティ ファイルを使用して行うことができます。その後、 PropertyPlaceholderConfigurerを使用してそれをロードし、${config.myproperty}何かを構成する必要がある Bean 構成のあらゆる場所でスタイルを使用できます。

アプリケーションの起動時に、たとえばこの構成ファイルへのパスを指定する必要があります。または、デフォルト パスに存在することもできます (構成より規則)。

于 2013-08-23T06:03:22.040 に答える
2

プロファイルを使用して、maven でビルドを構成できます。

<profiles>  
<profile>
            <id>database1</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <filters>
                    <filter>db1.properties</filter>
                </filters>
            </build>
        </profile>
        <profile>
            <id>database2</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <filters>
                    <filter>db2.properties</filter>
                </filters>
            </build>
        </profile>
    </profiles>

db1.properties ファイルで最初のデータベースのすべての構成を指定し、db2.properties でも​​う一方のデータベースを指定します。

たとえば、次のように設定できます。 database.name = jdbc:mysql://localhost:3306/testDB1 in db1.properties database.name = jdbc:mysql://localhost:3306/testDB2 in db2.properties

そして、applicationContext ファイルに次のように記述します: property name="url" value="${database.name}"

于 2013-08-23T14:02:22.003 に答える