You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:13:06