java - Spring,后台执行或按需执行

标签 java multithreading spring

我有一个 spring 应用程序,它使用 org.springframework.scheduling.quartz.SimpleTriggerBean 定期安排方法的执行。

有时,我想“按需”调用相同的方法。它将由 GUI 上的操作触发。由于我要执行的方法需要几秒钟,所以我不想在执行完成之前阻止用户 GUI。此外,我想协调“按需”执行与后台线程(互斥)。

这是一种方法:

  1. 创建一个名为 Manager 的 Bean 使用 TaskExecutor 来安排 任务。经理有一个方法 Manager.scheduleTask()
  2. 两者 背景和“点播” 线程将调用相同的方法 经理 (Manager.scheduleTask)
  3. 任务同步运行 确保只有一个任务的方法 正在运行。

我正在寻找更聪明/更清洁的解决方案。

最佳答案

如果您使用 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/

相关文章:

java - 在 Android 中使用 FlightAware API

java - 在 Java Program Lab 中需要快速帮助

java - 更改 NavigationDrawer 的颜色单击颜色

JavaFX : How to pass value from background thread to JavaFX UI thread with Task

java - 使用 jcrop 和 java 裁剪图像

spring - 收件人端点与 SAML 响应不匹配

java - 使用 Apache FOP Java 库将 FO 转换为 PDF/a

Python 线程 - 将控制权返回给终端,同时保持框架打开

c++ - 无法让 boost::thread 与 MSVS2013 一起工作

java - 无法解析字符串值 'jwt.secret' 中的占位符 "${jwt.secret}"