如何在hibernate配置文件中添加if else condtion

时间:2016-04-06 13:53:20

标签: java spring hibernate if-statement conditional

我在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配置文件中实现这个条件检查。

另外请告诉我这种方法是否可行,或者我是否难以实施? 等待一些有价值的答案..

~~~素里亚

1 个答案:

答案 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
        ...
    }
}