使用Procrun封装为Windows服务的Java应用无法停止的问题求助
使用Procrun封装为Windows服务的Java应用无法停止的问题求助
我最近在把一个Java应用封装成Windows服务,用的是Procrun,安装和启动都挺顺利的,应用运行起来业务逻辑也完全正常,但就是没法停止服务,试了好几次都没反应,完全摸不着头脑。
下面是我的服务启动和停止时会调用的Main类代码(部分判断逻辑我简化了下):
package com; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Main { private static Logger logger = LogManager.getLogger(Main.class.getName()); private static ScheduledExecutorService scheduler; public static void main(String args[]) { // 原代码有根据启动参数做的判断逻辑,核心是初始化了定时任务 scheduler = Executors.newSingleThreadScheduledExecutor(); // 每隔固定时间执行一次业务任务 scheduler.scheduleAtFixedRate(() -> { try (Connection conn = DriverManager.getConnection("数据库连接参数", "用户名", "密码"); Statement stmt = conn.createStatement()) { LocalDateTime now = LocalDateTime.now(); logger.info("定时任务执行,当前时间: " + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); // 这里是具体的数据库操作等业务逻辑 } catch (SQLException e) { logger.error("业务任务执行出错", e); } }, 0, 5, TimeUnit.MINUTES); } }
我自己琢磨了下,会不会是没正确处理Procrun的停止信号?比如Procrun需要我实现特定的stop方法来接收停止指令,然后手动关闭那个定时线程池?或者是线程池里的任务一直在阻塞,导致没法正常退出?有没有大佬遇到过类似的问题,给我点排查思路或者解决办法呀?
备注:内容来源于stack exchange,提问作者Juan E. Ordóñez
相关产品推荐
相关产品推荐

