Solution using shell script
I will suggest to monitor your input file using file watchers, and if any file change detected, you can restart your app using shell scripts.
You didn't provided platform information.
If your production is on Linux then you can use watch to monitor
changes in your input file.
Solution using Java
If you want to detect the file change in Java, you could use 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");
}
}
}
Now to restart your app from within java, you have to start your application from within your main method.
Create a separate thread that will monitor your input file, and launch your app in a separate thread.
Whenever you detect any change in your input file, interrupt or kill the app thread, and re launch your application in a new thread.