spring定时器的使用

掌握Spring定时器:深入讲解TimerTask的使用方法 定时任务是程序中一种常见的功能,它能够在指定的时间间隔或者基于特定触发条件执行预设的操作。在Java领域,定时任务通常通过类、服务或者Spring框架的定时器组件来实现。通过这些机制,开发者可以安排代码定时运行,从而满足各种周期性数据处理、任务调度等业务需求。@Scheduled注解是Spring框架提供的一个便捷工具,用于在Spring应用中安排执行周期性的任务。它基于Java的,但提供了更加简单和声明式的编程方式。在Spring中,可以使用<bean> 阅读详情

首先是需要配置:

applicationContext-quartz-cron-local.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"
    default-lazy-init="true">

    <description>Quartz的本地Cron式执行任务配置</description>

    <!-- Quartz本地Schduler -->
    <bean id="localQuartzScheduler"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- <property name="exposeSchedulerInRepository" value="true" /> -->
        <!-- Triggers集成 -->
        <property name="triggers">
            <list>
            <!--以下首次按顺序执行,再往后就不一定了 -->
                <ref bean="elongHotelInfoListSynchronizerCronTrigger" />

                <ref bean="elongHotelInfoXmlSynchronizerCronTrigger" />

                <ref bean="eLongHotelAllSynchronizerCronTrigger" />

                <ref bean="elongHotelCreditcardsSynchronizerCronTrigger" />

                <ref bean="elongHotelBrandSynchronizerCronTrigger" />

            </list>
        </property>
        <!-- Quartz配置, 本地运行无需单独的quartz.properties文件,在此简单配置即可 -->
        <property name="quartzProperties">
            <props>
                <prop key="org.quartz.threadPool.threadCount">16</prop>
            </props>
        </property>
        <!-- 启动时延期2秒开始任务 -->
        <property name="startupDelay" value="2" />
    </bean>


    <!--elong hotel-room-image-detail-review-rank-facility sync start-->
    <bean id="eLongHotelAllSynchronizerCronTrigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="eLongHotelAllSynchronizerCronJobDetail" />
        <property name="cronExpression" value="0 */15 * * * ?"  /><!-- 15分扫描一次 -->
    </bean>

    <bean id="eLongHotelAllSynchronizerCronJobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!--对应的任务类-->
        <property name="targetObject" ref="ELongHotelAllSynchronizer" />
        <!--对应任务类的方法-->
        <property name="targetMethod" value="executeByQuartzLocalJob" />
        <property name="concurrent" value="false" />
    </bean>
    <!--elong hotel-room-image-detail-review-rank-facility sync end-->

    <!--elong hotel list sync start-->
    <bean id="elongHotelInfoListSynchronizerCronTrigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="elongHotelInfoListSynchronizerCronJobDetail" />
        <property name="cronExpression" value="0 */3 * * * ?" /><!-- 每3分钟触发 -->
    </bean>

    <bean id="elongHotelInfoListSynchronizerCronJobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="elongHotelInfoListSynchronizer" />
        <property name="targetMethod" value="executeByQuartzLocalJob" />
        <property name="concurrent" value="false" />
    </bean>
    <!--elong hotel list sync end-->


</beans>

对应的任务类和方法

@Component
public class ELongHotelAllSynchronizer {
    public void executeByQuartzLocalJob()  {
        int syncIndex = 0;
        int currentPage = 0;
        int pageSize = 20;
        Collection<Future<?>> futures = new LinkedList<>();//用意是得有返回值才能结束一个线程,不然可能不执行或者线程被终止

        Page<HotelElongSyncProgress4PageListDTO> hotelsPagesShouldUpdateToDB = getHotelsShouldUpdateToDB(currentPage,pageSize );//从数据库中取20条一页的数据,多线程跑
        while ( currentPage <= hotelsPagesShouldUpdateToDB.getTotalPage()   ) {
            List<HotelElongSyncProgress4PageListDTO> hotelDTOsShouldUpdateToDB = hotelsPagesShouldUpdateToDB.getContents();
            for (HotelElongSyncProgress4PageListDTO dto : hotelDTOsShouldUpdateToDB) {

                ElongHotelSyncThread task = new ElongHotelSyncThread(syncIndex++, singleHotel, hotelElongInfoService, available);
                futures.add(executorService.submit(task));

            }

            for (Future<?> future : futures) {
                    future.get();
            }
            currentPage++;
            hotelsPagesShouldUpdateToDB = getHotelsShouldUpdateToDB( currentPage,pageSize );
        }
    }
}

