在使用 Mybatis + SpringBoot 时,如果需要配置多个数据源,可以通过使用 @Qualifier 注解和 @Autowired 注解来引用特定的 SqlSessionFactory

首先,需要在每个数据源的配置类中定义一个 SqlSessionFactory,并将其注入到 Spring 容器中,例如:

@Configuration
@MapperScan(basePackages = "com.example.mapper1", sqlSessionTemplateRef = "sqlSessionTemplate1")
public class DataSource1Config {

    @Bean(name = "dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource1")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory1")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }

    @Bean(name = "sqlSessionTemplate1")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

然后,在需要使用 SqlSessionFactory 的地方,可以使用 @Qualifier 注解指定要使用的数据源,例如:

@Service
public class MyService {

    private final SqlSessionFactory sqlSessionFactory1;
    private final SqlSessionFactory sqlSessionFactory2;

    @Autowired
    public MyService(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory1, 
                     @Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory2) {
        this.sqlSessionFactory1 = sqlSessionFactory1;
        this.sqlSessionFactory2 = sqlSessionFactory2;
    }

    // 使用sqlSessionFactory1或sqlSessionFactory2进行数据访问
    ...
}
SpringBoot 多数据源配置:如何使用 Mybatis SqlSessionFactory

原文地址: https://www.cveoy.top/t/topic/od5n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录