方法一:使用注解的方式,在pom文件中加入依赖
com.alibaba druid-spring-boot-starter1.1.18 com.baomidou dynamic-datasource-spring-boot-starter3.2.1 mysql mysql-connector-javacom.baomidou mybatis-plus-boot-starter3.4.0
在application.yml文件中配置数据源
spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源. datasource: master: #配置主库 url: jdbc:mysql://ip:3306/database?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver slave_1: #配置从库 url: jdbc:mysql://ip:3306/database?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver slave_2: #配置从库 url: jdbc:mysql://ip:3306/database?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath:mappers/*.xml configuration: map-underscore-to-camel-case: true #开启驼峰映射 #打印SQL信息 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
创建测试相关的文件,目录如下
使用 @DS("slave_1") 完成数据库的指定,可以在实现方法上,也可以在dao上使用
在实现方法上,则该方法内的数据库访问都会是指定的数据库
import com.baomidou.dynamic.datasource.annotation.DS; import com.example.demo.dao.TestDao; import com.example.demo.service.TestService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class TestServiceImp implements TestService { @Autowired private TestDao testDao; @Override public String queryById() { String s = testDao.queryById(); return s; } @Override @DS("slave_1") public String queryById2() { String s = testDao.queryById2(); return s; } @Override public String queryById3() { String s = testDao.queryById3(); return s; } }
在dao上使用,只有用该方法,才会到指定数据库
import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.ibatis.annotations.Select; public interface TestDao { String queryById(); String queryById2(); @DS("slave_2") String queryById3(); }
方法二:yml文件定义两个数据源,然后创建两个config文件扫描不同的路径
import com.alibaba.druid.pool.DruidDataSource; 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.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.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.dao2", sqlSessionTemplateRef = "secondarySqlSessionTemplate") public class DataSources2Config { @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.db2") public DataSource testDataSource() { return new DruidDataSource(); } @Bean(name = "secondarySqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //添加 驼峰命名法 映射 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase(true); bean.setConfiguration(configuration); return bean.getObject(); } @Bean(name = "secondaryTransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "secondarySqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } } package com.intehel.common.config.datasource; import com.alibaba.druid.pool.DruidDataSource; import com.github.pagehelper.PageInterceptor; import org.apache.ibatis.plugin.Interceptor; 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.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; import java.util.Properties; @Configuration @MapperScan(basePackages = "com.dao", sqlSessionTemplateRef = "primarySqlSessionTemplate") public class DataSources1Config { @Bean(name = "primaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.db1") @Primary public DataSource testDataSource() { return new DruidDataSource(); } @Bean(name = "primarySqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //添加 驼峰命名法 映射 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase(true); bean.setConfiguration(configuration); //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mappers/*.xml")); Interceptor interceptor = new PageInterceptor(); Properties properties = new Properties(); //数据库 properties.setProperty("helperDialect", "mysql"); //是否将参数offset作为PageNum使用 properties.setProperty("offsetAsPageNum", "true"); //是否进行count查询 properties.setProperty("rowBoundsWithCount", "true"); //是否分页合理化 properties.setProperty("reasonable", "false"); interceptor.setProperties(properties); return bean.getObject(); } @Bean(name = "primaryTransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "primarySqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)