文章目录
目录
文章目录
前言
一、依赖和目录结构
二、使用步骤
2.1 两个数据源的不同引用配置
2.2 对应的mapper
2.3 定时任务处理
总结
前言
一、依赖和目录结构
<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);}}