首先application.properties配置:
# 主数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://${mysql.ip}:3306/stu?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=${mysql.username}
spring.datasource.password=${mysql.password}
# 第二个数据源
spring.datasourceSecond.driver-class-name=com.mysql.jdbc.Driver
spring.datasourceSecond.url=jdbc:mysql://${mysql.ip}:3306/easydoc?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
spring.datasourceSecond.username=${mysql.username}
spring.datasourceSecond.password=${mysql.password}
- 禁掉springboot自带的DataSourceAutoConfiguration
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- 主数据源
package com.myapp.config;
import java.io.IOException;
import javax.sql.DataSource;
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.autoconfigure.jdbc.DataSourceBuilder;
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.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.Assert;
/**
* 主数据源,使用方式:
* <pre>
* 将spring boot自带的DataSourceAutoConfiguration禁掉
* @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
* </pre>
* @author tanghc
*/
@Configuration
@MapperScan(basePackages = { DbConfigMaster.basePackage }, sqlSessionFactoryRef = DbConfigMaster.sqlSessionFactoryName)
public class DbConfigMaster {
/* ********************只需要改这里的配置******************** */
static final String dbName = "master";
/** 配置文件前缀 */
public static final String prefix = "spring.datasource";
/** 存放mapper包路径 */
public static final String basePackage = "com.myapp.dao";
/** mybatis的config文件路径 */
public static final String mybatisConfigLocation = "classpath:mybatis/mybatisConfig.xml";
/** mybatis的mapper文件路径 */
public static final String mybatisMapperLocations = "classpath:mybatis/mapper/*.xml";
/* **************************************************** */
/** 数据源名称 */
public static final String dataSourceName = "dataSource" + dbName;
/** sqlSessionTemplate名称 */
public static final String sqlSessionTemplateName = "sqlSessionTemplate" + dbName;
/** sqlSessionFactory名称 */
public static final String sqlSessionFactoryName = "sqlSessionFactory" + dbName;
/** transactionManager名称 */
public static final String transactionManagerName = "transactionManager" + dbName;
/** transactionTemplate名称 */
public static final String transactionTemplateName = "transactionTemplate" + dbName;
@Bean(name = dataSourceName)
@Primary
@ConfigurationProperties(prefix = prefix) // application.properteis中对应属性的前缀
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = sqlSessionFactoryName)
public SqlSessionFactory sqlSessionFactory(@Autowired @Qualifier(dataSourceName) DataSource dataSource) throws Exception {
Assert.notNull(dataSource, "dataSource can not be null.");
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setConfigLocation(this.getResource(mybatisConfigLocation));
bean.setMapperLocations(this.getResources(mybatisMapperLocations));
return bean.getObject();
}
@Bean(name = sqlSessionTemplateName)
public SqlSessionTemplate sqlSessionTemplate(
@Autowired @Qualifier(sqlSessionFactoryName) SqlSessionFactory sessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sessionFactory); // 使用上面配置的Factory
return template;
}
@Bean(name = transactionManagerName)
public PlatformTransactionManager annotationDrivenTransactionManager(
@Autowired @Qualifier(dataSourceName) DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = transactionTemplateName)
public TransactionTemplate transactionTemplate(@Autowired @Qualifier(transactionManagerName)PlatformTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
private Resource[] getResources(String path) throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
return resolver.getResources(path);
}
private Resource getResource(String path) {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
return resolver.getResource(path);
}
}
这个文件不用做多大的修改,只需要修改上面的配置内容即可。
- 第二个数据源
package com.myapp.config;
import java.io.IOException;
import javax.sql.DataSource;
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.Assert;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
/**
* 第二个数据源,后续有第三个数据,复制这个文件,然后改下配置即可
* @author tanghc
*/
@Configuration
@MapperScan(basePackages = { DbConfigSecond.basePackage }, sqlSessionFactoryRef = DbConfigSecond.sqlSessionFactoryName)
public class DbConfigSecond {
/* ********************只需要改这里的配置******************** */
static final String dbName = "Second";
/** 配置文件前缀 */
public static final String prefix = "spring.datasourceSecond";
/** 存放mapper包路径 */
public static final String basePackage = "com.app2.dao";
/** mybatis的config文件路径 */
public static final String mybatisConfigLocation = "classpath:mybatis/mybatisConfig.xml";
/** mybatis的mapper文件路径 */
public static final String mybatisMapperLocations = "classpath:mybatis/mapper2/*.xml";
/* **************************************************** */
/** 数据源名称 */
public static final String dataSourceName = "dataSource" + dbName;
/** sqlSessionTemplate名称 */
public static final String sqlSessionTemplateName = "sqlSessionTemplate" + dbName;
/** sqlSessionFactory名称 */
public static final String sqlSessionFactoryName = "sqlSessionFactory" + dbName;
/** transactionManager名称 */
public static final String transactionManagerName = "transactionManager" + dbName;
/** transactionTemplate名称 */
public static final String transactionTemplateName = "transactionTemplate" + dbName;
@Bean(name = dataSourceName)
@ConfigurationProperties(prefix = prefix) // application.properteis中对应属性的前缀
public DataSource dataSourceMater() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = sqlSessionFactoryName)
public SqlSessionFactory sqlSessionFactory(@Autowired @Qualifier(dataSourceName) DataSource dataSource) throws Exception {
Assert.notNull(dataSource, "dataSource can not be null.");
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setConfigLocation(this.getResource(mybatisConfigLocation));
bean.setMapperLocations(this.getResources(mybatisMapperLocations));
return bean.getObject();
}
@Bean(name = sqlSessionTemplateName)
public SqlSessionTemplate sqlSessionTemplate(
@Autowired @Qualifier(sqlSessionFactoryName) SqlSessionFactory sessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sessionFactory); // 使用上面配置的Factory
return template;
}
@Bean(name = transactionManagerName)
public PlatformTransactionManager annotationDrivenTransactionManager(
@Autowired @Qualifier(dataSourceName) DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = transactionTemplateName)
public TransactionTemplate transactionTemplate(@Autowired @Qualifier(transactionManagerName)PlatformTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
private Resource[] getResources(String path) throws IOException {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
return resolver.getResources(path);
}
private Resource getResource(String path) {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
return resolver.getResource(path);
}
}
第二个数据源,后续有第三个数据,复制这个文件,然后改下配置即可