首页 > 数据库 >springboot定时同步数据,从sqlserver到mysql

springboot定时同步数据,从sqlserver到mysql

时间:2023-04-21 19:47:10浏览次数:54  
标签:info log 数据源 sqlserver mysql public springboot

https://www.cnblogs.com/SjhCode/p/sqlserverToMysql.html 定时同步数据,从sqlserver到mysql   注意事项: 一.primary: master #设置默认的数据源或者数据源组,默认值即为master 二.@Scheduled() 和 @DS("slave_1")注解   步骤: 1.在原先运行的程序外,新建多加一个springboot程序   2.配置好yml,连接两个数据库,全局配置一个开始时间(主从数据源) 复制代码

dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://ip:端口/库名?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置 slave_1: url: jdbc:sqlserver://ip:端口;DatabaseName=ykt username: root password: root driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
time: 2020-01-01 00:00:00
复制代码   3.写好两个实体类,一个sqlserver的表,一个mysql的表   4.写好转移的逻辑业务(HelloService中) 复制代码
@Service
@Slf4j
public class HelloService {
    @Autowired
    private DataMapper dataMapper;

    @Autowired
    private ParkRecordMapper parkRecordMapper;

    @Value("${time}")
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date starTime;
    
    public void saveData() throws ParseException {
//以下为具体业务,根据自己需求修改 log.info("进入数据转存定时任务"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date endTime = new Date(); List<ComeCar> comeCars = dataMapper.selectByTime(starTime,endTime); if (comeCars!=null && comeCars.isEmpty()){ return; } for (int i = 0; i < comeCars.size(); i++) { ComeCar comeCar = comeCars.get(i); log.info("正在转存数据"); ParkRecord parkRecord = new ParkRecord(); parkRecord.setCreateDate(formatter.parse(comeCar.getComeDate())); parkRecord.setPhoto(comeCar.getComePic()); log.info("单条数据为"+parkRecord); parkRecordMapper.insert(parkRecord); } starTime = endTime; log.info("刷新数据成功"); } }
复制代码

 

5.创建一个定时器(SchedulingTask)

复制代码
@Component
@Async
@Slf4j
public class SchedulingTask {

    private final long TEN_MINUTES = 600000;

    @Autowired
    HelloService helloService;

    /**
     * 每10分钟刷新一下数据
     */
    @Scheduled(fixedRate = TEN_MINUTES)
    public void refreshData() {
        try {
            helloService.saveData();
            log.info("定时任务开启,每10分钟刷新一下数据");
        } catch (ParseException e) {
            log.error("刷新数据失败,sql Server数据库有可能挂了");
            e.printStackTrace();
        }
    }
}
复制代码

 

6.HelloController

复制代码
@RestController
public class HelloController {
    @Autowired
    HelloService helloService;

    @GetMapping("hello")
    public String hello() throws ParseException {
        helloService.saveData();
        return "hello";
    }
}
复制代码

 

7.运行测试没问题,修改模拟数据库地址,maven导出jar包,再到云服务器上运行就可以了!

 

8.具体业务其中一个mapper(sqlserver表)

复制代码
@Mapper
public interface DataMapper {
@DS("slave_1") List<ComeCar> selectByTime(@Param("star_time") Date starTime,@Param("end_time")Date endTime); }
复制代码

标签:info,log,数据源,sqlserver,mysql,public,springboot
From: https://www.cnblogs.com/chuangsi/p/17341530.html

相关文章

  • mysql-json类型字段多值并查
    mysql8.0.17版本支持json索引.官方文档:https://dev.mysql.com/doc/refman/8.0/en/json.html规则版本是否支持5.7.8版本:支持json类型字段8.0.17版本:支持json类型字段多列索引环境是否支持当前环境中使用的是gorm负责mysql的交互。支持原生sql操作,所以go......
  • mysql8主从节点搭建
    设置主从前先创建作为同步数据的用户,可直接在Navicat中创建并对需同步的库授权。注意创建用户的密码插件plugin要保持一致,MySQL8.0设为mysql_native_password,此项可在Navicat直接设置。以192.168.1.1从和192.168.1.2主1、在主节点修改配置文件/etc/my.cnf添加 server......
  • 关于 mysql 加了 limit 反而变慢的问题?
    SELECT*FROMpre_forum_postWHEREtid=6584344AND`inv`='0'AND`uid`='6547981'ORDERBYdatelineDESClimit4;上面一条正常执行需要16-20秒.SELECT*FROMpre_forum_postWHEREtid=6584344AND`inv`='0'AND`uid`='6547981'O......
  • SpringBoot邮箱注册
    首先在pom.xml导入依赖<!--springboot邮件mail--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.7.2</v......
  • MYSQL事件
    --创建MYSQL事件DELIMITER$CREATEEVENTIFNOTEXISTSevent_deldataONSCHEDULEEVERY1MINUTESTARTS'2023-04-2100:00:00'ONCOMPLETIONPRESERVECOMMENT'测试'DOBEGIN--Droptabledroptableifexiststmp_czc;--......
  • MySQL:分页
    SELECT*FROMst_typeLIMIT5前几条数据 SELECT*FROMst_typeLIMIT1,2第几条数据后的多少条数据  第几页 一页多少条 查询第1条到第10条的数据的sql是:select*fromtablelimit0,10;  ->对应我们的需求就是查询第一页的数据:select*fromtablelimit(1-1)*1......
  • 开心档之MySQL ALTER命令
    MySQLALTER命令当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQLALTER命令。开始本章教程前让我们先创建一张表,表名为:testalter_tbl。root@host#mysql-uroot-ppassword;Enterpassword:*******mysql>useRUNOOB;Databasechangedmysql>createtable......
  • 开心档之MySQL 管理
    MySQL管理启动及关闭MySQL服务器Windows系统下在Windows系统下,打开命令窗口(cmd),进入MySQL安装目录的bin目录。启动:cdc:/mysql/binmysqld--console关闭:cdc:/mysql/binmysqladmin-urootshutdownLinux系统下首先,我们需要通过以下命令来检查MySQL服务......
  • mySql获取表结构语句
    获取完整表结构:其中,where语句table_name字段的值替换为你的表名,table_schema字段的值替换为你的数据库名。select*frominformation_schema.`COLUMNS`wheretable_name='records'andtable_schema='zc_archives' 获取表结构关键信息:selectordinal_position序号,colum......
  • MySQL Shell 使用报错 SyntaxError: Unexpected identifier
    文章目录一、问题报错二、解决办法一、问题报错MySQLShell8.0.23Copyright(c)2016,2021,Oracleand/oritsaffiliates.OracleisaregisteredtrademarkofOracleCorporationand/oritsaffiliates.Othernamesmaybetrademarksoftheirrespectiveowners.T......