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ą?

Author: Aram Aslanyan, 2015-03-17

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.

 24
Author: ci_,
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 .

 16
Author: Daniel Mora,
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.

 9
Author: Rafael Membrives,
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