In einem Bereich unserer Frühlings-Konfiguration, die wir verwenden:Kann ich PropertyPlaceholderConfigurer verwenden, um die Eigenschaften von String zur Laufzeit zu ersetzen?
applicationContext.xml:
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" lazy-init="true">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
jedoch ehcache.xml kein Standard-Feder Bean-Konfigurationsdatei ist aber enthält $ {ehcache.providerURL }, die wir ersetzen wollen auf das, was wir mit PropertyPlaceHolderConfigurer an anderer Stelle konfiguriert haben:
ehcache.xml:
<cacheManagerPeerProviderFactory
...
providerURL=${ehcache.providerURL}
...
</cacheManagerPeerProviderFactory>
Ich könnte die Maven/Profil/Filter-Kombination verwenden, aber das würde einen Build erstellen, der spezifisch für die Umgebung ist, für die er erstellt wird. Was ich wirklich tun möchte, ist die Vorverarbeitung der ehcache.xml zur Laufzeit, die Substitutionen basierend auf den von PropertyPlaceHolderConfigurer gelesenen Eigenschaften durchführt und dann das Ergebnis davon in die EhCacheManagerBean weiterleitet.
An diesem Punkt denke ich darüber nach, die Funktionalität hinter der @ Value-Annotation irgendwie zu duplizieren, da es "bla bla bla $ {property} bla bla bla" ersetzen kann, außer dass ich dies nach dem Lesen einer Datei von der Festplatte tun muss.
Irgendwelche Ideen, wie man das macht?
Danke. -AP_
Es gibt Code in Spring, der @Value ("bla $ {param} bla) verwendet und die Ersetzung ordnungsgemäß ausführt. Ich dachte daran, diesen Code zur Laufzeit irgendwie zu verwenden, um den Inhalt meiner Datei als String weiterzuleiten. und eine Zeichenfolge mit ersetzten Parametern zurückbekommen. –
Nach einigem Graben habe ich folgendes gefunden: ((ConfigurableApplicationContext) applicationContext) .getBeanFactory(). ResolveEmbeddedValue ("$ {someValue}"); Ich kann jede alte Datei lesen, dann mit dieser Methode alle Platzhalter auflösen. Gibt es etwas in Spring, das mir erlauben wird, dies aus der Bean-Konfiguration zu tun, ohne mehr Code schreiben zu müssen? –
Ich denke Adis Antwort ist ein ziemlich anständiger Hack. Lesen Sie das XML in eine Zeichenfolge, führen Sie eine String-Ersetzung für die gewünschten Teile durch, legen Sie die Zeichenfolge als Konfigurationsspeicherort fest (InputStreamResource/StringBufferInputStream), und rufen Sie dann super auf. – sourcedelica