如果你想定时的去执行某个方法,跟着这个操作测试一下,你就会了。

有3种定时方法可以做数据同步。

第一种:

jdk提供的定时器工具Timer

1.单线程

2.可以指定延迟(开始执行的时间)、周期时间

3.可以调度指定的的需要执行的任务

/***  Timer也可以指定具体时间执行*  String time = "2019-07-02 12:00:00"; *  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); *  Date delay = sdf.parse(time);//执行时间*  timer.scheduleAtFixedRate(执行任务, delay, 周期);*/
public void Ds01()  {// 需要定时执行的任务TimerTask task = new TimerTask() {public void run() {System.out.println("-----定时测试-----");}};// Timer定时器工具Timer timer = new Timer();// 延迟(首次执行的时间)long delay = 0;// 间隔周期(/毫秒数)long intevalPeriod = 5 * 1000;// 立即执行,并且每5秒执行一次timer.scheduleAtFixedRate(task, delay, intevalPeriod);
}

第二种:最理想的定时器

1.通过线程池的方式来执行任务

2.可以设定时间颗粒度
        TimeUnit.DAYS //天        TimeUnit.HOURS  //小时        TimeUnit.MINUTES //分钟  
        TimeUnit.SECONDS //秒        TimeUnit.MILLISECONDS //毫秒        TimeUnit.NANOSECONDS //毫微秒                            TimeUnit.MICROSECONDS //微秒

/*** ses.scheduleAtFixedRate(执行任务, 延迟(首次执行的时间), 周期, 延迟/周期的单位);*/
public void Ds02() {// 需要定时执行的任务Runnable runnable = new Runnable() {public void run() {System.out.println("-----定时器-----");}};ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();//立即执行,并且每5秒执行一次ses.scheduleAtFixedRate(runnable, 0, 5000, TimeUnit.MILLISECONDS);
}

第三种:SpringBoot项目中的定时器 (SpringBoot中的任务调度)

1.方便,快速

1在主启动类添加注解:@EnableScheduling //允许自动调用

@SpringBootApplication
@EnableScheduling //允许自动调用
public class ManageApplication {public static void main(String[] args) {SpringApplication.run(ManageApplication.class, args);}
}

2在需要使用任务调度的类上面加注解 @Component,使该类被Spring管理

import org.springframework.stereotype.Component;@Component
public class Ds {//方法1 {...}//方法2 {...}//....
}

3.任务调度的方法上面加注解 @Scheduled

1) cron属性:时间表达式

2) fixedRate属性:上一个调用开始后再次调用的延时(再次调用时不需要等上一个调用执行完成)

3) fixedDelay属性:上一个调用完成后再次调用的延时(再次调用时需要等上一个调用执行完成)

4) initialDelay属性:第一次调用时的延迟时间

