1.修改application.properties數據源配置java
##########多數據源########### spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.test1.username=root spring.datasource.test1.password=root spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.test2.username=root spring.datasource.test2.password=root spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
2.設置項目啓動,加載多數據源配置mysql
多數據源有2中。spring
一:經過不一樣的註解使用多數據源sql
二:設置不一樣的路徑,使用不一樣數據源(使用的第二種)apache
package com.example.demo.config; 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.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.example.demo.mapper.test1") public class Data1SourceConfig { @Bean(name = "test1DataSource") @ConfigurationProperties(prefix = "spring.datasource.test1") @Primary //建立一個DataSource public DataSource testDataSource(){ return DataSourceBuilder.create().build(); } /** * Qualifier 根據名稱注入DataSource對象 * @param dataSource * @return * @throws Exception */ @Bean(name = "test1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception{ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/test1/*.xml")); //開啓駝峯轉化 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase(true); sqlSessionFactoryBean.setConfiguration(configuration); return sqlSessionFactoryBean.getObject(); } @Bean("test1DataSourceTransactionManager") @Primary public DataSourceTransactionManager TestDataSourceTransactionManager(@Qualifier("test1DataSource") DataSource dataSource ){ DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource); return dataSourceTransactionManager; } @Bean("test1TestSqlSessionTemplate") @Primary public SqlSessionTemplate TestSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){ return new SqlSessionTemplate(sqlSessionFactory); } }
首先建立 DataSource,而後建立 SqlSessionFactory 再建立事務,最後包裝到 SqlSessionTemplate 中。其中須要指定分庫的 mapper 文件地址,以及分庫dao層代碼session
@MapperScan(basePackages = "com.example.demo.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
這塊的註解就是指明瞭掃描 dao 層,而且給 dao 層注入指定的 SqlSessionTemplate。全部@Bean
都須要按照命名指定正確。mybatis
這裏須要注意的就是,多數據源,須要在各自的數據源裏面,從新配置駝峯,已經處理,參考上面代碼app
啓動,測試,成功測試