最近在一个需要中需要去连接其他的项目的数据库,本来想使用jbdc直接链接下的,反正就是获取数据,但是想想还是算了,正好springboot数据源配置还没有玩过,那么就正好趁这次机会学习并使用下
至于pom文件需要的依赖自然不必多说。直接从yml文件说起
1 1 spring: 2 2 datasource: 3 3 druid: 4 4 master: 5 5 driver-class-name: com.mysql.cj.jdbc.Driver 6 6 url: jdbc:mysql://xxxx:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false 7 7 username: root 8 8 password: 111111 9 9 slave: 1010 url: jdbc:mysql://yyyy:3306/test?useUnicode=true&characherEncoding=utf-8&useSSL=false 1111 username: root 1212 password: 111111 1313 driver-class-name: com.mysql.cj.jdbc.Driver 1414 db-type: com.alibaba.druid.pool.DruidDataSource 1515 initial-size: 50 1616 min-idle: 50 1717 max-active: 100 1818 max-wait: 60000 1919 time-between-eviction-runs-millis: 60000
注意其中加粗的部分:
master表示主数据源,slave表示从数据源。公共的部分可以直接写在druid节点下面。下面需要注意的时候针对不同的数据源需要有不同的配置文件
主数据源的配置类
1 1 package com.test; 2 2 3 3 import com.alibaba.druid.pool.DruidDataSource; 4 4 import org.apache.ibatis.session.SqlSessionFactory; 5 5 import org.mybatis.spring.SqlSessionFactoryBean; 6 6 import org.mybatis.spring.annotation.MapperScan; 7 7 import org.springframework.beans.factory.annotation.Autowired; 8 8 import org.springframework.beans.factory.annotation.Value; 9 9 import org.springframework.context.annotation.Bean; 1010 import org.springframework.context.annotation.Configuration; 1111 import org.springframework.context.annotation.Primary; 1212 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 1313 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 1414 1515 import javax.sql.DataSource; 1616 1717 @Configuration 1818 // 扫描 Mapper 接口并容器管理 1919 @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory") 2020 public class MasterDataSourceConfig { 2121 2222 //mapper接口文件存放的目录 精确到 master 目录,以便跟其他数据源隔离 2323 static final String PACKAGE = "com.test.mapper.master"; 2424 static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; 2525 2626 @Value("${spring.datasource.druid.master.url}") 2727 private String url; 2828 2929 @Value("${spring.datasource.druid.master.username}") 3030 private String user; 3131 3232 @Value("${spring.datasource.druid.master.password}") 3333 private String password; 3434 3535 @Value("${spring.datasource.druid.master.driver-class-name}") 3636 private String driverClass; 3737 3838 /** 3939 * 默认数据源 4040 * @return 4141 */ 4243 @Bean 4344 @Primary 4445 public DataSource masterDataSource() { 4546 DruidDataSource dataSource = new DruidDataSource(); 4647 dataSource.setDriverClassName(driverClass); 4748 dataSource.setUrl(url); 4849 dataSource.setUsername(user); 4950 dataSource.setPassword(password); 5051 return dataSource; 5152 } 5253 5354 //@Bean(name = "masterTransactionManager") 5455 @Bean 5556 @Primary 5657 public DataSourceTransactionManager masterTransactionManager() { 5758 return new DataSourceTransactionManager(masterDataSource()); 5859 } 5960 6061 6162 @Bean 6263 @Primary 6364 public SqlSessionFactory masterSqlSessionFactory(@Autowired DataSource masterDataSource) 6465 throws Exception { 6566 final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 6667 sessionFactory.setDataSource(masterDataSource); 6768 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() 6869 .getResources(MasterDataSourceConfig.MAPPER_LOCATION)); 6970 return sessionFactory.getObject(); 7071 } 7172 }
从数据源的配置类
1 1 package com.test; 2 2 3 3 import com.alibaba.druid.pool.DruidDataSource; 4 4 import org.apache.ibatis.session.SqlSessionFactory; 5 5 import org.mybatis.spring.SqlSessionFactoryBean; 6 6 import org.mybatis.spring.annotation.MapperScan; 7 7 import org.springframework.beans.factory.annotation.Autowired; 8 8 import org.springframework.beans.factory.annotation.Value; 9 9 import org.springframework.context.annotation.Bean; 1010 import org.springframework.context.annotation.Configuration; 1111 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 1212 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 1313 1414 import javax.sql.DataSource; 1515 1616 1717 @Configuration 1818 // 扫描 Mapper 接口并容器管理 1919 @MapperScan(basePackages = SlaveDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "slaveSqlSessionFactory") 2020 public class SlaveDataSourceConfig { 2121 2222 //mapper接口文件的存放目录 精确到 slave目录,以便跟其他数据源隔离 2323 static final String PACKAGE = "com.test.mapper.slave"; 2424 static final String MAPPER_LOCATION = "classpath:mapper/slave/*.xml"; 2525 2626 @Value("${spring.datasource.druid.slave.url}") 2727 private String url; 2828 2929 @Value("${spring.datasource.druid.slave.username}") 3030 private String user; 3131 3232 @Value("${spring.datasource.druid.slave.password}") 3333 private String password; 3434 3535 @Value("${spring.datasource.druid.slave.driver-class-name}") 3636 private String driverClass; 3737 3838 3939 @Bean 4040 public DataSource slaveDataSource() { 4141 DruidDataSource dataSource = new DruidDataSource(); 4242 dataSource.setDriverClassName(driverClass); 4343 dataSource.setUrl(url); 4444 dataSource.setUsername(user); 4545 dataSource.setPassword(password); 4646 return dataSource; 4747 } 4848 4949 5050 @Bean 5151 public DataSourceTransactionManager slaveTransactionManager() { 5252 return new DataSourceTransactionManager(slaveDataSource()); 5353 } 5454 5555 5656 @Bean 5757 public SqlSessionFactory slaveSqlSessionFactory(@Autowired DataSource slaveDataSource) 5858 throws Exception { 5959 final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 6060 sessionFactory.setDataSource(slaveDataSource); 6161 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() 6262 .getResources(SlaveDataSourceConfig.MAPPER_LOCATION)); 6363 return sessionFactory.getObject(); 6464 } 6565 }
总结:上面的配置类的位置是随便放的,方式MappSacan的位置需要注意,数据源扫描哪个mapper目录。那么该mapper目录就默认使用当前是数据源