1、springboot版本和引入依赖
org.springframework.boot spring-boot-starter-parent 2.5.5 org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.0 mysql mysql-connector-java
2、application.yml配置信息
spring:
application:
name: datasource-service
datasource:
test001:
jdbc-url: jdbc:mysql://localhost:3306/test001?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: root1234
driver-class-name: com.mysql.cj.jdbc.Driver
test002:
jdbc-url: jdbc:mysql://localhost:3306/test002?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: root1234
driver-class-name: com.mysql.cj.jdbc.Driver
3、数据库连接配置类(另外一个数据源配置类参考此类,取消@Primary)
package com.zy.datasource.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.zy.datasource.dao.test001", sqlSessionTemplateRef = "test001SqlSessionTemplate")
public class DatasourceConfigTest001 {
@Bean(name = "test001DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test001")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test001SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test001DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test001/*.xml"));
return bean.getObject();
}
@Bean(name = "test001TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("test001DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "test001SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test001SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
4、dao层文件
package com.zy.datasource.dao.test001;
import com.zy.datasource.dto.User;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface Test001Dao {
List getAll();
User getOne(Long id);
void insert(User user);
void update(User user);
void delete(Long id);
}
5、mapper的xml文件
id, userName, passWord, user_sex, nick_name
整合完成!!!
一个方法里多数据源操作,出现异常整体回滚
参考文章:
链接: Spring Boot多数据源事务管理.



