SpringBoot + Mybatis integra vários bancos de dados (mysql + oracle)

Em trabalhos recentes, o projeto precisa trocar de banco de dados. No entanto, devido à grande quantidade de dados e atualizações frequentes de dados, está previsto o uso de banco de dados dual (mysql + oracle) para garantir o funcionamento normal do projeto. Hoje, vou compartilhe como o projeto Springboot integra mysql + oracle

1. Preparação do ambiente

Introduzir dependências de banco de dados (você pode escolher uma versão dependente de acordo com a versão do banco de dados)

<dependencies>
		<!-- jdbc驱动 -->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- mybatis启动器 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
            <scope>runtime</scope>
        </dependency>
        <!--数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.13</version>
        </dependency>
        <!-- oracle驱动 -->
       	<dependency>
		    <groupId>com.oracle</groupId>
		    <artifactId>ojdbc6</artifactId>
		    <version>11.2.0.4.0</version>
		</dependency>
    </dependencies>

A integração de bancos de dados duais requer configuração manual da fonte de dados, portanto, é necessário cancelar a configuração automática da fonte de dados na classe de inicialização

@SpringBootApplication(exclude = {
    
    DataSourceAutoConfiguration.class})
public class XxxApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(XxxApplication.class);
    }
}

O caminho de verificação automática do arquivo xml de configuração Mybatis não é mais necessário e é alternado para configuração manual do caminho xml

# 这些不需要了
mybatis:
  configuration:
    default-statement-timeout: 30
    map-underscore-to-camel-case: true
  mapper-locations: classpath:/mapper/*.xml

2. Configure manualmente o DataSource

informações do banco de dados de configuração do application.yml

spring:
  datasource:
    mysql:
      driver-class-name: com.mysql.jdbc.Driver
      # mysql数据库url和账号密码
      url: jdbc:mysql://localhost:3306/heima?serverTimezone=GMT%2B8&allowMultiQueries=true
      username: root
      password: root
    oracle:
      driver-class-name: oracle.jdbc.driver.OracleDriver
      # oracle数据库url和账号密码
      url: jdbc:oracle:thin:@localhost:1521:test
      username: root
      password: root

configuração de DataSource do mysql

import com.alibaba.druid.pool.DruidDataSource;
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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
// basePackages为mysql dao文件的路径,sqlSessionFactoryRef指定SqlSession工厂bean
@MapperScan(basePackages = "xxx.dao.mysql", sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDataSourceConfig {
    
    
    @Value("${spring.datasource.mysql.url}")
    private String url;
 
    @Value("${spring.datasource.mysql.username}")
    private String user;
 
    @Value("${spring.datasource.mysql.password}")
    private String password;
 
    @Value("${spring.datasource.mysql.driver-class-name}")
    private String driverClass;

    //对应mysql的mapper.xml文件路径
    private static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";

    /**
     * 配置mysql DataSource
     */
    @Bean(name = "mysqlDataSource")
    public DataSource mysqlDataSource() {
    
    
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    /**
     * 配置事务管理器
     */
    @Bean(name = "mysqlTransactionManager")
    public DataSourceTransactionManager mysqlTransactionManager() {
    
    
        return new DataSourceTransactionManager(mysqlDataSource());
    }

    /**
     * 配置SqlSession工厂
     */
    @Bean(name = "mysqlSqlSessionFactory")
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource)
            throws Exception {
    
    
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(mysqlDataSource);
        sessionFactory.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources(MysqlDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }

    /**
     * 配置SqlSessionTemplate
     */
    @Bean(name = "mysqlSqlSessionTemplate")
    public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
            throws Exception {
    
    
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

colocação de DataSource oracle

import com.alibaba.druid.pool.DruidDataSource;
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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
// basePackages为oracle dao文件的路径,sqlSessionFactoryRef指定SqlSession工厂bean
@MapperScan(basePackages = "xxx.dao.oracle", sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDataSourceConfig {
    
    
    @Value("${spring.datasource.oracle.url}")
    private String url;
 
    @Value("${spring.datasource.oracle.username}")
    private String user;
 
    @Value("${spring.datasource.oracle.password}")
    private String password;
 
    @Value("${spring.datasource.oracle.driver-class-name}")
    private String driverClass;

    //对应oracle的mapper.xml文件路径
    private static final String MAPPER_LOCATION = "classpath:mapper/oracle/*.xml";

    /**
     * 配置oracle DataSource
     */
    @Bean(name = "oracleDataSource")
    public DataSource oracleDataSource() {
    
    
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    /**
     * 配置事务管理器
     */
    @Bean(name = "oracleTransactionManager")
    public DataSourceTransactionManager oracleTransactionManager() {
    
    
        return new DataSourceTransactionManager(oracleDataSource());
    }

    /**
     * 配置SqlSession工厂
     */
    @Bean(name = "oracleSqlSessionFactory")
    public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource)
            throws Exception {
    
    
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(oracleDataSource);
        sessionFactory.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources(OracleDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }

    /**
     * 配置SqlSessionTemplate
     */
    @Bean(name = "oracleSqlSessionTemplate")
    public SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier("oracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
            throws Exception {
    
    
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

Como o mysql e o oracle são configurados separadamente, é necessário separar o xml e o dao deles, conforme a figura abaixo:
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Este é o fim, bem-vindo para deixar uma mensagem

Acho que você gosta

Origin blog.csdn.net/weixin_44947701/article/details/124133441
Recomendado
Clasificación