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

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

时间:2022-08-29 17:37:17浏览次数:67  
标签:info log 数据源 sqlserver mysql public springboot

定时同步数据,从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: sa password: 123 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/SjhCode/p/sqlserverToMysql.html

相关文章

  • MySQL4
    mysql5内链接   左连接1、先走内连接的逻辑2、再查询出左表所有的数据  select*fromgoodgleftjoinshopsong.id=s.good_id;  右链接  s......
  • linux环境搭建篇-安装mysql
    1.下载安装包方式一:手动下载并上传Linux下载mysql5.7的安装包,可以从官网下载https://downloads.mysql.com/archives/community  下载完成后将安装包上传到linux......
  • Mysql 导出文件csv 自动将字符串转化为了日期格式的处理
      在mysql自带的导出功能里将文件以csv的格式导出出现将字符串自动转化为了日期格式解决办法(并不推荐):读取每个String,在此字符串后面加入"\t",可以避免CSV的默认转换。副......
  • Mysql踩过的坑 索引失效 隐式类型转换
    ##博主所在项目,2期项目是mysql5.6版本,其使用的字符集是utf8在3期项目进行开发的时候,有一部分现成的表直接拷贝过来3期项目去使用3期项目mysql版本是8.0.20 默认约......
  • springboot---DI入门
                ......
  • mysql varchar 和 sqlserver varchar 的区别
    mysql4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字......
  • mysql数据库定期备份
    #!/bin/bashusername='xxxx'#数据库用户名passw='xxxxx'#密码date_ymd=`date+%Y_%m_%d`#年月日date_hms=`date+%H%M%S`#时分秒filedir='/root/data_backup/'#备份......
  • DataGrip连接Mysql报08S01解决方案
    以前正常使用的GataGrip,突然在某天报下面的错误提示:08S01[08S01]CommunicationslinkfailureThelastpacketsentsuccessfullytotheserverwas0milli......
  • Flink自定义MySQLSink批量写入出现死锁解决
    一、错误日志Cause:java.sql.SQLException:Lockwaittimeoutexceeded;tryrestartingtransaction;二、原因分析在同一批次、同一事务中操作相同主键的数据,......
  • MySQL--redo log
                ......