我正在为贸易自动化网站构建Spring 4 Rest API。
http请求将包含一些信息以及日期时间。将这些信息插入数据库后(使用hibernate),我需要动态创建一个新的cron作业,它将访问这些数据库信息并执行某些操作。 cron作业必须在上面指定的时间执行。
因此,不会有固定的cron表达式,cron任务也必须访问使用 @Repository 注释的DAO层。 即使在堆栈和其他博客中引用了很多帖子,其中讲述了 @Scheduled , Spring-Quartz集成,我也无法找到解决方案。具体需要。
首选Java / Annotation配置。
请帮忙。 感谢
答案 0 :(得分:0)
我认为您可以使用以下内容:https://ha-jdbc.github.io/apidocs/net/sf/hajdbc/util/concurrent/cron/CronThreadPoolExecutor.html
答案 1 :(得分:0)
您可以使用Trigger和TaskScheduler接口。以下示例。要在将来取消作业,需要存储ScheduledFuture
实例。
@Configuration
public class AppConfiguration {
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
return new ThreadPoolTaskScheduler();
}
}
@Controller
public class TriggerService {
@Autowired
private TaskScheduler scheduler;
@Autowired
private DAOService db;
private ScheduledFuture job;
@GetMapping("/task1")
@ResponseBody
public void triggerMyTask(@RequestParam String cronExpression) {
Runnable runnable = new Runnable() {
@Override
public void run() {
log.info(new Date());
/**
* here You can do what You want with db
* using some DAOService
*/
db.count();
}
};
/**
* cancel current task if You need
*/
if(job != null) {
job.cancel(true);
}
CronTrigger trigger = new CronTrigger(cronExpression);
job = scheduler.schedule(runnable, trigger);
}
}
您可以传递cron表达式,例如:
http://localhost:8080/task1?cronExpression=0/5%20*%20*%20*%20*%20*