关于定时任务的时间规则:

单纯针对时间的设置规则
org.springframework.scheduling.quartz.CronTriggerBean允许你更精确地控制任务的运行时间,只需要设置其cronExpression属性。
一个cronExpression表达式有至少6个(也可能是7个)由空格分隔的时间元素。从左至右,这些元素的定义如下:
1.秒(0–59)
2.分钟(0–59)
3.小时(0–23)
4.月份中的日期(1–31)
5.月份(1–12或JAN–DEC)
6.星期中的日期(1–7或SUN–SAT)
7.年份(1970–2099)
0 0 10,14,16 * * ?
每天上午10点,下午2点和下午4点
0 0,15,30,45 * 1-10 * ?
每月前10天每隔15分钟
30 0 0 1 1 ? 2012
在2012年1月1日午夜过30秒时
0 0 8-5 ? * MON-FRI
每个工作日的工作时间
各个时间可用值如下:
秒0-59 , - * /
分0-59 , - * /
小时0-23 , - * /
日1-31 , - * ? / L W C
月1-12 or JAN-DEC , - * /
周几1-7 or SUN-SAT , - * ? / L C #
年(可选字段) empty, 1970-2099 , - * /
可用值详细分析如下:
“*”——字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
“?”——字符可以用在“日”和“周几”字段.它用来指定'不明确的值'.这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。在后面的例子中可以看到其含义。
“-”——字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点"。
“,”——字符指定数个值。比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday"。
“/”——字符用来指定一个值的的增加幅度.比如在“秒”字段中设置为"0/15"表示"第0, 15, 30,和45秒"。而"5/15"则表示"第5, 20, 35,和50".在'/'前加"*"字符相当于指定从0秒开始.每个字段都有一系列可以开始或结束的数值。对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23,对于“日”字段来说为0到31,而对于“月”字段来说为1到12。"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。
“L”——字符可用在“日”和“周几”这两个字段。它是"last"的缩写,但是在这两个字段中有不同的含义。例如,“日”字段中的"L"表示"一个月中的最后一天" ——对于一月就是31号对于二月来说就是28号(非闰年)。而在“周几”字段中,它简单的表示"7" or "SAT",但是如果在“周几”字段中使用时跟在某个数字之后,它表示"该月最后一个星期×" ——比如"6L"表示"该月最后一个周五"。当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。
“W”——可用于“日”字段。用来指定历给定日期最近的工作日(周一到周五)。比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。因此如果15号为周六,触发器会在14号即周五调用。如果15号为周日,触发器会在16号也就是周一触发。如果15号为周二,那么当天就会触发。然而如果你将“日”字段设为"1W",而一号又是周六,触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。
“L”和“W”可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。
“#”——字符可用于“周几”字段。该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。再比如: "2#1" =表示该月第一个周一而"4#5" =该月第五个周三。注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。
“C”——字符可用于“日”和“周几”字段,它是"calendar"的缩写。它表示为基于相关的日历所计算出的值(如果有的话)。如果没有关联的日历,那它等同于包含全部日历。“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。
对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。
一些例子:
"0 0 12 * * ?"每天中午十二点触发
"0 15 10 ? * *"每天早上10:15触发
"0 15 10 * * ?"每天早上10:15触发
"0 15 10 * * ? *"每天早上10:15触发
"0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?"每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?"每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?"每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?"每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED"三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI"每个周一、周二、周三、周四、周五的10:15触发
"0 15 10 15 * ?"每月15号的10:15触发
"0 15 10 L * ?"每月的最后一天的10:15触发
"0 15 10 ? * 6L"每月最后一个周五的10:15



