有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在hibernate配置文件中添加if-else条件

我在SpringHibernate项目中工作,在那里我连接到多个数据库。这些数据库详细信息加载到属性文件中,并导入到hibernate中。xml文件。每个键映射如下

dbName=dbHost

映射如下:

<bean id="dbId" parent="abstractDataSource">
        <property name="url" value="${dbName}" />
</bean> 

但是现在我需要包括一个条件,使得属性键映射到多个值,如下所示

例如,dbName=statusFlag、dbHost、dbBackupHostName

我需要修改hibernate配置文件,以便使用keyName检索并用逗号分隔相应的值。 然后我需要检查statusFlag。如果为true,则应将dbValue设置为“dbHost”,否则如果该标志为false,则应将其设置为“dbBackupHostName”

请帮助我如何在hibernate配置文件中实现此条件检查

另外,请让我知道这种方法是否可以继续,或者我是否使其难以实施? 等待一些有价值的答案

苏丽娅


共 (1) 个答案

  1. # 1 楼答案

    要在spring的bean连接和创建中使用复杂逻辑,可以使用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中不可用

    如果您可以将spring版本更改为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
            ...
        }
    }