SpringBoot使用mybatis-plus配置多个数据源,实现项目中从两个不同的数据库读取数据
1、添加依赖包
- <properties>
- <java.version>1.8</java.version>
- <mybatis.version>2.1.2</mybatis.version>
- <mybatis.plugin.version>3.4.3</mybatis.plugin.version>
- <pagehelper.version>1.2.13</pagehelper.version>
- </properties>
复制代码- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>${mybatis.version}</version>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>${mybatis.plugin.version}</version>
- </dependency>
- <dependency>
- <groupId>com.github.pagehelper</groupId>
- <artifactId>pagehelper-spring-boot-starter</artifactId>
- <version>${pagehelper.version}</version>
- </dependency>
复制代码 2、禁止SpringBoot自动配置数据源在启动类注解上添加exclude参数 - @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- public class DemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
- }
复制代码 3、配置文件application.yml添加数据库信息
- spring:
- datasource:
- db1:
- type: com.zaxxer.hikari.HikariDataSource
- driverClassName: com.mysql.cj.jdbc.Driver
- jdbcUrl: jdbc:mysql://172.16.253.52:3306/aaa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
- username: root
- password: root
- db2:
- type: com.zaxxer.hikari.HikariDataSource
- driverClassName: com.mysql.cj.jdbc.Driver
- jdbcUrl: jdbc:mysql://172.16.253.55:3306/bbb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=true&serverTimezone=GMT%2B8
- username: root
- password: root
复制代码 4、代码中配置db1和db2的数据源新建类DataSourceConfig1 配置MapperLocation路径和MapperScan扫描路径 - @Slf4j
- @Configuration
- @MapperScan(basePackages = "com.demo.mapper.db1.**", sqlSessionFactoryRef = "sqlSessionFactoryDB1")
- public class DataSourceConfig1 {
-
- @Primary
- @Bean(name = "dataSourceDB1")
- @ConfigurationProperties(prefix = "spring.datasource.db1")
- public DataSource dataSource() {
- return DataSourceBuilder.create().type(HikariDataSource.class)
- .build();
- }
- @Bean(name = "sqlSessionFactoryDB1")
- public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceDB1") DataSource dataSource) throws Exception {
- MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
- sessionFactoryBean.setDataSource(dataSource);
- sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
- .getResources("classpath*:mapper/db1/*.xml"));
- log.info("------dataSource db12 配置成功");
- return sessionFactoryBean.getObject();
- }
- @Bean(name = "sqlSessionTemplateDB1")
- public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("sqlSessionFactoryDB1") SqlSessionFactory sqlSessionFactory) {
- return new SqlSessionTemplate(sqlSessionFactory);
- }
- @Bean(name = "txManagerDB1")
- public PlatformTransactionManager txManager(@Qualifier("dataSourceDB1") DataSource dataSource) {
- return new DataSourceTransactionManager(dataSource);
- }
- }
复制代码新建类DataSourceConfig2 - @Slf4j
- @Configuration
- @MapperScan(basePackages = "com.demo.mapper.db2.**", sqlSessionFactoryRef = "sqlSessionFactoryDB2")
- public class DataSourceConfig2 {
-
- @Primary
- @Bean(name = "dataSourceDB2")
- @ConfigurationProperties(prefix = "spring.datasource.db2")
- public DataSource dataSource() {
- return DataSourceBuilder.create().type(HikariDataSource.class)
- .build();
- }
- @Bean(name = "sqlSessionFactoryDB2")
- public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceDB2") DataSource dataSource) throws Exception {
- MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
- sessionFactoryBean.setDataSource(dataSource);
- sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
- .getResources("classpath*:mapper/db2/*.xml"));
- log.info("------dataSource db2 配置成功");
- return sessionFactoryBean.getObject();
- }
- @Bean(name = "sqlSessionTemplateDB2")
- public SqlSessionTemplate sqlSessionFactoryTemplate(@Qualifier("sqlSessionFactoryDB2") SqlSessionFactory sqlSessionFactory) {
- return new SqlSessionTemplate(sqlSessionFactory);
- }
- @Bean(name = "txManagerDB2")
- public PlatformTransactionManager txManager(@Qualifier("dataSourceDB2") DataSource dataSource) {
- return new DataSourceTransactionManager(dataSource);
- }
- }
复制代码至此配置完成
|