Eigenschaft nicht gefunden mit multiplen context:property-placeholder
Bin ich mit spring 3.1 mit Feder-profile zum laden der Bohnen. In meinem app-Kontext-Datei, ich lade die Eigenschaften wie :
<context:property-placeholder order="1" location="classpath*:META-INF/spring/*_${spring.profiles.active}.properties" ignore-unresolvable="true"/>
Und dann benutze ich den Wert der Eigenschaft zum laden der Daten Quelle Bohne wie
<property name="driverClassName" value="${database.driverClassName}"/>
Funktioniert es einwandfrei.
Das problem beginnt, wenn ich hinzufügen ein paar weitere Eigenschaft Platzhalter so, dass die Eigenschaften von einigen Datenbank-Tabellen geladen werden können.
Dieser verwendet eine Eigenschaften-Referenz geladen
<bean id="configFactoryBean"
class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
<constructor-arg ref="globalSystemConfiguration"/>
</bean>
Hinzufügen, um die details, dieser configFactoryBean
verwendet die datasource
zum laden der Eigenschaften aus der Datenbank.
Wenn ich dies mache, habe ich die folgende Ausnahme:
java.lang.ClassNotFoundException: ${database.driverClassName}
Meine Analyse ist, dass Sie versuchen zu laden, die datasource
vor der Lösung die Eigenschaft aus der ersten Kontext-Eigenschaft Platzhalter. Ich kann mich auch irren. Oder vielleicht Feder-Profil variable wird nicht richtig aufgelöst.
Kann jemand bitte mir helfen, dieses Problem zu beheben.
Dank
Akki
- Versuchen Sie, die um 0
- Nein. es funktioniert nicht. Ich geändert, um zu 0 für die erste und immer noch die gleiche Fehlermeldung.
- Oh warten, es ist nicht der Suche nach Ihrem Datenbank-Treiber. Haben Sie es zu den zusätzlichen classpath?
- ja. und es funktioniert, wenn ich entfernen die anderen beiden <context:property-placeholder..> - tags. Ich denke, es ist nicht in der Lage zu lösen, die Eigenschaft ${Datenbank.driverClassName}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler über mehrere Eigenschaft Platzhalter betreffen könnte zu deinem problem: https://jira.spring.io/browse/SPR-9989
Jeder <context:property-placeholder - > erstellt eine neue Instanz von PropertyPlaceholderConfigurer - wird es leicht chaotisch. Sollten Sie eine solche Sache, die pro Anwendung und auf Anwendungsebene, nicht auf Bibliotheken - das macht die Pflege viel einfacher.
Weitere Informationen und einen Vorschlag, wie es zu meistern, sehen Sie hier:
http://rostislav-matl.blogspot.cz/2013/06/resolving-properties-with-spring.html
order
- Attribut eingeführt, um dieses Problem zu beheben (anstatt eine neue Instanz zu erstellen Wiederverwendung und pflegen eine Kette von Eigentum-Quellen). Derzeit jira.Frühling.io/browse/SPR-9989 geöffnet ist.In meine Anwendung bin ich mit property-placeholder configurer in der folgenden Weise, und es funktioniert sehr gut. Sie können versuchen, die.
Ich denke, das sollte Ihr problem beheben. 🙂
Da Sie vorgeschlagen haben, hart codierten Pfad zu der Konfigurationsdatei funktioniert, versuchen Sie mithilfe der profile-Attribut auf den tag, um selektiv gehören die Konfiguration.
Finden Sie in diesem Artikel erklären, profile: http://java.dzone.com/articles/using-spring-profiles-xml
CommonsConfigurationFactoryBean
eine Rolle spielen?CommonsConfigurationFactoryBean
?