项目使用jenkins热部署发布,导致web工程中的任务队列重复启动,即重新发布的工程自己启动了自己的任务线程,但之前老项目的任务线程没有被终止
工程任务线程如下所示:
@PostConstruct
public void messageListener() {
new Thread(new Runnable() {
@Override
public void run() {
while(true){
......
}
}
}, "任务线程").start();
}
解决方法很简单,只需要在bean销毁的方法中停止这个线程即可,代码如下:
/**
* 控制线程是否继续运行
*/
private volatile boolean isRunning = true;
/**
* 监听消息队列,处理待发送的消息
*/
@PostConstruct
public void messageListener() {
thread = new Thread(new Runnable() {
@Override
public void run() {
while (isRunning) {
......
}
}
}, "任务线程");
thread.start();
}
@PreDestroy
public void stop() {
isRunning = false;
if (thread != null && thread.isAlive()) {
thread.interrupt();
}
}
以上即可在jenkins热部署卸载类时自动停止之前的任务线程