pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
application.properties
logging.level.com.example.springbootchapter7.mapper1=debug
logging.level.com.example.springbootchapter7.mapper2=debug
spring.datasource.druid.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.druid.master.username=root
spring.datasource.druid.master.password=root
spring.datasource.druid.cluster.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.cluster.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.druid.cluster.username=root
spring.datasource.druid.cluster.password=root
# 是否启用StatViewServlet(监控页面)
spring.datasource.druid.stat-view-servlet.enabled=true
# 登录监控页面用户名
spring.datasource.druid.stat-view-servlet.login-username=123456
# 登录监控页面密码
spring.datasource.druid.stat-view-servlet.login-password=123456
# 是否启用StatFilter
spring.datasource.druid.web-stat-filter.enabled=true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.master.filters=stat,wall
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.master.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.druid.master.useGlobalDataSourceStat=true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.cluster.filters=stat,wall
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.cluster.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.druid.cluster.useGlobalDataSourceStat=true
配置类
@Configuration
@MapperScan(basePackages = "com.example.springbootchapter7.mapper1",sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MasterDataSourceConfig {
/**
* 创建数据源
*@return DataSource
*/
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.master")
@Primary
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
/**
* 创建工厂
*@param dataSource
*@throws Exception
*@return SqlSessionFactory
*/
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mapper1/*.xml"));
return bean.getObject();
}
/**
* 创建事务
*@param dataSource
*@return DataSourceTransactionManager
*/
@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterDataSourceTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 创建模板
*@param sqlSessionFactory
*@return SqlSessionTemplate
*/
@Bean(name = "masterSqlSessionTemplate")
@Primary
public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Configuration
@MapperScan(basePackages = "com.example.springbootchapter7.mapper2",sqlSessionTemplateRef = "clusterSqlSessionTemplate")
public class ClusterDataSourceConfig {
/**
* 创建数据源
*@return DataSource
*/
@Bean(name = "clusterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.cluster")
public DataSource masterDataSource() {
return DruidDataSourceBuilder.create().build();
}
/**
* 创建工厂
*@param dataSource
*@throws Exception
*@return SqlSessionFactory
*/
@Bean(name = "clusterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mapper2/*.xml"));
return bean.getObject();
}
/**
* 创建事务
*@param dataSource
*@return DataSourceTransactionManager
*/
@Bean(name = "clusterTransactionManager")
public DataSourceTransactionManager masterDataSourceTransactionManager(@Qualifier("clusterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/**
* 创建模板
*@param sqlSessionFactory
*@return SqlSessionTemplate
*/
@Bean(name = "clusterSqlSessionTemplate")
public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("clusterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
测试
编写两个简单dao和xml文件进行测试。
代码地址:https://github.com/923226145/SpringBoot-learning/tree/master/springboot-chapter7