application.properties
#mysql
spring.datasource.primary.jdbc-url=@db.primaryUrl@
spring.datasource.primary.username= @db.primarUsername@
spring.datasource.primary.password= @db.primaryPassword@
spring.datasource.primary.driverClassName= @db.primaryDriverClassName@
#sqlserver
spring.datasource.secondary.jdbc-url=@db.secondUrl@
spring.datasource.secondary.username=@db.secondUsername@
spring.datasource.secondary.password=@db.secondPassword@
spring.datasource.secondary.driverClassName=@db.secondDriverClassName@
第一个数据源的配置
package com.eyee.distribution.config;
import com.zaxxer.hikari.HikariDataSource;
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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* mysql数据源
*auth
*/
@Configuration
@MapperScan(basePackages = {"com.eyee.distribution.mapper.mysql"},sqlSessionFactoryRef ="primarySqlSessionFactory",sqlSessionTemplateRef ="primarySqlSessionTemplate")
public class PrimaryDataSourceConfig {
/**
* 读取peropertie注入第一个数据源,注意这里如果不设置primary会报错
* @return
*/
@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource CreatePrimaryDataSource() {
//指定使用hikari连接池
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
/**
* 将第一个数据源注入工厂
* @param dataSource
* @return
* @throws Exception
*/
@Bean(name="primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory( @Qualifier("primaryDataSource")DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
//设置数据源
sqlSessionFactoryBean.setDataSource(dataSource);
//扫描xml的路径地址
// sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mybatis/mysql/*Mapper.xml"));
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("pageHelper.xml"));//分页
return sqlSessionFactoryBean.getObject();
}
/**
* 配置事务管理器
*/
@Bean
public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource")DataSource dataSource) throws Exception {
return new DataSourceTransactionManager(dataSource);
}
/**
* 查询使用的模板类注意这里一定要独立分开各自的模板类
* @param sqlSessionFactory
* @return
* @throws Exception
*/
@Bean("primarySqlSessionTemplate")
public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
return template;
}
}
第二个数据源
package com.eyee.distribution.config;
import com.zaxxer.hikari.HikariDataSource;
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.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* sqlserver数据源
*/
@Configuration
@MapperScan(basePackages = {"com.eyee.distribution.mapper.sqlserver"},sqlSessionFactoryRef ="secondarySqlSessionFactory",sqlSessionTemplateRef ="secondarySqlSessionTemplate" )
public class SencondarDatasourceConfig {
@Primary
@Bean(name = "scondaryDataSource")
@Qualifier("scondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource CreateSecondaryDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Primary
@Bean(name="secondarySqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("scondaryDataSource")DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*/mybatis/sqlserver/*"));
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("pageHelper.xml"));
return sqlSessionFactoryBean.getObject();
}
/**
* 配置事务管理器
*/
@Primary
@Bean
public DataSourceTransactionManager transactionManager(@Qualifier("scondaryDataSource")DataSource dataSource) throws Exception {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean("secondarySqlSessionTemplate")
public SqlSessionTemplate secondarySqlSessionTemplate(@Qualifier("secondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
return template;
}
}