注:本部分转自http://ilovejavaforever.iteye.com/blog/623988
Cartographer纯定位实战:从仿真到真机部署的避坑指南 本文详细介绍了将Cartographer算法应用于机器人纯定位模式的完整实战流程。通过对比传统AMCL方案的不足,阐述了Cartographer基于子图匹配实现高精度、高鲁棒性定位的优势。内容涵盖从仿真环境测试到真机部署的核心步骤,包括关键配置文件修改、源码调整以及参数调优,旨在帮助开发者避开常见陷阱,成功实现稳定可靠的机器人定位系统。 阅读详情

相关推荐

手把手教你用PlantVillage数据集搭建农作物病害识别模型(Python实战)

本文详细介绍了如何使用PlantVillage数据集和Python构建农作物病害识别模型。从环境准备、数据获取到模型构建、训练与评估,手把手教你实现一个实用的农业AI应用。特别针对PlantVillage数据集的特点,提供了处理类别不平衡、图像预处理和模型优化的实战技巧,帮助开发者快速掌握农作物病害识别技术。

weixin_29184371的博客 479

Spring第38篇:定时器详解(@Scheduled & @EnableScheduling)

Spring中@Scheduled & @EnableScheduling这2个注解,可以用来快速开发定时器,使用特别的简单。 如何使用? 用法 1、需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则,稍后详细介绍。 2、Spring容器中使用@EnableScheduling开启定时任务的执行,此时spring容器才可以识别@Scheduled标注的方法,然后自动定时执行。 案例 db中有很多需要推送的任务,然后将其检索出来,推送到手机端,来个定时器..

chenzoff的专栏 6702

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3642

Spring内置定时器的使用

spring定时器

路漫漫其修远兮 吾将上下而求索 1237

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

【理解机器学习算法】之岭回归Ridge - L2 Rgularization

本人就职海外从事人工智能领域开发设计。 希望花时间总结下流行的机器学习算法,希望大家一起学习,欢迎指正!

Hyman Qiu 2317

SpringBoot - 四种常见定时器

常见实现方案 @Scheduled注解实现定时器 Timer().schedule实现定时器 线程实现定时器

m0_65228708的博客 6409

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

Spring系列第38篇:@Scheduled & @EnableScheduling定时器详解

运行输出,每秒会输出一次,如下:模拟推送消息,1595840822998模拟推送消息,1595840823998模拟推送消息,1595840824998模拟推送消息,1595840825998模拟推送消息,1595840826998模拟推送消息,1595840827998模拟推送消息,1595840828998@Scheduled配置定时规则@Scheduled可以用来配置定时器的执行规则,非常强大,@Scheduled中主要有8个参数,我们一一来了解一下。

1428

数仓项目6.0(一)

数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、update以及delete操作)的实时流式同步工具。DataX的使用,用户只需根据数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

qq_58551342的博客 2848

ADI官方例程HDL和No-OS生成Vivado工程

这一步是选择下载源,一般都是选择国内镜像,因为国外的源太慢了,这里选择阿里的镜像,如果没有这个选项可以在下面的User URL里添加就行,选择好源后然后点击下一步。下一步会从你选择的源上下载软件包目录,如果提示Unable to get setup from https://xxxxxx/,返回上一步,选择别的源,例如第二个163网易的源。然后就是你想要安装在哪了,下面的选项好像会决定环境变量存放在哪,不过一般都是个人电脑选择第一个默认的就行,然后点下一步。下好之后双击打开,就是这个界面了,直接点下一步。

代码匠的博客 3832

Spring定时器的使用

Spring定时器的具体实现

二十多岁想退休 2002

手把手拆解固态电池成本:2030年真能比液态电池便宜30%吗?

本文深度解析固态电池成本结构,探讨2030年实现比液态电池便宜30%的可行性路径。通过拆解正极材料、负极材料和固态电解质的成本演变,分析关键技术对降本的影响,并预测产业链协同效应下的成本优化趋势。文章指出,在材料创新、设备国产化和政策支持等多重因素推动下,固态电池有望在2030年实现显著降本目标。

kite3的博客 404

Java怎么使用spring定时器_浅析spring定时器的使用

原生的Java定时器使用Java.util包下的定时器也很简单,具体代码如下://设置定时器开始时间Date time = sdf.parse("2020-10-01 16:40:00");//设置定时器Timer timer = new Timer();//第三个参数表示每隔多久循环一次timer.schedule(new TimerTask() {@Overridepublic void ru...

