当前位置: 首页 > news >正文

spring boot定时器实现定时同步数据

 

 

文章目录

目录

文章目录

前言

一、依赖和目录结构

二、使用步骤

2.1 两个数据源的不同引用配置

2.2 对应的mapper

2.3 定时任务处理 

 

总结


 

 


前言

 

 


 

一、依赖和目录结构

a29536f313ba44f1bf57792481344295.jpeg

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.3.12.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency></dependencies>

配置文件

server:port: 8089spring:datasource:remote :driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://192.168.31.2/student?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTCusername: rootpassword: 111local :driver-class-name: com.mysql.jdbc.Driverjdbc-url: jdbc:mysql://192.168.31.1/student?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTCusername: rootpassword: 111mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志

 

 

二、使用步骤

2.1 两个数据源的不同引用配置

package com.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.annotation.Resource;
import javax.sql.DataSource;/**** @date :Created in 2023/12/2 19:51* @description:本地数据源* @modified By:* @version:*/
@Configuration
@MapperScan(basePackages = "com.local.Mapper", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MybatisLocalConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.local")public DataSource dataSource1() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();factoryBean.setDataSource(dataSource);// 设置mapper.xml文件的位置factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:localmapper/*.xml"));return factoryBean.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}}
@Configuration
@MapperScan(basePackages = "com.remote.Mapper", sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MybatisRemoteConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.remote")public DataSource dataSource2() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();factoryBean.setDataSource(dataSource);// 设置mapper.xml文件的位置factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper2/*.xml"));return factoryBean.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

2.2 对应的mapper

public interface CourseOneMapper extends BaseMapper<Course> {
}
public interface CourseTwoMapper extends BaseMapper<Course> {/*** 批量插入* @param list*/@Insert("<script> " +"INSERT INTO tbl_course (name, teacher) VALUES " +"<foreach collection='list' item='item' separator=','> " +"(#{item.name}, #{item.teacher})" +"</foreach> " +"</script>")void batchInsert(@Param("list") List<Course> list);
}

 

@TableName("tbl_course")
public class Course {@TableId(type = IdType.AUTO)private Integer id;private String name;private String teacher;public Course() {}public Course(Integer id, String name, String teacher) {this.id = id;this.name = name;this.teacher = teacher;}/*** 获取* @return id*/public Integer getId() {return id;}/*** 设置* @param id*/public void setId(Integer id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return teacher*/public String getTeacher() {return teacher;}/*** 设置* @param teacher*/public void setTeacher(String teacher) {this.teacher = teacher;}@Overridepublic String toString() {return "Course{id = " + id + ", name = " + name + ", teacher = " + teacher + "}";}
}

2.3 定时任务处理 

@EnableScheduling //开启定时
@Component
public class MySchedule {@Resourceprivate CourseOneMapper courseOneMapper;@Resourceprivate CourseTwoMapper courseTwoMapper;/*** 每隔10秒执行一次*/@Scheduled(fixedDelay = 1000000)public void test(){//查询到要同步的数据List<Course> coursesOne = courseOneMapper.selectList(null);//批量插入courseTwoMapper.batchInsert(coursesOne);}}

 

 

 


总结

在Java中,@Scheduled注解是用于指定定时任务的执行规则的。它可以应用于方法或者类上面。

如果应用于方法上,该方法将被视为一个定时任务,并按照指定的时间规则进行调度执行。

如果应用于类上,该类中所有带有@Scheduled注解的方法都会被视为定时任务。

@Scheduled注解的参数可以用来指定任务的执行规则,包括以下几个方面:

fixedDelay:指定任务开始执行之后的延迟时间(毫秒数),任务执行完成后,再经过指定的延迟时间再次执行。例如:@Scheduled(fixedDelay = 5000)表示任务开始执行后,等待5秒后再次执行。

fixedRate:指定任务开始执行之后的间隔时间(毫秒数),任务执行完成后,立即开始下一次执行。例如:@Scheduled(fixedRate = 5000)表示任务开始执行后,每隔5秒执行一次。

initialDelay:指定任务首次执行的延迟时间(毫秒数)。例如:@Scheduled(initialDelay = 5000)表示任务首次执行延迟5秒。

cron:使用Cron表达式指定复杂的任务执行规则。Cron表达式由6个部分组成,分别表示秒、分钟、小时、日期、月份和星期几。例如:@Scheduled(cron = "0 0 12 * * ?")表示每天中午12点执行任务。

除了以上参数,@Scheduled注解还支持fixedDelayString、fixedRateString和zone等属性,可以使用字符串形式的时间间隔和指定时区。

需要注意的是,@Scheduled注解需要与@EnableScheduling注解一起使用,以启用定时任务的功能。

 

 

 

http://www.lryc.cn/news/256397.html

相关文章:

  • 第一百九十六回 通过蓝牙发送数据的细节
  • 26.Python 网络爬虫
  • Spring Boot 在启动之前还做了哪些准备工作?
  • SQL语句常用语法(开发场景中)
  • HarmonyOS应用开发者认证:开启全新的智能设备开发之旅
  • Python 模板引擎 Jinja2 的安装和使用
  • 案例063:基于微信小程序的传染病防控宣传系统
  • 53. Protocol buffer 的Go使用
  • 如何访问内部网络做内网穿透
  • git常用命令总结
  • Apollo新版本Beta技术沙龙
  • 数据结构第二次作业——递归、树、图【考点罗列//错题正解//题目解析】
  • Redis--12--Redis分布式锁的实现
  • MongoDB简介与安装
  • Avaya Aura Device Services 任意文件上传漏洞复现
  • C#注册表技术及操作
  • js/jQuery常见操作 之各种语法例子(包括jQuery中常见的与索引相关的选择器)
  • C语言数组(下)
  • pytorch学习5-最大池化层的使用
  • 在python中安装库,会有conda安装,也会有pip安装,conda与pip的区别是什么?
  • 算法-贪心思想
  • STL源码剖析笔记——适配器(adapters)
  • Mysql、Oracle区分大小写?
  • Java多线程并发(二)
  • 树莓派外接上显示器以后一直黑屏无画面显示
  • 使用Ansible lineinfile模块进行行级别操作
  • curl 18 HTTP/2 stream
  • 5G+AI开花结果,助力智慧安检落地
  • Swift 如何实现自定义 Tab Bar
  • mysql 语言学习