属性   含义
fixedRate = 1000   每秒执行一次,单位毫秒
"0 0 10,14,16 * * ?"  每天10点、14点、16点 触发
"0 0/30 9-17 * * ?"   朝九晚五工作时间内每半小时触发
"0 0 12 ? * WED"  表示每个星期三中午12点触发
"0 0 12 * * ?"    每天中午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期间的每1分钟触发
"0 0/5 14 * * ?"  在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?"   在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?"  在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED"  每年三月的星期三的下午2:10和2: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触发
"0 15 10 ? * 6L 2002-2005"    2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class Ds {//每10秒执行一次该方法@Scheduled(fixedRate = 1000)public void test() {System.out.println("------每10秒执行一次该方法------");}//每天12点执行一次该方法@Scheduled("0 0 12 * * ?")public void test2() {System.out.println("------每天12点执行一次该方法------");}}

通常情况下,任务调度需要配合异步功能,所以类只需要再添加一个注解@EnableAsync

import org.springframework.stereotype.Component;
import org.springframework.scheduling.annotation.EnableAsync;@Component
@EnableAsync  // 异步的注解
public class Ds {//每10秒执行一次该方法@Scheduled(fixedRate = 10000)public void test() {System.out.println("------每10秒执行一次该方法------");}//每天12点执行一次该方法@Scheduled("0 0 12 * * ?")public void test2() {System.out.println("------每天12点执行一次该方法------");}}

SpringBoot注解 番外篇

在这里,我重点解释下这个注解方式

如果直接把@EnableScheduling注解写到启动类中,这样的话就会很死板

所以得想个办法

不在启动类中加注解,而是通过配置文件 能人为控制定时任务的开启或关闭

进入@EnableScheduling,看到引入的 SchedulingConfiguration.class ,进去后不难发现,该类注入了ScheduledAnnotationBeanPostProcessor

知道了上面这些,所以现在我们需要做的就是通过配置来控制定时任务

手动编写一个配置类来控制(不需要方法),如下:

import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.scheduling.annotation.SchedulingConfiguration;@Configuration
@ConditionalOnExpression(value = "${task.scheduling}")
@Import(SchedulingConfiguration.class)
public class TaskEnableSchedulingConfig {}

application.yml 添加个配置,通过true|false来控制 TaskEnableSchedulingConfig 这个类

# 定时任务开启状态
task:scheduling: true

这样,就能通过application.yml配置文件来控制是否要开启定时任务了。

Java代码三种方式实现定时执行某个方法相关推荐

  1. Mybaits plus 数据库映射java实体三种方式

    前言 数据库一般是用下划线进行设计字段,Java实体一般用驼峰法设计属性.这是不成文的规定.当数据库字段映射java实体会出现问题.下面分别是数据库字段和实体属性. 解决问题三种方式 1.利用mysq ...

  2. 如何在SpringWEB项目或者Springboot启动时直接执行业务代码(三种方式)

    我的博客原文链接 前言 通常的我们的项目开发中,经常会遇到那种在服务一启动就需要自动执行一些业务代码的情况.比如将数据库中的配置信息或者数据字典之类的缓存到redis,或者在服务启动的时候将一些配置化 ...

  3. apt java8_Ubuntu 18.04安装Java JDK8三种方式

    Java JDK在linux系统有两个版本,一个开源版本Openjdk,还有一个oracle官方版本jdk,oracle JDK既可以通过添加ppa源命令行安装,也可以去官网下载jdk压缩包安装.下面 ...

  4. windows,ubuntu,代码三种方式制作Android开机动画 bootanimation.zip

    一.bootanimation.zip结构 bootanimation.zip解压的目录结构,我的例子使用5张账片,总之是由(part文件夹+desc.txt) part文件夹里面存放图片,如下 de ...

  5. java获取系统时间的几种方法_Java篇—获取当前系统时间的三种方式(超详细+多方法)...

    1.通过util包中的Date类来获取当前时间 方法1详细代码: public class Exercise17 { public static void main(String[] args){ D ...

  6. idea注释代码三种方式

    1.单行注释(ctrl+/ ) 光标处于当前需要写注释的这一行,在这行任何位置都可以,可以调整的,ctrl+/ 即可实现单行注释,如图,当想取消时,也可以使用ctrl+/取消行注释: 2.多行注释(c ...

  7. C#中实现多态的三种方式:抽象类,虚方法,接口

    Interface(接口):是一种规则,要求继承类必需实现所有声明的成员,方法是公开的. Virtual方法(虚方法):可以在继承类里 Override覆盖重新的方方法,有自己的方法体.派生类可使用, ...

  8. perl mysql dml_MySQL Connector执行SQL语句的三种方式

    描述 当我们需要在Java程序中与数据库进行交互,可能首先想到的是使用某个ORM框架,因为ORM框架封装了一些实现细节,在使用上非常方便,并且一定程度上可以提升代码稳定性. 在ORM框架中,都会依赖M ...

  9. ajax上传多文件和数据,Ajax上传数据和上传文件(三种方式)

    Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) Title .btn { background-color: co ...

最新文章

  1. 2021-10-27 我与地坛
  2. 解决达梦数据库新增大字段报错问题
  3. 给你一天时间,如何理清AI圈儿现状?
  4. pta简单实现x的n次方_PTA-2017实验2.4 函数
  5. 清除应用程序所有缓存
  6. Codechef July Challenge 2018 : Subway Ride
  7. 狡猾无比的超级网络间谍
  8. CEMAPI实战攻略(四)——发送短消息
  9. php中等3秒再跳转,跳转和重定向
  10. [渝粤教育] 中国地质大学 嵌入式操作系统 复习题 (2)
  11. PIR 宣布被营利性机构收购,.org 顶级域名注册费用或上涨
  12. python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
  13. MBR磁盘分区见解笔记
  14. 模拟人生4极乐净土mod_如何在《模拟人生4》中下载Mod
  15. iOS小技能:常用预处理指令(移除程序中的identifier、发布模式关闭NSLog、导出和隐藏符号)
  16. 手机在泰国显示无服务器,怎么连接泰国服务器
  17. mc服务器称号显示插件,[聊天]UDtitle ——称号管理(仓库) 1.1.6 [全版本]
  18. C++中compare函数的使用
  19. 【机器学习】监督学习,非监督学习,半监督学习三者的定义区别及举例分析
  20. GIS标准分幅工具——制作图幅接合表

热门文章

  1. 华为手机nfs是什么意思_如何配置NFS?
  2. mysql两张表联查更新语句_sql联合查询语句(两张表)
  3. 分析java进程假死
  4. 【绝对干货】javaagent破解
  5. mysql导入500g_【案例】Oracle数据库500G~3T大小迁移 详细方法步骤
  6. 简易文件夹打包程序的设计与实现
  7. Set接口之HashSet、使用增强型的for遍历Set
  8. 罗克韦尔(AB)PLC远程维护连接不上网关怎么办?
  9. Java引用类型参数传递(绝对看得懂)
  10. c/c++如何保留两位小数输出