weixin_33073525的博客 163

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

spring中定时器的使用

在很多实际的web应用中,都有需要定时实现的服务,如每天12点推送个新闻,每隔一个小时提醒用户休息一下眼睛,隔一段时间检测用户是否离线等等。 spring框架提供了对定时器的支持,通过配置文件就可以很好的实现定时器,只需要应用启动,就自动启动定时器。下面介绍一下具体做法。 第一种,使用XML配置的方法 前期工作,配置spring的开发环境(这里用到了spring的web应用包,需要导入)

Java知音 3596

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java怎么使用spring定时器_Spring---定时器的使用

原生的Java定时器使用Java.util包下的定时器也很简单,具体代码如下://设置定时器开始时间Date time = sdf.parse("2020-10-01 16:40:00");//设置定时器Timer timer = new Timer();//第三个参数表示每隔多久循环一次timer.schedule(new TimerTask() {@Overridepublic void ru...

weixin_32046225的博客 194

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

springboot使用spring定时器

在spring中使用定时器比较简单。首先在配置文件中加入@EnableScheduling,就能够使用注解驱动定时任务的机制,然后可以用过注解@Scheduled去配置如何定时。 目录 1.启动类配置(一启动就会开始执行周期任务) 2.定时任务 1.启动类配置(一启动就会开始执行周期任务) package com.lin.scheduledemo; import org....

Satisfy_555的博客 394

java spring定时器_Spring定时器的使用

定时执行任务,这是项目中常用的东西,今天我们来做一个使用Spring定时器进行任务定制的小例子,仅供学习!首先要增加相应的JAR。因为这是一个小例子,使用的JAR包不是很多,用到了spring.jar,quartz-all-1.6.5.jar,quartz-1.5.2.jar,commons-logging.jar,log4j-1.2.14.jar!不用关心版本,从你下载到的Spring中找即可。...

weixin_32676541的博客 186

Spring定时器的简单使用

花了有一段时间“研究”spring的定时器了。由于网上的大多数方法并不是我想找到的(spring定时器有多种实现方法),所以一直没有摸索出来,今天终于搞定了(其实巨简单): 例子用的是springMVC的框架(其实根本用不着)。搭好基本的spring架子后,添加一个你想定时运行的java类: Java代码 收藏代码 package com.july; public class Sp

刘鹏的技术宅 1248

spring Task定时器使用

springtask定时器的使用,本例使用的是注解的方式进行开发的。 首先在项目XML的配置文件进行相关配置: xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springfram...

PT_HFUU的博客 241

Spring Boot 定时器使用教程

创建一个普通的 Java 类,并使用@Component@Component// 定时任务方法将在这里定义Spring Boot 的定时任务功能简单易用,通过和@Scheduled注解可以轻松实现各种定时任务需求。根据业务场景选择合适的调度方式(Cron 表达式、固定速率或固定延迟),并注意多线程配置和异常处理,可以构建出稳定可靠的定时任务系统。

Rysxt_的博客 876

spring自带定时器使用示例

前段时间,应项目需求写了一个定时器,参考如下: 首先,需要在spring.xml文件中引入任务调度器,并且定时器接口要写在启动会扫描的文件下,此处扫描文件目录为com.gcx..service..; 其次,我们来写定时器接口: @Scheduled是spring自带的定时器使用注解,(cron = “0 0 /1 * ?”)括号中是cron定时表达...

qq_28710139的博客 2055

spring 定时器的使用

在spring的applicationContext.xml 中配置定时器 需要的jar包:quartz.jar 1 <!--配置定时器 --> 2 <bean id="capture" class="com.gsst.bookingplatform.basic.utils.Capture"> 3 4 ...

diaodan4808的博客 88

Spring 定时器的使用(task)

Spring 定时器的使用 具体过程如下 1.配置spring xml文件 applicationContext.xml 红线位置 创建job 转载于:https://www.cnblogs.com/missingLBJ/p/9605705.html

weixin_30615767的博客 95
上一篇: java中线程的基本使用(刚好我需要的是主线程不能等子线程)
下一篇: java web手工搭建--基本骨架
bbbbln
博客等级 码龄11年 14粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值