spring-quartz实现周末节假日排除的定时任务配置

一、前言

最新开发基金数据相关的需求,理财的同学知道对基金的开盘收盘是每天9:15-15:30之间,如果遇到某些数据只需要在开盘期间基金更新,那么我们需要设置定时
任务运行时间为每天9:15-15:30之间,经过学习quartz,发现我们常用使用的SimperTriggerCronTrgger这两种触发器都无法满足这种需求的表达.经过不停查找相关资料,
终于发现Calender插件是可以实现的,下面看下具体配置

二、quartz配置

首先申明一下quartz maven版号,因为不同版本下的calender配置有可能是不一同的:

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.2</version>
</dependency>

quartz calender配置:

<!--需要运行的定时任务-->
<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="testTask"/>
    <property name="targetMethod" value="testProcess"/>
    <property name="concurrent" value="false"/>
</bean>

<!--定义上午执行的触发器-->
<bean id="cronTriggerAM" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="testJob"/>
    <!-- 每隔30秒钟(30000毫秒)执行一次 -->
    <property name="cronExpression" value="0/30 * * * * ?" />
    <!--定义一个dailyCalendarAM-->
    <property name="calendarName" value="dailyCalendarAM"/>
    <property name="priority" value="99"/>
</bean>


<!--定义下午执行的触发器-->
<bean id="cronTriggerPM" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="currentNavJob"/>
    <!-- 每隔30秒钟(30000毫秒)执行一次 -->
    <property name="cronExpression" value="0/30 * * * * ?" />
    <property name="calendarName"  value="dailyCalendarPM"/>
    <property name="priority" value="99"/>
</bean>

<!-- 排除周六和周日的日历。这是quartz已经实现的日历类,直接引用,如果有更复杂的操作可以自定义日历类-->
<bean id="weeklyCalendar" class="org.quartz.impl.calendar.WeeklyCalendar" />

<bean id="dailyCalendarAM" class="org.quartz.impl.calendar.DailyCalendar">
    <constructor-arg ref="weeklyCalendar" />
    <!--配置这个calendar周一到周五,9:25-11:31之间 执行-->
    <constructor-arg value="09:25" type="java.lang.String" />
    <constructor-arg value="11:31" type="java.lang.String" />
    <!-- include hours between start and end -->
    <property name="invertTimeRange" value="true" />
</bean>
<bean id="dailyCalendarPM" class="org.quartz.impl.calendar.DailyCalendar">
    <constructor-arg ref="weeklyCalendar" />
    <constructor-arg value="13:00" type="java.lang.String" />
    <constructor-arg value="15:01" type="java.lang.String" />
    <!-- include hours between start and end -->
    <property name="invertTimeRange" value="true" />
</bean>

<!-- 上午和下午交易时间监控任务调度配置。 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTriggerAM"/>
            <ref bean="cronTriggerPM"/>
        </list>
    </property>
    <!-- 定义calendars属性,刚开如没有写这部分,一直报找不到 相关dailyCalendar-->
    <property name="calendars">
        <map>
            <entry key="dailyCalendarAM" value-ref="dailyCalendarAM"></entry>
            <entry key="dailyCalendarPM" value-ref="dailyCalendarPM"></entry>
        </map>
    </property>

</bean>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值