java - 如何使用数据库数据动态添加或删除spring框架的调度程序(服务器处于运行状态)?

标签 java spring spring-boot oracle-sqldeveloper spring-scheduled

我正在使用 Spring-boot 和 Oracle sql 开发人员。 我想实现类似“用户管理调度程序”的功能。

用户可以在网页上添加或删除调度程序。 如果用户添加“调度程序每 3 分钟运行一次”,数据库表可能会...

s_id | s_cron | s_detail
sid000001 | 0 0/3 * * * ? | do job 1

Spring 调度程序必须每 3 分钟执行“作业 1”。

如果另一个用户还添加了“每 1 分钟运行一次的调度程序”,

s_id | s_cron | s_detail
sid000001 | 0 0/3 * * * ? | do job 1
sid000002 | 0 0/1 * * * ? | do job 2

Spring 调度程序必须每 3 分钟执行“作业 1”,并且必须同时每 1 分钟执行“作业 2”。

问题是:如何在 Spring-boot 中实现它? Spring服务必须动态(或自动)添加/删除调度程序,并在服务器运行中添加/删除数据库数据。

请给我一些帮助。

最佳答案

如果你想动态调度任务,你可以通过使用 ExecutorService 特别是 ScheduledThreadPoolExecutor 来实现,无需 spring

Runnable task  = () -> doSomething();
ScheduledExecutorService executor = 
Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
// Schedule a task that will be executed in 120 sec
executor.schedule(task, 120, TimeUnit.SECONDS);

// Schedule a task that will be first run in 120 sec and each 120sec
// If an exception occurs then it's task executions are canceled.
executor.scheduleAtFixedRate(task, 120, 120, TimeUnit.SECONDS);

// Schedule a task that will be first run in 120 sec and each 120sec after 
the last 
execution
// If an exception occurs then it's task executions are canceled.
executor.scheduleWithFixedDelay(task, 120, 120, TimeUnit.SECONDS);

关于java - 如何使用数据库数据动态添加或删除spring框架的调度程序(服务器处于运行状态)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57301046/

相关文章:

Java:将二进制字符串转换为十六进制字符串

java - 添加mvc后Spring MVC页面无法访问:resources

java - 实体映射中序列的增量大小设置为[50],而关联的数据库序列增量大小为[1]

java - spring boot中如何读写文件

spring-boot - 如何防止在保存时运行 AfterSaveCallback

maven - 使用Spring Boot进行Gretty构建失败

java - AWS SDK 2.x 中是否替换了 SelectObjectContentRequest?

Java - onlineUsers() 方法返回当前在线的所有用户的 ArrayList?

java - JOOQ Java 8 Schema 是抽象的,无法实例化

java - 如何使用 spring-boot 扫描具体的 JPA 实体而不扫描同一包下的所有实体?