首先在application.yml文件中配置两个数据库连接
spring:
datasource:
mysql1:
jdbc-url:
username:
password:
driver-class-name: com.mysql.cj.jdbc.Driver
maxActive: 100
mysql2:
jdbc-url:
username:
password:
driver-class-name: com.mysql.cj.jdbc.Driver
maxActive: 100
创建两个java类初始化数据源
package com.test.datasource.mysql;
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.beans.factory.annotation.Value;
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;
import java.util.Objects;
@Configuration
@MapperScan(basePackages = "com.test.mapper.mysql1", sqlSessionFactoryRef = "mysql1SqlSessionFactory")
public class MybatisConfig1 {
@Primary
@Bean("mysql1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql1")
public DataSource mysql1DataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean("mysql1SqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("mysql1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql1/**/*.xml"));
Objects.requireNonNull(sqlSessionFactoryBean.getObject()).getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
@Primary
@Bean("mysql1TransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("mysql1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean("mysql1SqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("mysql1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package com.test.datasource.mysql;
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.beans.factory.annotation.Value;
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;
import java.util.Objects;
@Configuration
@MapperScan(basePackages = "com.test.mapper.mysql2", sqlSessionFactoryRef = "mysql2SqlSessionFactory")
public class MybatisConfig1 {
@Primary
@Bean("mysql2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql2")
public DataSource mysql2DataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean("mysql2SqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("mysql2DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/mysql2/**/*.xml"));
Objects.requireNonNull(sqlSessionFactoryBean.getObject()).getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
@Primary
@Bean("mysql2TransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("mysql2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean("mysql2SqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("mysql2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
需要调用mysql1的接口写在com.test.mapper.mysql1下的类里,对应的实现.xml写在resources目录下的mapper/mysql1目录下,需要调用mysql1的接口类似编写。