我在spring hibernate项目中工作,我连接到多个数据库。这些数据库详细信息将加载到属性文件中,并导入到hibernate.xml文件中。每个键都映射如下。
dbName = dbHost
映射如下:
<bean id="dbId" parent="abstractDataSource">
<property name="url" value="${dbName}" />
</bean>
但现在我需要包含一个条件,以便将属性键映射到多个值,如下面的
E.g。 dbName = statusFlag,dbHost,dbBackupHostName
我需要修改hibernate配置文件,以便使用keyName,应该检索相应的值并使用逗号分隔进行拆分。 然后我需要检查statusFlag。如果是,那么我应该将dbValue设置为&#39; dbHost&#39;,否则如果标志为false,则应将其设置为&#39; dbBackupHostName&#39;。
请帮助我如何在hibernate配置文件中实现这个条件检查。
另外请告诉我这种方法是否可行,或者我是否难以实施? 等待一些有价值的答案..
~~~素里亚
答案 0 :(得分:0)
要在bean中使用复杂的逻辑并在spring中创建,可以使用Java Configuration
它适用于Spring 3.示例伪代码如下。
@Configuration
public class MyCustomConfig {
@Value
String statusFlag;
@Value
String dbHost;
@Value
String dbBackupHostName;
@Bean
public BasicDataSource datasource () {
BasicDataSource datasource = new BasicDataSource();
//Do some custom processing to create datasource
...
return datasource;//return after creation
}
}
使用PropertyPlaceholderConfigurer加载属性,因为@PropertySource在3.0.5中不可用。
如果您可以将弹簧版本更改为 3.1 ,这不会产生太大影响,那么您可以使用@Profile和@PropertySource。 如果逻辑不是太复杂,您可以分开一次必须处于活动状态的属性集。 (本地数据库,开发数据库,产品数据库,自定义等)然后您可以尝试使用@Profile。
仅当该配置文件处于活动状态时,才会创建@Profile带注释的bean。可以通过设置spring.profiles.active来激活配置文件。
因此,要激活Dev配置文件,我们可以在属性文件中设置
spring.profiles.active=dev
//activating 2 profiles
spring.profiles.active=dev,mvc
以下是示例伪代码。
@Configuration
@PropertySource("bootstrap.properties")//set spring.profiles.active in it
public class MyCustomConfig {
@Profile("profile1")
public BasicDataSource datasource1 () {
//config using ${profile1.dbName} etc
...
}
@Profile("profile2")
public BasicDataSource datasource2 () {
//config using ${profile2.dbName} etc
...
}
@Profile("profile3")
public BasicDataSource datasource3 () {
//config using ${profile3.dbName} etc
...
}
}