1. 程式人生 > >Spring Boot + MyBatis + Pagehelper 配置多資料來源

Spring Boot + MyBatis + Pagehelper 配置多資料來源

package top.cmnbgy.springbootibatismulidatasource.dataSource;

import com.alibaba.druid.pool.DruidDataSource;
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 javax.sql.DataSource; import java.io.IOException; /** * 主資料來源配置 * @ClassName MasterDataSource * @Cescription TODO * @Author .朱孝輝 * @Blog
http://www.cmnbgy.top * @Datae 2018/11/14 0014 13:45 **/ @Configuration // basePackages :設定為你的 mapper(主資料來源)介面路徑 @MapperScan(basePackages = "top.cmnbgy.springbootibatismulidatasource.mapper.master", sqlSessionTemplateRef = "master-SqlSessionTemplate") // ConfigurationProperties:讀取application檔案 @ConfigurationProperties(prefix = "spring.datasource.master") public class MasterDataSource { private String url; private String username; private String password; private String driverClassName; /* ....... 忽略其他配置引數*/ public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /** * 建立主資料來源 * @return */ @Bean(name = "master-DataSource") @Primary // @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource testDataSource() { /** * @Bean:建立bean元件,可設定bean的name,如果不寫name預設為方法名 * @Primary:設定為優先注入,如果Bean型別有多個,設定@Primary後會將該Bean優先注入,否則會報錯 * @ConfigurationProperties:讀取application.properties 屬性封裝成實體類 * * DataSourceBuilder.create().build() :SpringBoot為我們提供了簡便的建立資料來源方式 */ DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setDriverClassName(driverClassName); return dataSource; } /** * 建立SqlSession工廠 */ @Primary @Bean(name = "master-SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("master-DataSource") DataSource dataSource) throws Exception { /** * @Qualifier:正常情況下,注入bean時,如果存在多個資源,就會出錯,可以用@Qualifier指定名字 */ SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/*/*.xml")); return bean.getObject(); } /** * 事務管理 */ @Primary @Bean(name="master-TransactionManager") public DataSourceTransactionManager masterTransactionManager(@Qualifier("master-DataSource") DataSource dataSource){ DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource); return dataSourceTransactionManager; } /** * 配置sqlsession模板 */ @Primary @Bean("master-SqlSessionTemplate") public SqlSessionTemplate masterSQLSessionTemplate(@Qualifier("master-SqlSessionFactory") SqlSessionFactory sqlSessionFactory){ return new SqlSessionTemplate(sqlSessionFactory); } }