Application.yml文件
server:
port: 8080
spring:
application:
name: item-service
datasource:
db1:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
username: root
password: ****
db2:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sakila?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
username: root
password: ****
下面我们写一个配置类用来创建DataSource 对象
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Slf4j
@Configuration
public class DataSourceConfig {
@Value("${spring.datasource.db1.url}")
public String urlDb1;
@Value("${spring.datasource.db1.username}")
public String usernameDb1;
@Value("${spring.datasource.db1.password}")
public String passwordDb1;
@Value("${spring.datasource.db2.url}")
public String urlDb2;
@Value("${spring.datasource.db2.username}")
public String usernameDb2;
@Value("${spring.datasource.db2.password}")
public String passwordDb2;
@Bean("DataSourceDb1")
@Primary
public DataSource initDataSourceDb1() {
DruidDataSource dataSource = initDruidDataSource();
dataSource.setUrl(urlDb1);
dataSource.setUsername(usernameDb1);
dataSource.setPassword(passwordDb1);
return dataSource;
}
@Bean("DataSourceDb2")
public DataSource initDataSourceDb2() {
DruidDataSource dataSource = initDruidDataSource();
dataSource.setUrl(urlDb2);
dataSource.setUsername(usernameDb2);
dataSource.setPassword(passwordDb2);
return dataSource;
}
// 这里我用了阿里的 Druid Maven依赖 习惯什么用什么 当然现在Druid 已经不维护了。
public DruidDataSource initDruidDataSource() {
return new DruidDataSource();
}
}
下面配置MyBatis的工厂对象DataSourceMapperConfigDB1
package com.zts.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.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 org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.zts.demo.mapperDb1", sqlSessionFactoryRef = "SqlSessionFactoryDb1")
public class DataSourceMapperConfigDB1 {
@Bean(name = "SqlSessionFactoryDb1")
@Primary
public SqlSessionFactory initSqlSessionFactoryDb1(@Qualifier("DataSourceDb1") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mappers/*.xml"));
return sessionFactoryBean.getObject();
}
@Bean(value = "SqlSessionTemplateDb1")
@Primary
public SqlSessionTemplate initSqlSessionTemplateDb1(@Qualifier("SqlSessionFactoryDb1") SqlSessionFactory sqlSessionFactory) {
SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
@Bean(value = "TransactionManagerDb1")
@Primary
public PlatformTransactionManager initPlatformTransactionManager(@Qualifier("DataSourceDb1") DataSource dataSource) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
下面配置MyBatis的工厂对象DataSourceMapperConfigDB2 再多几个数据源也是一样的 一样的模板。
package com.zts.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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.zts.demo.mapperDb2", sqlSessionFactoryRef = "SqlSessionFactoryDb2")
public class DataSourceMapperConfigDb2 {
@Bean("SqlSessionFactoryDb2")
public SqlSessionFactory initSqlSessionFactoryDb2(@Qualifier("DataSourceDb2") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mappers/*.xml"));
return sessionFactoryBean.getObject();
}
@Bean("SqlSessionTemplateDb2")
public SqlSessionTemplate initSqlSessionTemplateDb2(@Qualifier("SqlSessionFactoryDb2") SqlSessionFactory sqlSessionFactory) {
SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sessionTemplate;
}
@Bean("TransactionManagerDb2")
public PlatformTransactionManager initPlatformTransactionManagerDb2(@Qualifier("DataSourceDb2") DataSource dataSource) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
return transactionManager;
}
}
剩下的该怎么写怎么写 创建两个 存放Dao包 在resouce 文件下创建一个mappers 包 把你的 .xml文件全放里面就行。