application.properties
#mysql
[email protected]@
spring.datasource.primary.username= @db.primarUsername@
spring.datasource.primary.password= @db.primaryPassword@
spring.datasource.primary.driverClassName= @db.primaryDriverClassName@
#sqlserver
[email protected]@
[email protected]@
[email protected]@
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;
}
}