【问题标题】:Java EE 7 schedule tasks in different environments/tiersJava EE 7 在不同的环境/层中调度任务
【发布时间】:2018-11-07 03:30:17
【问题描述】:

有没有办法在不同的环境和计划中配置特定的计划任务? 例如。相同的计划任务“MyTask”应该在集成和生产中运行。在生产中,“MyTask”必须每 24 小时运行一次,而在集成中,“MyTask”根本不能运行。 目前我们专注于原生 Java EE 7 调度机制。 Spring、Quartz 是我们不想使用的额外框架/库(如果可能的话)。

【问题讨论】:

    标签: scheduled-tasks scheduler java-ee-7


    【解决方案1】:

    如果您使用 Spring,请尝试 @Scheduled("${cronEx}")。您可以为每个环境提供定义 cronEx 值的不同配置。例如,您可以通过 JNDI 获取 cronEx 值。更多信息:SO-Q&ASO-Q&A

    如果您需要更复杂的东西,请查看 QUARTZ 项目:http://www.quartz-scheduler.org/ 这是一个用于安排作业的库。

    【讨论】:

    • 目前我们专注于原生 java EE 7 调度机制。 Spring、Quartz 是我们不想使用的额外框架/库(如果可能的话)。
    【解决方案2】:

    在 Java EE 中有多种创建计划任务的方法。我认为更适合您的是使用 ManagedScheduledExecutorService

    @ApplicationScoped
    public class PeriodicTask {
    
        @Resource
        ManagedScheduledExecutorService mses;
    
        @Inject
        @Config("period")
        private int period;
    
        public void startJobs() {
            mses.scheduleAtFixedRate(this::task, 0, period, TimeUnit.MINUTES);
        }
    
        private void task() {
            ...
        }
        ...
    }
    

    例如,您可以根据运行环境注入配置值 period。如果您不需要为特定环境安排任务,您可以使用另一个配置参数来避免调用 scheduleAtFixedRate 方法。

    唯一需要做的是调用 startJobs 方法。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2023-03-18
      • 2013-04-08
      • 2012-09-13
      • 2017-12-23
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多