2016-09-08 9 views
5

Używam rozruchu sprężynowego i mam dwa pliki właściwości zewnętrznych, dzięki czemu mogę łatwo zmienić jego wartość.Przeładuj wartość właściwości, gdy zmienia się plik właściwości zewnętrznych, rozruch sprężynowy

Mam jednak nadzieję, że aplikacja wiosną przeładuje zmienioną wartość po aktualizacji, podobnie jak odczyt z plików. Ponieważ plik właściwości jest wystarczająco łatwy do spełnienia moich potrzeb, mam nadzieję, że nie potrzebuję bazy danych lub pliku.

używam dwa różne sposoby, aby załadować wartości nieruchomości, przykładowy kod spodoba:

@RestController 
public class Prop1Controller{ 

    @Value("${prop1}") 
    private String prop1; 


    @RequestMapping(value="/prop1",method = RequestMethod.GET) 
    public String getProp() { 
     return prop1; 
    } 
} 


@RestController 
public class Prop2Controller{ 

    @Autowired 
    private Environment env; 

    @RequestMapping(value="/prop2/{sysId}",method = RequestMethod.GET) 
    public String prop2(@PathVariable String sysId) { 
     return env.getProperty("prop2."+sysId); 
    } 
} 

będę uruchomić mój wniosek z

-Dspring.config.location=conf/my.properties 

Odpowiedz

0

Obawiam się, trzeba będzie ponownie uruchomić kontekst Wiosna .

0

(1) Wiosna cloud RestartEndPoint

Można użyć RestartEndPoint: Programatically restart Spring Boot application/Refresh Spring Context

RestartEndPoint jest Siłownik EndPoint, wiązane z spring-cloud-context.

Jednak nie będzie monitorować zmian plików, musisz sam sobie z tym poradzić.


(2) DevTools

nie wiem, czy to jest dla aplikacji produkcyjnych, czy też nie. Możesz hakować trochę, aby zrobić to, co chcesz.

Spójrz na tej drugiej odpowiedzi pisałem na innym pytaniem: Force enable spring-boot DevTools when running Jar

Devtools monitors for file changes:

Aplikacje korzystające wiosna-boot-DevTools zostanie automatycznie uruchomiony ponownie gdy pliki na zmianę ścieżki klasy.

Został zbudowany tak, aby działał tylko w środowisku IDE. Z hakiem działa również po uruchomieniu ze słoika. Jednak nie mogę tego zrobić dla prawdziwej aplikacji produkcyjnej, decydujesz, czy pasuje ona do twoich potrzeb.

0

Myślę, że jedynym sposobem, aby osiągnąć swoje potrzeby, jest włączenie spring-cloud. Istnieje odświeżający punkt końcowy /refresh, który odświeża kontekst i komponenty bean.

Nie jestem całkiem pewien, czy potrzebujesz spring-cloud-config-server (jest to mikroserwis i bardzo łatwe do zbudowania), w którym przechowywana jest twoja konfiguracja (Git lub svn). Lub, jeśli jest on również użyteczny, po prostu przez plik application.properties w aplikacji.

Tutaj można znaleźć doc do refresh scope and spring cloud.

0

powinieneś być w stanie korzystać z tego Wiosna Chmura

Dodaj to jako zależność

compile group: 'org.springframework.cloud', name: 'spring-cloud-starter', version: '1.1.2.RELEASE' 

a następnie użyć @RefreshScope adnotacji

Wiosenna @Bean oznaczona jako @RefreshScope otrzyma specjalne traktowanie gdy jest zmiana konfiguracji. Rozwiązuje to problem stanowych ziaren, które otrzymują swoją konfigurację dopiero po zainicjowaniu. Na przykład, jeśli DataSource ma otwarte połączenia, gdy adres URL bazy danych zostanie zmieniony przez środowisko, prawdopodobnie będziemy chcieli, aby właściciele tych połączeń mogli wykonać to, co robią. Następnie, gdy ktoś pożyczy połączenie z puli, otrzyma jeden z nowym adresem URL.

również istotne jeśli masz Wiosna Siłownik

przypadku aplikacji Wiosna Boot siłownikiem Istnieją pewne dodatkowe punkty końcowe zarządzania:

Posta do

/env do aktualizacji środowiska i REBIND @ Konfiguracja konfiguracji Właściwości i poziomy logowania

/Odśwież dla ponownego załadowania kontekstu paska startowego i odniesienia reshing ziaren @RefreshScope

Spring Cloud Doc

Powiązane problemy