Konfiguracja zewnętrzna dla aplikacji spring-boot
Mam aplikację spring-boot, którą chcę uruchomić z zewnętrznym plikiem konfiguracyjnym. Kiedy uruchamiam go jako jar (z wbudowanym kontenerem servlet), wszystko jest w porządku. Ale chcę go uruchomić pod zewnętrznym kontenerem serwletów (Tomcat) i tutaj mam problem z zewnętrzną konfiguracją. Próbowałem @PropertySource, ale w tym przypadku aplikacja dostaje tylko właściwości nieobecne w konfiguracji pliku war: konfiguracja zewnętrzna nie nadpisuje konfiguracji wewnętrznej. Więc pytanie: Jak mogę Konfiguruj konfigurację zewnętrzną która nadpisze konfigurację wewnętrzną?
3 answers
Prawdopodobnie używasz zewnętrznej konfiguracji w postaci application.properties
w bieżącym katalogu, gdy uruchamiasz aplikację jako jar. Jednak "bieżący katalog" nie jest zbyt przydatny podczas wdrażania jako wojna w zewnętrznym tomcacie. Nawet jeśli dowiesz się, co to jest bieżący katalog, najprawdopodobniej jest to ta sama lokalizacja dla wszystkich aplikacji uruchomionych w tym tomcat, więc jeśli używasz więcej niż jednej aplikacji, to nie będzie to działać zbyt dobrze.
To co robimy tutaj to zadeklaruj dwa PropertySources
w naszej aplikacji:
@PropertySources({@PropertySource(value={"classpath:internal.properties"}), @PropertySource(value={"file:${application.properties}"})})
internal.properties
zawiera "wbudowane" wartości domyślne dla propeties. Drugi {[5] } jest plikiem zawierającym zewnętrzną konfigurację. Zauważ, że nazwa pliku sama w sobie jest właściwością.
Definiujemy to zewnętrznie w elemencie Context
naszej aplikacji (w tomcat):
<Context docBase="/path/to/your/war/your.war">
<Parameter name="application.properties" value="/path/to/your/properties/application.properties"/>
</Context>
Pozwala to na uruchomienie wielu aplikacji w programie tomcat, przy czym każda aplikacja korzysta z własnego zewnętrznego pliku właściwości. Możesz nawet mieć wiele wystąpień ta sama aplikacja działająca z różnymi właściwościami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-18 12:27:11
Do uzewnętrzniania aplikacji Spring Boot.właściwości podczas wdrażania jako pliku war można ustawić spring.config.location
na początku, gdy aplikacja Spring Boot jest skonfigurowana:
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) {
return springApplicationBuilder
.sources(Application.class)
.properties(getProperties());
}
public static void main(String[] args) {
SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(Application.class)
.sources(Application.class)
.properties(getProperties())
.run(args);
}
static Properties getProperties() {
Properties props = new Properties();
props.put("spring.config.location", "classpath:myapp1/");
return props;
}
Aby uzyskać więcej informacji sprawdź to rozwiązanie .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:17
Spring Boot offer wiele sposobów aby określić lokalizację swoich właściwości, nie jest potrzebne, aby modyfikować swoje źródła.
Yo można zdefiniować wiosna.config.Lokalizacja wartość na przykład:
-
W twoim
tomcat/conf/Catalina/<host>
deskryptorze kontekstu:<Context> <Parameter name="spring.config.location" value="/path/to/application.properties" /> </Context>
-
Jako parametr JVM w pliku tomcat
setenv.sh
:-Dspring.config.location=/path/to/application.properties
Jako zmienna środowiskowa
SPRING_CONFIG_LOCATION
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-23 07:48:02