package com.example.duplicate.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; 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 org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; /** * @ClassName RecordConfig * @Description 归档数据数据源配置 * @Author linjj * @Date 2023/8/2 16:48 * @Version 1.0 */ @Configuration // 指定主数据库扫描对应的Mapper文件,生成代理对象 @MapperScan(basePackages ="com.example.duplicate.infrastructure.configTwoDao" ,sqlSessionFactoryRef = "configTwoSqlSessionFactory") public class ConfigTwo { // mapper.xml所在地址 private static final String MAPPER_LOCATION = "classpath*:mapper2/*.xml"; /** * 主数据源,Primary注解必须增加,它表示该数据源为默认数据源 * 项目中还可能存在其他的数据源,如获取时不指定名称,则默认获取这个数据源,如果不添加,则启动时候回报错 */ @Primary @Bean(name = "configTwoDataSource") // 读取spring.datasource.master前缀的配置文件映射成对应的配置对象 @ConfigurationProperties(prefix = "spring.datasource.db2") public DataSource dataSource() { DataSource build = DataSourceBuilder.create().build(); return build; } /** * 事务管理器,Primary注解作用同上 */ @Bean(name = "configTwoTransactionManager") @Primary public PlatformTransactionManager dataSourceTransactionManager(@Qualifier("configTwoDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * session工厂,Primary注解作用同上 */ @Bean(name = "configTwoSqlSessionFactory") @Primary public SqlSessionFactory sqlSessionFactory(@Qualifier("configTwoDataSource") DataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(ConfigTwo.MAPPER_LOCATION)); return sessionFactoryBean.getObject(); } }