我有一个 spring 应用程序,它使用 org.springframework.scheduling.quartz.SimpleTriggerBean
定期安排方法的执行。
有时,我想“按需”调用相同的方法。它将由 GUI 上的操作触发。由于我要执行的方法需要几秒钟,所以我不想在执行完成之前阻止用户 GUI。此外,我想协调“按需”执行与后台线程(互斥)。
这是一种方法:
- 创建一个名为 Manager 的 Bean 使用 TaskExecutor 来安排 任务。经理有一个方法 Manager.scheduleTask()
- 两者 背景和“点播” 线程将调用相同的方法 经理 (Manager.scheduleTask)
- 任务同步运行 确保只有一个任务的方法 正在运行。
我正在寻找更聪明/更清洁的解决方案。
最佳答案
如果您使用 Spring 3.0 或更新版本,请查看 Task Execution and Scheduling引用文档的一部分。
说明有两个注解:
@Scheduled
@Timer
解决方案至少是一样的:有 3 种方法:
private void doIt() {...}
@Scheduled(cron="0 0 0 * * MON-FRI")
public void doItEveryDay() {doIt();}
@Async
public void doItOnDemand() {doIt();}
但是有了这些注解,就会很容易阅读,也很容易理解为什么会有三种方法。
关于java - Spring,后台执行或按需执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4782921/