今天使用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();
}
}