我有一个我不知道如何解决的问题。我使用 1 个单线程的执行程序服务制作了一个 java 轮询应用程序。该服务进行一些文件操作和数据库交互。
如果我们使用命令 promt/executable jar 中的 java -jar myapp.jar 运行,它会运行。我们可以随时阻止它。
现在我需要为用户制作 2 个脚本(比如 tomcat)。一个用于启动应用程序,另一个用于停止。
但想法是当用户执行脚本停止时,该进程不会被杀死,直到执行器服务的所有作业/线程完成。因为,如果我们在运行状态下终止进程,执行该作业的系统将停止可能处于不一致状态(例如在移动文件期间)。
问题是,我无法从 shell 脚本访问 ExecutorService 结果。
如何制作两个脚本来运行此应用程序并控制和访问行为。?
编辑:
我的 myapp.jar 运行定期执行器服务。我需要制作一个停止脚本,它只允许在执行程序服务未运行任务后停止,而不是终止进程。因为,如果我在运行过程中杀死进程,我就会失去系统的一致性。我的系统读取文件并将其移动到另一个目录中。如果我在中间杀死,有些文件会被处理,有些则不会。我需要一个解决方案,如果用户从 UNIX 系统执行停止脚本,该脚本要么不会终止进程,要么等到作业完成。