gpt4 book ai didi

java - 如何每周、每月和每六个月运行一项特定任务?

转载 作者:太空宇宙 更新时间:2023-11-04 06:34:36 24 4
gpt4 key购买 nike

我正在用 Java 制作一个 cron 作业。我想每周、每月、三个月、六个月和九个月运行一项特定任务。

public Interface interfaceA {
public String abc() throws Exception;
}

public class TestTaskA implements interfaceA {

@Override
public String abc() throws Exception {
// some code
}
}

我是这样运行的 -

TestTaskA testTaskA = new TestTaskA();
testTaskA.abc();

我想每周、每月、每三个月、每六个月、每九个月运行 TestTaskA,并且我不想在晚上 8 点到凌晨 5 点之间运行任务。任意一天也可以。

现在,如果我每周运行 TestTaskA,那么它应该打印出 one-weekreport_week,如果它每月运行,那么它应该打印出 one-monthreport_one_month。三个月、六个月和九个月也是如此。

执行此操作的最佳方法是什么?请记住,我可能还有 TestTaskB 和 TestTaskC,我应该每周、每月、三个月、六个月和九个月运行它们。

我可以使用 ScheduledExecutorService 来实现此目的吗?任何简单的例子都会对我有很大帮助。

最佳答案

Quartz 调度程序有一个非常灵活的框架来运行 cron 作业。

下面的示例利用 Spring。

第一个 bean 初始化 CRON 触发器。第二个 bean 正在设置 CRON 调度程序,最后第三个 bean 指定将执行哪个 bean 中的哪个方法。

更多信息是@ http://quartz-scheduler.org/

     <!-- Scheduling  processing via Quartz  -->
<!-- Step 1. Basically here, you define the list of Triggers,
here you will define in the list tag
the weekly,monthly, 3 month etc trigger beans -->

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>



<!-- Step 2. You define the Trigger. For example this will actually run once every month -->
<!-- Here you also define what job will be triggered. This trigger will invoke the monthlyJobDetail bean -->

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="monthlyJobDetail" />
<!-- run every 2 mins from 9:00 to 17 -->
<property name="cronExpression" value="0 0 12 1 1/1 ? *"/>
</bean>



<!-- Step 3. Define what method in the what bean will be invoked. Here the job defines that targetBean.targetMethod will be invoked.
<bean id="monthlyJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetBean" />
<property name="targetMethod" value="targetMethod" />
<property name="concurrent" value="false" />
</bean>

<!-- Bean that contains buisiness code -->
<bean id="targetBean" class="com.example.targetBean"/>

关于java - 如何每周、每月和每六个月运行一项特定任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com