spring boot 2.0 配置多数据源错误

本文详细解析了在SpringBoot2.0中配置多数据源时遇到的常见错误及解决方案,特别是关于URL配置的误区。通过调整配置项从'url'到'jdbc-url',成功解决了数据源初始化失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天使用spring boot2.0 配置多数据源 可以说是被坑蒙蔽了!!!

我使用spring boot版本是:

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

  yml配置文件如下:

spring:
  datasource:
     master:
         url: jdbc:mysql://chatscheduler-m.db.internal:3306/d_show_scheduler_formal?characterEncoding=UTF-8&useSSL=false
         username: #####
         password: #####
         driver-class-name: com.mysql.cj.jdbc.Driver
         type: com.alibaba.druid.pool.DruidDataSource
     slave:
         type: com.alibaba.druid.pool.DruidDataSource
         url: jdbc:mysql://chatscheduler-s1.db.internal:3306/d_show_scheduler_formal
         username: ######
         password: ######
         driver-class-name: com.mysql.cj.jdbc.Driver

   本以为很简单的配置结果一直在报错:

java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.

真是巨坑,找了好久才发现是url配置的问题

 

修改方法如下  将url 改为 jdbc-url:

spring:
  datasource:
     master:
         jdbc-url: jdbc:mysql://chatscheduler-m.db.internal:3306/d_show_scheduler_formal?characterEncoding=UTF-8&useSSL=false
         username: #####
         password: #####
         driver-class-name: com.mysql.cj.jdbc.Driver
         type: com.alibaba.druid.pool.DruidDataSource
     slave:
         type: com.alibaba.druid.pool.DruidDataSource
         jdbc-url: jdbc:mysql://chatscheduler-s1.db.internal:3306/d_show_scheduler_formal
         username: ######
         password: ######
         driver-class-name: com.mysql.cj.jdbc.Driver

问题得以解决,有相同问题的小伙伴不妨试一试!!!!!!!!!

 

下面为我两个数据源的配置有需要的可以参考一下:

项目结构大致为下图:

具体的文件:


import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.cyou.tv.zebra.dao.master",sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {

//    @Primary
    @Bean(name = "master")
    @ConfigurationProperties("spring.datasource.master")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "masterSqlSessionFactory")
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("master") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:mappers/master/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

 


import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.cyou.tv.zebra.dao.slave",sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig {

    @Bean(name = "slave")
    @ConfigurationProperties("spring.datasource.slave")
    public DataSource slaveDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "slaveSqlSessionFactory")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slave") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:mappers/slave/*.xml"));
        return sessionFactoryBean.getObject();
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值