项目要用到多数据源所以学习了一下,自己看了很多文章最后终于成功,这里记录主要部分以便以后查阅(pom依赖文件不贴了).
一.配置文件application.yml里面添加数据源
注意缩进和空格一定要仔细
二.两个数据库的dao层和mapper层要放在自己的文件夹里面便于指定各自的数据源
三.创建各自数据源配置的实体类用来注入到spring
数据源一的实体类:DefaultDataSourceConfig.java
package com.cic.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
import java.sql.SQLException;
/**
@author GW
*/
@Configuration
@MapperScan(value = {"com.cic.common.mapper.foundationmapper."}, sqlSessionFactoryRef = "sqlSessionFactory1")
public class DefaultDataSourceConfig {@Value("${spring.datasource.foundation.driver-class-name}")
private String driverClass;
@Value("${spring.datasource.foundation.url}")
private String url;
@Value("${spring.datasource.foundation.username}")
private String username;
@Value("${spring.datasource.foundation.password}")
private String password;
@Value("${spring.datasource.tomcat.initial-size}")
private int initialSize;
@Value("${spring.datasource.tomcat.min-idle}")
private int minIdle;
@Value("${spring.datasource.tomcat.max-active}")
private int maxActive;
@Value("${spring.datasource.tomcat.max-wait}")
private int maxWait;@Bean(name = "dataSource")
@Primary
public DataSource dataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setUrl(url);
druidDataSource.setFilters("stat,wall");
druidDataSource.setInitialSize(initialSize);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setMaxActive(maxActive);
druidDataSource.setMaxWait(maxWait);
druidDataSource.setUseGlobalDataSourceStat(true);
druidDataSource.setDriverClassName(driverClass);
return druidDataSource;
}@Bean
@Primary
public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/foundation/.xml"));
return bean.getObject();
}@Bean
@Primary
public DataSourceTransactionManager dataSourceTransactionManager1(@Qualifier("dataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}@Bean
@Primary
public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
数据源二实体类:UserResourceDataSourceConfig.java
package com.cic.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.Data;
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.beans.factory.annotation.Value;
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.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.SQLException;
/**
@author GW
*/
@Data
@Configuration
@MapperScan(basePackages = {"com.cic.common.mapper.usermapper."}, sqlSessionFactoryRef = "sqlSessionFactory2")
public class UserResourceDataSourceConfig {@Value("${spring.datasource.user.driver-class-name}")
private String driverClass;
@Value("${spring.datasource.user.url}")
private String url;
@Value("${spring.datasource.user.username}")
private String username;
@Value("${spring.datasource.user.password}")
private String password;
@Value("${spring.datasource.tomcat.initial-size}")
private int initialSize;
@Value("${spring.datasource.tomcat.min-idle}")
private int minIdle;
@Value("${spring.datasource.tomcat.max-active}")
private int maxActive;
@Value("${spring.datasource.tomcat.max-wait}")
private int maxWait;@Bean(name = "userDataSource")
public DataSource userDataSource() throws SQLException {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setUrl(url);
druidDataSource.setFilters("stat,wall");
druidDataSource.setInitialSize(initialSize);
druidDataSource.setMinIdle(minIdle);
druidDataSource.setMaxActive(maxActive);
druidDataSource.setMaxWait(maxWait);
druidDataSource.setUseGlobalDataSourceStat(true);
druidDataSource.setDriverClassName(driverClass);
return druidDataSource;
}@Bean
public SqlSessionFactory sqlSessionFactory2(@Qualifier("userDataSource") DataSource userDataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(userDataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/usermapper/.xml"));
return bean.getObject();
}@Bean
public DataSourceTransactionManager dataSourceTransactionManager2(@Qualifier("userDataSource") DataSource userDataSource){
return new DataSourceTransactionManager(userDataSource);
}@Bean
public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
对数据源实体类注解的一点解释说明