2016-05-06 10 views
0

In meinem Spring-Anwendungskontext habe ich DynamicSessionFactoryInitBean, der immer im Anwendungskontext benötigt wird, da er für dynamische Beandefinitionen für Datenquellen und Ruhezustandssitzungsfactories für alle Datenbanken zuständig ist (identisches Schema, mehrere Datenbanken)) im System registriert. Es gibt eine weitere Bean LiquibaseInitBean, die nur vorhanden ist, wenn das Profil Entwicklung aktiv ist und für die Anwendung von Liquibase Datenbank-Upgrades auf jede im System registrierte Datenbank verantwortlich ist.Bedingte Abhängigkeit zwischen Beans im Spring-Kontext

Es wäre schön, DynamicSessionFactoryInitBean zu machen, hängt von LiquibaseInitBean (, wenn es vorhanden ist, die Entwicklung Profil Sinn aktiv ist), so dass DynamicSessionFactoryInitBean immer up-to-date-Schema-Datenbank sieht.

<beans> 

    <!-- other beans.... --> 

    <bean id="dynamicSessionFactoryInitBean" class="my.app.DynamicSessionFactoryInitBean" /> 

    <beans profile="development"> 
     <bean id="liquibaseInitBean" class="my.app.liquibase.LiquibaseInitBean" /> 
    </beans> 
<beans> 

einfach das Hinzufügen depends-on="liquibaseInitBean" Attribut für DynamicSessionFactoryInitBean Definition wird offensichtlich Probleme verursachen (keinen Bean mit dem Namen ‚LiquibaseInitBean‘ definiert ist), wenn die Entwicklung Profil nicht aktiv ist. Gibt es eine "Bedingte hängt von" oder "hängt ab, wenn vorhanden" -Fabrik im Frühjahr?

Antwort

1

Definieren Sie Ihre dynamicSessionFactoryInitBean in zwei Profilen die Standard- und Entwicklungsprofile. Machen dynamicSessionFactoryInitBean abhängig von liquibaseInitBean nur bei der Entwicklung Profil als

<beans> 
    <!-- other beans.... --> 
    <beans profile="default"> 
     <bean id="dynamicSessionFactoryInitBean" class="my.app.DynamicSessionFactoryInitBean" /> 
    </beans> 

    <beans profile="development"> 
     <bean id="liquibaseInitBean" class="my.app.liquibase.LiquibaseInitBean" /> 
     <bean id="dynamicSessionFactoryInitBean" class="my.app.DynamicSessionFactoryInitBean" depends-on="liquibaseInitBean" /> 
    </beans> 
<beans> 

NB folgt. Das Standardprofil ist immer aktiviert, wenn kein anderes Profil aktiviert wurde.

+0

Vielen Dank! Ich werde das ausprobieren. –

Verwandte Themen