标签:java spring scheduled-tasks
我有一个方法需要每天07:00执行.
就此而言,我使用该方法创建了一个bean,并使用@Scheduled(cron =“0 0 7 * *?”)对其进行了注释.
在这个bean中我创建了一个main函数 – 它将初始化spring上下文,获取bean并调用该方法(至少是第一次),如下所示:
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(args[0]);
SchedulerService schedulerService = context.getBean(SchedulerService.class);
schedulerService.myMethod();
}
这很好 – 但只有一次.
我想我理解为什么 – 这是因为主线程结束 – 春天上下文也是如此,所以即使myMethod用@Scheduled注释它也不会工作.
我想到了一种方法来传递这个 – 意思是不要让主线程死掉,也许是这样的:
while (true){
Thread.currentThread().sleep(500);
}
我认为,应用程序上下文将保留,我的bean也是如此.
我对吗?
有没有更好的方法来解决这个问题?
我正在使用spring 3.1.2.
谢谢.
解决方法:
主线程应保持活动状态,直到任何非守护程序线程处于活动状态.如果您有< task:annotation-driven />在你的应用程序中标记然后Spring应该启动一个带有一小部分非守护程序线程的执行程序,并且主应用程序不应该终止.
您需要做的唯一事情是注册一个关闭挂钩,以确保在VM结束时进行清理.
context.registerShutdownHook()
标签:java,spring,scheduled-tasks 来源: https://codeday.me/bug/20190620/1248164.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。