在SpringBoot项目中配置连接多个不同服务器的mybatis

存在比较大的项目,一个数据库,不满足需求,需要多个数据库来满足需求,那么就需要在一个项目里面配置多个数据库。

在一个项目中,配置连接多个mysql,是通过myabtis-plus来解决的。

首先导入mybatis和mybatis的依赖。

        <!-- orm使用mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <!-- 使用tk增强mybatis的单表操作的便利性 -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>4.1.5</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.1.2</version>
        </dependency>

然后在yml文件中,配置mysql的连接条件。

在这里我配置了两个连接mysql的信息。

#数据库配置
spring:
  datasource:
    db:
#      url: jdbc:mysql://${server_inner_ip}:3306/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
      jdbc-url: jdbc:mysql://${server_inner_ip}:3308/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
#      username: root
      username: dba
#      password: root
      password: dba1234!
      driver-class-name: com.mysql.cj.jdbc.Driver
    dmc:
      #      url: jdbc:mysql://${server_inner_ip}:3306/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
      jdbc-url: jdbc:mysql://${server_inner_ip}:3308/data_catalog?useUnicode=true&useSSL=false&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
      #      username: root
      username: dba
      #      password: root
      password: dba1234!
      driver-class-name: com.mysql.cj.jdbc.Driver

注意:因为我们使用mybatis-plus来配置多个数据源。这里的mysql url为:jdbc-url,如果是单个的数据源,只用mybatis的话,就是url。

然后写配置类,配置具体的多个数据源。

数据源1的配置方法为:

@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.catalog.mapper.db", sqlSessionFactoryRef = "userSqlSessionFactory")
public class DataCenterDB1Config {

    // 将这个对象放入Spring容器中
    @Bean(name = "userDataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.db")
    public DataSource getDataCenterDateSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "userSqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory dataCenterSqlSessionFactory(@Qualifier("userDataSource") DataSource datasource)
            throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(datasource);
//        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db/*.xml"));
        return bean.getObject();
    }

    @Bean("userSqlSessionTemplate")
    // 表示这个数据源是默认数据源
    @Primary
    public SqlSessionTemplate dataCenterSqlsessiontemplate(
            @Qualifier("userSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

数据源2的配置方法:

@EnableTransactionManagement
@Configuration
@MapperScan(basePackages = {"com.catalog.mapper.dmc"}, sqlSessionFactoryRef = "dataSqlSessionFactory")
public class DataCenterDB2Config {

    // 将这个对象放入Spring容器中
    @Bean(name = "dataDataSource")
    // 表示这个数据源是默认数据源
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.dmc")
    public DataSource getDataCenterDateSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "dataSqlSessionFactory")
    // 表示这个数据源是默认数据源
    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory dataCenterSqlSessionFactory(@Qualifier("dataDataSource") DataSource datasource)
            throws Exception {

        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(datasource);
//        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/dmc/*.xml"));
        return bean.getObject();
    }

    @Bean("dataSqlSessionTemplate")
    // 表示这个数据源是默认数据源
    public SqlSessionTemplate dataCenterSqlsessiontemplate(
            @Qualifier("dataSqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }


    /**
     * 定义事务管理器
     * @param dataSource 数据源
     * @return 事务管理器
     */
    @Bean(name = "dataTransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("dataDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 定义事务模板
     * @param transactionManager 事务管理器
     * @return 事务模板
     * @throws Exception 异常
     */
    @Bean(name = "dataTransactionTemplate")
    public TransactionTemplate transactionTemplate(@Qualifier("dataTransactionManager") DataSourceTransactionManager transactionManager) throws Exception {
        DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
        defaultTransactionDefinition.setIsolationLevel(TransactionDefinition.ISOLATION_DEFAULT);
        defaultTransactionDefinition.setTimeout(60);
        return new TransactionTemplate(transactionManager, defaultTransactionDefinition);
    }
}

然后还需要在项目中,配置好mapper文件的格式,例如我们这里就是下面这种格式

然后xml文件的格式,也需要按照上面的格式来配置

这样配置的格式就是为了使用多个不同服务器上的数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值