今天在設定Spring Boot JDBC多資料庫的datasource配置時,啟動時發生jdbcUrl is required with driverClassName錯誤如下。
Caused by: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:951) ~[HikariCP-3.2.0.jar:?]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:109) ~[HikariCP-3.2.0.jar:?]
...
問題原因出在application.properties
中設定的datasource的key名稱。
下面是錯誤發生時的application.properties
的datasource連線資訊。
application.properties
demo.datasource.url=jdbc:oracle:thin:@demo.caellrftl2c3.ap-northeast-1.rds.amazonaws.com:1521:demo
demo.datasource.username=abc
demo.datasource.password=123
下面是錯誤發生時的datasource配置類別DemoDataSourceConfig
。
DemoDataSourceConfig
@Configuration
public class DemoDataSourceConfig {
@Primary
@Bean(name = "demoDataSource")
@ConfigurationProperties(prefix = "demo.datasource")
public DataSource demoDataSource () {
return DataSourceBuilder
.create()
.build();
}
...
}
解決方式一是把指向資料庫的連線url的key應該要把結尾
url
改為jdbc-url
。
demo.datasource.jdbc-url=jdbc:oracle:thin:@demo.caellrftl2c3.ap-northeast-1.rds.amazonaws.com:1521:demo
若不想修改key的名稱,解決方式二是在DemoDataSourceConfig
設定以下。
DemoDataSourceConfig
@Configuration
public class DemoDataSourceConfig {
/** 此配置可將url轉換為jdbc-url */
@Primary
@Bean
@ConfigurationProperties("demo.datasource")
public DataSourceProperties dataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("demo.datasource.configuration")
public HikariDataSource dataSource(DataSourceProperties properties) {
return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
}
解決方式三,或直接在DemoDataSourceConfig
手動設定jdbcUrl
。
DemoDataSourceConfig
@Configuration
public class DemoDataSourceConfig {
@Value("${demo.datasource.url}") // <-- 注入applicatrion.properties的demo.datasource.url的值
private String jdbcUrl;
@Primary
@Bean(name = "demoDataSource")
@ConfigurationProperties(prefix = "demo.datasource")
public DataSource demoDataSource () {
return DataSourceBuilder
.create()
.url(jdbcUrl) // <-- 手動設定jdbcUrl
.build();
}
...
}
沒有留言:
張貼留言