我有一个spring-boot应用程序,并且我使用石英来创建作业。我像运行我的应用程序
./ bin / app启动
当我的应用程序停止时,我需要赶上实现Job的类:
./ bin /应用停止
有人知道我该怎么做吗?
我尝试使用方法DisposableBean
实现destroy()
,但是不起作用。
我的主要班级是这样的:
public class Main implements CommandLineRunner {
public static void main(String[] args) throws Exception {
.....
Quartz创建作业,并在我的作业中创建一个变量“ lock”,如下所示:
public class MyJob implements Job, DisposableBean {
private RLock lock = redissonClient.getFairLock(jobName);
.....
@Override
public void destroy() throws Exception {
if(lock != null) {
lock.forceUnlock();
}
}
当我的应用程序在执行过程中停止时,我需要强制解锁,因此我需要在MyJob类而不是Main类中捕获停止。 先感谢您!!
答案 0 :(得分:0)
您应该能够将事件观察器附加到应用程序上下文,例如:
public class MyJob implements Job, DisposableBean {
public MyJob(ApplicationContext context) {
((ConfigurableApplicationContext)context).addApplicationListener(
(ContextClosedEvent event) -> onContextClosed()
);
}
private void onContextClosed() {
...
}
}
答案 1 :(得分:0)
使用db.a.aggregate([
{$limit:1000},
{$lookup: {
from: "werkstuecke",
localField: "_id",
foreignField: "AuftragsID",
as:"test"
}},
// here may has other operation like $unwind
{$limit:1000}
]).pretty()
批注。用@PreDestroy
注释要在停止时执行的方法。
@PreDestroy