2019独角兽企业重金招聘Python工程师标准>>>
1、建立项目
@SpringBootApplication
@EnableAsync
@EnableScheduling
@EnableAutoConfiguration(exclude={ DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
@ImportResource("classpath:spring.xml")
@EnableAsync 开启异步支持
@EnableScheduling 开启定时任务支持
@EnableAutoConfiguration作用 Spring Boot会自动根据你jar包的依赖来自动配置项目。例如当你项目下面有HSQLDB的依赖时,Spring Boot会创建默认的内存数据库的数据源DataSource,如果你自己创建了DataSource,Spring Boot就不会创建默认的DataSource。
@ImportResource("classpath:spring.xml") 导入一些常规性配置,虽然spring-boot不推荐用xml了,但是本来还是有些习惯用xml来配置
2、
@Component
public class TaskTest {@Scheduled(cron="0/30 * * * * ?")public void task(){System.out.println("========每30秒运行一次=======");}
}
这样一个简单的定时任务作业系统就完成了
问题:下面说说过程中遇到的一个小坑,至今我都没搞明白的一个问题主要是异常任务问题
@Scheduled(cron="0/30 * * * * ?")public void task1(){asyn();System.out.println("========每30秒运行一次=======");}@Asyncpublic void asyn(){System.out.println("========异步任务=======");}
看到代码,很简单明了,30秒运行一次task1方法,而task1方法则调用了一个异步方法,但是问题就出在这里,如果这样写的会,他这里只会同步执行异步任务,这里百思不得其解。
我的解决办法
@Component
public class TaskTest {@Autowiredprivate AsyncTask asyncTask;@Scheduled(cron="0/30 * * * * ?")public void task1(){asyncTask.asyn();//调用异步任务System.out.println("========每30秒运行一次=======");}
}
异步方法不在原来定时作业的class里,这样就可以异步作业了,不明白这里的原因,如果有人知道麻烦告诉一下
@Component
public class AsyncTask {@Asyncpublic void asyn() throws InterruptedException{Thread.sleep(5000);System.out.println("========异步任务=======");}
}