springboot2Hikari多数据源配置问题(dataSourceClassName。
。。
springboot 2 Hikari 多数据源配置问题(dataSourceClassName or jdbcUrl is required)
最近在项⽬中想试⼀下使⽤ Hikari 连接池,以前⽤的是阿⾥的 Druid,框架是 Spring MVC,xml配置⽂件⽅式注⼊的 Bean,现在换成Spring Boot 之后,总遇到⼀些奇怪的问题,问题的根源是在于⾃⼰是个半桶⽔。
好了,先来看看 l 配置⽂件:
spring:
jpa:
show-sql: true
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
hikari:
maximum-pool-size: 20
max-lifetime: 30000
idle-timeout: 30000
data-source-properties:
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
cachePrepStmts: true
useServerPrepStmts: true
slave:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
hikari:
maximum-pool-size: 20
max-lifetime: 30000
idle-timeout: 30000
data-source-properties:
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
cachePrepStmts: true
useServerPrepStmts: true
复制代码
数据源配置⽂件:
package fig;
import com.zaxxer.hikari.HikariDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.t.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import t.annotation.Bean;
import t.annotation.Configuration;
import t.annotation.Primary;
import org.JdbcTemplate;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
/**
数据源配置
@author jeftom
@date 2019-04-14 12:03
druid连接池配置详解@since 1.0.0
*/
@Configuration
public class DataSourceConfig {
private final static Logger LOGGER = Logger(DataSourceConfig.class);
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource masterDataSource(DataSourceProperties properties) {
LOGGER.info("init master data source:{}", properties);
ate().build();
}
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource slaveDataSource(DataSourceProperties properties) {
LOGGER.info("init slave data source:{}", properties);
ate().build();
}
@Bean
@Primary
public DynamicDataSource dataSource(DataSource masterDataSource, DataSource slaveDataSource) {
Map<String, DataSource> targetDataSources = new HashMap<>();
targetDataSources.put(Name(), masterDataSource);
targetDataSources.put(Name(), slaveDataSource);
<span class="hljs-built_in"><span class="hljs-built_in">return</span></span> new DynamicDataSource(masterDataSource, targetDataSources);
}
}
复制代码
报错信息:
com.zaxxer.hikari.HikariConfig : HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl
is required.
java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:955) ~[HikariCP-3.2.0.jar:na]
复制代码
百度了⼀下到的解决⽅法:
1. url 换成了 jdbc-url;
2. 增加 driver-class-name: sql.cj.jdbc.Driver
试了⼀下,果然真的可以。但是,没有使⽤多数据源时,原来的配置⽂件也是能正常使⽤的啊,为什么呢?问题肯定是出在增加了 DataSourceConfig 这个配置⽂件之后。
于是试着把配置⽂件还原回去,再把
ate().build();
复制代码
改为如下:
ClassLoader())
.type(HikariDataSource.class)
.driverClassName(properties.determineDriverClassName())
.url(properties.determineUrl())
.username(properties.determineUsername())
.password(properties.determinePassword())
.build();
复制代码
也就是从配置⽂件拿到配置值之后重新赋值⼀下,再次启动项⽬,居然好了~
原因就是出在 DataSourceBuilder 创建数据源这个类上,⽽单数据源⾃动装载时不会出现这样的问题。
原⽂地址;juejin.im/post/5cb2f9f26fb9a068b748ab33
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论