一:更改application.yml
spring:
datasource:
one:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
jdbc-url: jdbc:mysql://localhost:3306/business?useSSL=true&userUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
two:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
jdbc-url: jdbc:mysql://localhost:3306/test?useSSL=true&userUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
需要注意:
连接多个数据库时,url要更改为jdbc-url,否则会报错。
报错内容:
java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName
二:添加两个配置类
(1)DataSourceOneConfig
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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 tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.business.mapper.basemapper", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSourceOneConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
@Primary
public DataSource db1DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
List<Resource> resourceList = new ArrayList<>();
Resource[] v1 = new PathMatchingResourcePatternResolver().getResources("classpath:com/xxx/mapper/one/v1/*.xml");
Resource[] v2 = new PathMatchingResourcePatternResolver().getResources("classpath:com/xx/mapper/one/v2/*.xml");
resourceList.addAll(Arrays.asList(v1));
resourceList.addAll(Arrays.asList(v2));
bean.setMapperLocations(resourceList.toArray(new Resource[0]));
bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return bean.getObject();
}
@Bean
@Primary
public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
@Primary
public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
(2)DataSourceTwoConfig
package com.example.business.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import tk.mybatis.spring.annotation.MapperScan;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.business.mapper.test", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class DataSourceTwoConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
List<Resource> resourceList = new ArrayList<>();
Resource[] v1 = new PathMatchingResourcePatternResolver().getResources("classpath:com/xxx/mapper/two/v1/*.xml");
Resource[] v2 = new PathMatchingResourcePatternResolver().getResources("classpath:com/xx/mapper/two/v2/*.xml");
resourceList.addAll(Arrays.asList(v1));
resourceList.addAll(Arrays.asList(v2));
bean.setMapperLocations(resourceList.toArray(new Resource[0]));
bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return bean.getObject();
}
@Bean
public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
如果启动类添加了@MapperScan,需要去掉。
如果用mybatis相关扩展请使用
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();