Mybatis配置两个数据源

发布时间:2024年01月17日

1.配置两个数据源

# 数据源1配置
datasource1.url=jdbc:oracle:thin:@//your_oracle_host1:your_oracle_port1/your_oracle_sid1
datasource1.username=YourSchema1
datasource1.password=your_password1

# 数据源2配置
datasource2.url=jdbc:oracle:thin:@//your_oracle_host2:your_oracle_port2/your_oracle_sid2
datasource2.username=YourSchema2
datasource2.password=your_password2

2.创建两个数据源对象

@Configuration
public class DataSourceConfig {

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

    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "datasource2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().build();
    }
}

上面的 @Primary 注解表示 dataSource1 是默认的数据源。你可以根据实际需求来选择是否需要设置默认数据源。?

3.配置 MyBatis SqlSessionFactory 和 MapperScannerConfigurer

在配置 MyBatis 时,你需要配置两个 SqlSessionFactory 对象,每个都使用对应的数据源。

@Configuration
@MapperScan(basePackages = "com.example.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1")
public class MyBatisConfig1 {

    @Bean(name = "sqlSessionFactory1")
    public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper1/*.xml"));
        return factoryBean.getObject();
    }

    // 可以配置事务管理器等其他属性
}

@Configuration
@MapperScan(basePackages = "com.example.mapper2", sqlSessionFactoryRef = "sqlSessionFactory2")
public class MyBatisConfig2 {

    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/*.xml"));
        return factoryBean.getObject();
    }

    // 可以配置事务管理器等其他属性
}

4. 创建 Mapper 接口和 XML 文件

分别创建两组 Mapper 接口和 XML 文件,每组对应一个数据源。例如,你可以有 com.example.mapper1com.example.mapper2 两个包,分别放置两个数据源的 Mapper 接口和 XML 文件。

5. 在代码中使用

在代码中,你可以根据需要使用不同的 SqlSessionFactory 来获取相应的 SqlSession,从而访问不同的数据库。

@Service
public class YourService {

    @Autowired
    @Qualifier("sqlSessionFactory1")
    private SqlSessionFactory sqlSessionFactory1;

    @Autowired
    @Qualifier("sqlSessionFactory2")
    private SqlSessionFactory sqlSessionFactory2;

    public void yourMethod() {
        try (SqlSession sqlSession1 = sqlSessionFactory1.openSession()) {
            // 使用 sqlSession1 访问数据源1的数据
            YourMapper1 mapper1 = sqlSession1.getMapper(YourMapper1.class);
            // ...

        } catch (Exception e) {
            // 处理异常
        }

        try (SqlSession sqlSession2 = sqlSessionFactory2.openSession()) {
            // 使用 sqlSession2 访问数据源2的数据
            YourMapper2 mapper2 = sqlSession2.getMapper(YourMapper2.class);
            // ...

        } catch (Exception e) {
            // 处理异常
        }
    }
}

上述代码中,YourMapper1YourMapper2 是分别对应两个数据源的 Mapper 接口,你需要根据实际情况编写这两个接口。通过使用不同的 SqlSessionFactory,你可以分别访问两个不同数据源的数据库。

注:摘自chatgpt

文章来源:https://blog.csdn.net/nnzhuilian/article/details/135642191
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。