0

我有一个可执行 Jar,里面有一个 spring 项目。有一个属性文件,它为代码提供变量,并将与 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,并且更改方言(下面的注释属性键)将进行切换。但现在我希望能够根据属性文件中的属性选择数据库。在我的场景中,我该如何实现?

版本:

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 中提供另一个数据库。

例如,您可以在 db1.properties 中拥有: database.name = jdbc:mysql://localhost:3306/testDB1 database.name = jdbc:mysql://localhost:3306/testDB2 在 db2.properties

在您的 applicationContext 文件中,您只需输入以下内容: property name="url" value="${database.name}"

于 2013-08-23T14:02:22.003 回答