spring boot 2.0 配置多数据源错误

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

我使用spring boot版本是:

 
        org.springframework.boot
        spring-boot-starter-parent
        2.1.4.RELEASE
         
    

  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.

spring boot 2.0 配置多数据源错误_第1张图片

真是巨坑,找了好久才发现是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

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

 

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

项目结构大致为下图:spring boot 2.0 配置多数据源错误_第2张图片

具体的文件:


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

}

 

你可能感兴趣的:(spring boot 2.0 配置多数据源错误)