2015-08-25 19 views
38

W mojej aplikacji Spring Boot chcę utworzyć plik właściwości specyficznych dla środowiska. Typ opakowania mojej aplikacji na wojnie i uruchamiam go w osadzonym tomcat. Używam stów i wykonuję główną z samych stów.Specyficzny dla środowiska plik application.properties w aplikacji Spring Boot

  1. Czy mogę mieć plik właściwości specyficzny dla środowiska, taki jak aplikacja - $ {wartość-env} .properties?

W powyższym przypadku, env-wartość będą miały wartości jako lokalny/devl/test/prod

  1. Gdzie ustawić plik env-wartość? W przypadku wersji lokalnej mogę ustawić ją jako argument jvm poprzez sts

  2. Kto czyta application.properties w aplikacji Spring Boot.

  3. Jak załadować plik właściwości specyficznych dla środowiska? Dla przykładu - jeśli ustawię bazę danych uid, pwd, schema itp. W pliku właściwości specyficznych dla środowiska, to czy źródło danych będą w stanie zrozumieć właściwości w nim zawarte?

  4. Czy w tym samym czasie można użyć pliku application.properties i application-local.properties?

+0

Czy przeczytałeś [to] (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html)? Zasadniczo jest obsługiwany od razu po wyjęciu z pudełka. –

+0

Zrobiłem, ale to nie działa. Mam więc plik application.properties i plik application-local.properties w tej samej lokalizacji. Plik application-local.properties zawiera właściwości związane z db. application.properties ma jedną właściwość dotyczącą sprężyny mvc. Dodałem także -Dprofile = local jako konfigurację debugowania, ale ta wartość nie jest pobierana – user3534483

+0

, ponieważ musisz ustawić 'spring.active.profiles', więc użyj' -Dspring.active.profiles = local'. zamiast. –

Odpowiedz

90

Wiosna Boot już has support dla profile właściwości opartych.

Po prostu dodaj plik application-[profile].properties i określ profile, które będą używane przy użyciu właściwości spring.profiles.active.

-Dspring.profiles.active=local 

ten ładuje application.properties i application-local.properties przy czym te ostatnie właściwości nadrzędnych od pierwszego.

+0

Czy możemy zastąpić użycie właściwości aplikacji innym plikiem dla określonego profilu bez załadowania ich obu? Na przykład do testów lub dev? –

+0

M. Deinum, ja też mam podobny problem, mam application.yml i application-qa.yml i dałem -Dspring.profiles.active = qa, oba pliki są czytane, ale właściwości z aplikacji-qa.yml nie nadpisują właściwości z application.yml, zawsze widzę właściwości tylko z application.yml? czy jest jakiś sposób na określenie priorytetu? – Suresh

+2

Witam obu, To może rozwiązać twoje problemy. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties Przykład: https://www.mkyong.com/spring-boot/spring-boot-profile-based-properties-and-yaml-example/ –

14

Tak, można. Ponieważ używasz sprężyny, sprawdź anotację @PropertySource.

Anotate konfiguracja z

@PropertySource("application-${spring.profiles.active}.properties") 

można nazwać to, co kiedykolwiek chcesz, i dodać inn wiele plików własności jeśli lubisz zbyt. Może być ładne, jeśli masz więcej zestawów i/lub ustawień domyślnych, które należą do wszystkich środowisk (można je również zapisać za pomocą @PropertySource {..., ..., ...}).

@PropertySources(
    @PropertySource("application-${spring.profiles.active}.properties"), 
    @PropertySource("my-special-${spring.profiles.active}.properties"), 
    @PropertySource("overridden.properties")) 

Następnie można uruchomić aplikację ze środowiskiem

-Dspring.active.profiles=test 

W tym przykładzie nazwa zostanie zastąpiona aplikacji testowych właściwości i tak dalej.

+0

Problem polega na tym, że '$ spring.profiles.active}' jest łańcuchem/przecinkiem oddzielonym łańcuchem. Może więc nie robić tego, czego się spodziewasz/chcesz zrobić, gdy aktywnych jest wiele profili. –

+0

To prawda, ale działa poprawnie dla dwóch profili - jednego domyślnego i jednego zdefiniowanego za pomocą PropertySource. Jeśli chodzi o bardziej zaawansowane zarządzanie nieruchomościami, myślę, że będziesz musiał szukać poza wiosną. Również PropertySource jest odczytywany tylko podczas uruchamiania. Inne, bardziej zaawansowane biblioteki do obsługi nieruchomości, mogą również zmieniać właściwości run-time. – Tzen

+0

To działało, ale nadal nie rozumiem, dlaczego musiałem to zrobić ręcznie. W jednym z moich innych repozytoriów nie musiałem tego robić. –

0

możemy zrobić tak:

w application.yml:

spring: 
    profiles: 
    active: test //modify here to switch between environments 
    include: application-${spring.profiles.active}.yml 

w aplikacji testowej.yml:

server: 
    port: 5000 

aw aplikacji local.yml:

server: 
    address: 0.0.0.0 
    port: 8080 

wtedy wiosna rozruchu rozpocznie naszą aplikację jak chcemy.

Powiązane problemy