2016-04-06 3 views
0

Я работаю в Spring hibernate project, где я подключаюсь к нескольким базам данных. Эти данные базы данных загружаются в файл свойств и импортируются в файл hibernate.xml. Каждый ключ отображался, как показано ниже.как добавить if else condtion в конфигурационный файл hibernate

DbName = DBHost

Mapping, как показано ниже:

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

Но теперь я должен включать условие, такое, что ключевое свойство для отображения на несколько значений, как показано ниже

Э.Г. dbName = statusFlag, dbHost, dbBackupHostName

Мне нужно изменить конфигурационный файл спящего режима таким образом, чтобы с помощью keyName соответствующие значения должны быть получены и разделены запятыми. Тогда мне нужно проверить statusFlag. Если это правда, тогда я должен установить dbValue в 'dbHost', иначе, если флаг имеет значение false, он должен быть установлен в 'dbBackupHostName'.

Пожалуйста, помогите мне, как реализовать это условие в файле конфигурации hibernate.

Также, пожалуйста, дайте мне знать, подходит ли этот подход, или я делаю это слишком сложным для реализации? Ожидание некоторых ответов .. удобное сообщение

~~~ Suriya

+0

Какую версию весны вы используете? – 11thdimension

+0

@ 11thdimension - Я использую весну 3.0.5 версии –

+0

Итак, сделайте шаг назад. Вам нужно иметь три разных имени базы данных для одного компонента? – Makoto

ответ

0

Для использования сложной логики в проводке боба и создания весной вы можете использовать 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. Если логика не слишком сложна и вы можете отделить набор свойств, которые должны быть активны за раз. (Local db, Dev db, Prod db, Custom и т. Д.). Затем вы можете попробовать использовать @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 
     ... 
    } 
} 
+0

Спасибо за ваше предложение. Я попробую сделать то же самое и обновить, если это сработает –

Смежные вопросы