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
启动,测试,成功测试