2013-04-02 7 views
5

Mój problem wygląda na prosty, ale nie jestem w stanie go rozwiązać. Mam plik właściwości, który zawiera szczegóły konfiguracji wszystkich środowisk (dev, qa, prod).Symbole zastępcze sprężyn z ciągiem konkatenacji

Przykład config.properties:

dev.maxLength=2000 
qa.maxLength=4000 

Mamy Właściwości pliku rodzic, który posiada nazwę hosta, w tym mappingu środowisko.

Przykład hosts.properties:

host1=dev 
host2=qa 

Nazwa właściwości host1 jest przechowywany w fasoli hostname.

<bean id="hostname" 
    factory-bean="localhostInetAddress" 
    factory-method="getHostName"/> 

Aby rozwiązać ten config Właściwości Nazwa muszę dołączyć ciągi następująco, ${${**hostname**}.maxLength} który powinien być rozwiązany jak ${dev.maxLength}

Próbowałem za pomocą Spel bez powodzenia. Otrzymuję wyjątek Could not resolve placeholder. Jak mogę połączyć wartość fasoli w posiadaczu miejsca nieruchomości? W jaki sposób konstruowane są nazwy właściwości dynamicznych?

Wiosna wersja 3.2

Odpowiedz

2

I rozwiązać problem poprzez zmianę PropertyPlaceholderConfigurer fasoli Properties. <util:properties/> są dostępne w Spel.

przykład: "#{prop[host+'.'+'maxLength']}"

gdzie host jest fasoli ciągu.

+0

Umysł, aby udostępnić swój XML? Chcę zrobić to samo, ale nie byłem pewien, o czym wspomniałeś, zmieniając go na Właściwości ... –

2

Byłoby lepiej mieć właściwości konkretnego środowiska w pliku własnych i używać Wiosna Profile. Na przykład mam cztery pliki xml tylko dla konfiguracji db, local.db.xml, dev.db.xml, qa.db.xml i prod.db.xml. Wewnątrz każdego pliku db.xml ustawiam profil na odpowiednią wartość.

Moja local.db.xml ma

<beans profile="db.local" .. > 

Do uruchomienia Tomcat, określić opcje VM następująco

-Dspring.profiles.active=db.local 
+0

Nie mogę używać zmiennych Środowisko/właściwości JVM, to jest ograniczenie polityki. – user2235506

12

Aby połączyć wartości analizowane z symboli zastępczych właściwości Spring, należy uciec ich wartości przy użyciu pojedynczych zapytań ('') i zawijać wyrażenia zastępcze za pomocą wyrażenia SpEL, używając #{}.

<bean id="myService" class=""com.services.MyService"> 
    ... 
    <property name="endpointAddress" value="#{'${server}' + ':' + '${port}' + '${endpoint}'}" /> 
</bean> 

gdzie:

server = http://domain.host.com

port = 7777

końcowy =/usług/MyService

Wynik byłby:

http://domain.host.com:7777/services/myservice

Powiązane problemy