我有一个带有弹簧项目的可执行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>
hibernate属性是:
<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
答案 0 :(得分:2)
您应该拥有应用程序中依赖于环境的所有内容(例如,数据库配置,服务器的绝对路径,外部WebService URL等)。
这通常可以使用标准Java属性文件来完成。然后,您可以使用PropertyPlaceholderConfigurer加载它,并在您需要配置内容的bean配置中的任何位置使用${config.myproperty}
样式。
在启动应用程序时,您必须为其提供此配置文件的路径,或者它也可以存在于默认路径中(约定优于配置)。
答案 1 :(得分: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 db2.properties中的database.name = jdbc:mysql:// localhost:3306 / testDB2
在你的applicationContext文件中,你只需要这样: property name =“url”value =“$ {database.name}”