SpringBoot配置多数据源,三数据源,mysql+oracle+mysql

废话不多说,直接上代码,yml文件配置:

server:                                                     
  port: 8080                                             
                                                           
spring:
  datasource:                                               
    primary:                                                
      jdbc-url: jdbc:mysql://xxxxxxxxx:3306/xxxx?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false    
      username:test                                   
      password: test123                             
      driver-class-name: com.mysql.cj.jdbc.Driver    
      type: com.zaxxer.hikari.HikariDataSource
      minimum-idle: 1
      maximum-pool-size: 15
      auto-commit: true
      idle-timeout: 18000
      max-lifetime: 1800000
      connection-timeout: 300000
      connection-test-query: select 1       
                                                            
    secondary:                                              
      jdbc-url: jdbc:oracle:thin:@xxxxxxx:1521/xxxx       
      username: test                              
      password: test123                                
      driver-class-name: oracle.jdbc.driver.OracleDriver 
      type: com.zaxxer.hikari.HikariDataSource
      minimum-idle: 1
      maximum-pool-size: 15
      auto-commit: true
      idle-timeout: 18000
      max-lifetime: 1800000
      connection-timeout: 300000
      connection-test-query: SELECT * from dual 

    thirdary:                                                
      jdbc-url: jdbc:mysql://xxxxxxxxx:3306/xxxxx?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false    
      username: test
      password: test123       
      type: com.zaxxer.hikari.HikariDataSource                          
      driver-class-name: com.mysql.cj.jdbc.Driver    
      minimum-idle: 1
      maximum-pool-size: 15
      auto-commit: true
      idle-timeout: 18000
      max-lifetime: 1800000
      connection-timeout: 300000
      connection-test-query: select 1    

#mybatis:
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

logging:
  level:
    root: INFO


 

mysql1,主数据源配置

@Slf4j
@Configuration
@MapperScan(basePackages = MysqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDataSourceConfig {
    static final String PACKAGE = "com.dev.api.dao.mysql";
    static final String MAPPER_LOCATION = "classpath*:dao/mysql/*.xml";
    
    @Primary
    @Bean(name = "mysqlDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource mysqlDataSource() {
        log.info("mysql1配置成功");
        return DataSourceBuilder.create().build();
    }
    
    @Primary
    @Bean(name = "mysqlTransactionManager")
    public DataSourceTransactionManager mysqlTransactionManager() {
        return new DataSourceTransactionManager((mysqlDataSource()));
    }
    
    @Primary
    @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();
    }
}

oracle,副数据源

@Slf4j
@Configuration
@MapperScan(basePackages = OracleDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDataSourceConfig {
    static final String PACKAGE = "com.dev.api.dao.oracle";
    static final String MAPPER_LOCATION = "classpath*:dao/oracle/*.xml";
    @Bean(name = "oracleDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource oracleDataSource() {
        log.info("oracle配置成功");
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "oracleTransactionManager")
    public DataSourceTransactionManager oracleTransactionManager() {
        return new DataSourceTransactionManager(oracleDataSource());
    }

@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();
    }
}

mysql,第三数据源配置

@Slf4j
@Configuration
@MapperScan(basePackages = Mysql2DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mysql2SqlSessionFactory")
public class Mysql2DataSourceConfig {
    static final String PACKAGE = "com.dev.api.dao.mysql2";
    static final String MAPPER_LOCATION = "classpath*:dao/mysql2/*.xml";
    
    @Bean(name = "mysql2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.thirdary")
    public DataSource mysqlDataSource() {
        log.info("mysql2配置成功");
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "mysql2TransactionManager")
    public DataSourceTransactionManager mysqlTransactionManager() {
        return new DataSourceTransactionManager((mysqlDataSource()));
    }
    
    @Bean(name = "mysql2SqlSessionFactory")
    public SqlSessionFactory mysql2SqlSessionFactory(@Qualifier("mysql2DataSource") DataSource mysqlDatasource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(mysqlDatasource);
        sessionFactory.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources(Mysql2DataSourceConfig.MAPPER_LOCATION)
        );
        return sessionFactory.getObject();
    }
}

三个数据源对应三个不同的DAO包,PACKAGE路径就是Dao建立的路径,处理该数据库的DAO就放到对应的包里。对应的包里的DAO就是对应配置的数据源,数据库语句我是直接在DAO里用注解写的,比如:

@Mapper
public interface mysqlDao {

    @Select("SELECT count(1) FROM user_yg")
    public String test();
}

我这里没有XML文件,所以MAPPER_LOCATION的这个就是随便写就好了。调用哪个数据源就调用哪个DAO来执行,就这样。有两个mysql数据源,具体有哪些变动自己看一下,同理可以再配置第四第五个。springboot2.0以上默认的数据库连接池是hikari的,我这里配置了一下,其实可以不用写,一样会启用hikari连接池。项目是MAVEN的,根据具体的数据库版本来配置pom就行了。如果不是就在网上下载对应的jar。

另外只有主数据源有@Primary这个注解,其他没有。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中配置多个数据可以通过使用多个DataSource来实现。以下是配置MySQLOracle数据的步骤: 1. 引入依赖 在pom.xml文件中添加如下依赖: ```xml <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Oracle驱动 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4</version> </dependency> ``` 2. 配置数据 在application.yml或application.properties文件中,添加以下配置: ```yaml # MySQL 数据配置 spring.datasource.mysql.url=jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC&characterEncoding=utf8 spring.datasource.mysql.username=root spring.datasource.mysql.password=root spring.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver # Oracle 数据配置 spring.datasource.oracle.url=jdbc:oracle:thin:@localhost:1521:orcl spring.datasource.oracle.username=system spring.datasource.oracle.password=oracle spring.datasource.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver ``` 3. 配置JdbcTemplate 在配置数据后,我们可以使用Spring提供的JdbcTemplate来操作数据库。在代码中,我们需要分别创建两个JdbcTemplate对象,如下所示: ```java @Configuration public class DataSourceConfig { @Bean(name = "mysqlJdbcTemplate") public JdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "oracleJdbcTemplate") public JdbcTemplate oracleJdbcTemplate(@Qualifier("oracleDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "mysqlDataSource") @ConfigurationProperties(prefix = "spring.datasource.mysql") public DataSource mysqlDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "oracleDataSource") @ConfigurationProperties(prefix = "spring.datasource.oracle") public DataSource oracleDataSource() { return DataSourceBuilder.create().build(); } } ``` 在上面的代码中,我们使用@Qualifier注解来指定不同的数据。我们还定义了两个JdbcTemplate对象,并使用@ConfigurationProperties注解将数据配置注入到DataSource对象中。这样,我们就可以在代码中通过@Autowired注解来使用这两个JdbcTemplate对象了。 需要注意的是,如果你使用了JPA或MyBatis等持久化框架来操作数据库,那么你需要在这些框架的配置文件中指定不同的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值