2017-04-18 5 views
2

Erweiterung der Frage hier ändert:Neustart Frühling Stiefel, wenn die Eingangstextdatei

Reading data from file at start to use in controller in Spring Boot

Ich möchte meine Feder Boot Neustart der Anwendung in der Produktion, wenn die Eingabedatei ändert. Ich werde die App mit so etwas wie diese

java -jar application.jar [filename] 

starten Und wenn ich die Eingabetextdatei ändern, muss die App neu gestartet und die Datei erneut gelesen werden. Wie kann ich es tun? Ich frage, wie man Dateiänderungen beobachtet und Neustart auslöst.

+0

Mögliche Duplikate von [programmgesteuert Neustart Spring Boot-Anwendung] (http://StackOverflow.com/Questions/29117308/programmmatic-restart-Spring-Boot-Application) –

Antwort

2

Lösung Shell-Skript mit

Ich werde vorschlagen, um Ihre Eingabedatei mit Datei-Beobachter zu überwachen, und wenn eine Datei Änderung erkannt, können Sie Ihre App mit Shell-Skripten neu starten.

Sie haben keine Plattforminformationen zur Verfügung gestellt.

Wenn Ihre Produktion auf Linux ist, dann können Sie watch verwenden Änderungen in Ihrer Eingabedatei zu überwachen.

Lösung mit Java

Wenn Sie die Datei ändern in Java erfassen möchten, können Sie Filewatcher,

final Path path = FileSystems.getDefault().getPath(System.getProperty("user.home"), "Desktop"); 
System.out.println(path); 
try{ 
    final WatchService watchService = FileSystems.getDefault().newWatchService(); 
    final WatchKey watchKey = path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY); 
    while (true) { 
     final WatchKey wk = watchService.take(); 
     for (WatchEvent<?> event : wk.pollEvents()) { 
      //we only register "ENTRY_MODIFY" so the context is always a Path. 
      final Path changed = (Path) event.context(); 
      System.out.println(changed); 
      if (changed.endsWith("myFile.txt")) { 
       System.out.println("My file has changed"); 
      } 
     } 
     // reset the key 
     boolean valid = wk.reset(); 
     if (!valid) { 
      System.out.println("Key has been unregisterede"); 
     } 
    } 
} 

nun aus Java neu zu starten Sie Ihre App verwenden können, müssen Sie Starten Sie Ihre Anwendung von Ihrer Hauptmethode aus.

Erstellen Sie einen separaten Thread, der Ihre Eingabedatei überwacht und Ihre App in einem separaten Thread startet.

Wenn Sie Änderungen an Ihrer Eingabedatei feststellen, unterbrechen oder beenden Sie den App-Thread und starten Sie Ihre Anwendung erneut in einem neuen Thread.

+0

Ja, es ist Ubuntu 16.04, aber ich muss es innerhalb des Programms tun selbst – uploader33

+0

In Java können Sie Dateiänderungen mit FileWatcher API erkennen –

Verwandte Themen