Projects to use multiple data sources so learning a little, himself read many articles and finally succeeded, where the main part of the recording for later review (pom-dependent files are not posted).
A. Profile application.yml which add a data source
note shrink and into the spaces must be careful
II. Dao two databases mapper layer and the layer to be placed in their respective designated folder which facilitates data source
III. Create Entity each type of data source configured for injecting into the spring
A data source entity classes: 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);
}
}
对数据源实体类注解的一点解释说明