我有一個應用程序 - 使用Spring 4.3.6和Spring Boot 1.4.4 - 它將作爲JAR導出。我想連接到遠程Oracle數據庫,但是我無法在不中斷應用程序的情況下對配置進行外部化。DataSource的Spring Boot外部配置不能正常工作
這是我目前的解決方法:
import org.apache.tomcat.jdbc.pool.DataSource;
@Bean
public DataSource dataSource() {
DataSource dataSource = new DataSource();
dataSource.setUrl("jdbc:oracle:thin:@ip-address:port:orcl");
dataSource.setUsername("user");
dataSource.setPassword("password");
dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
return dataSource;
}
通過上述,我的應用程序能夠連接到數據庫,併成功地執行查詢。然而,當我嘗試外化配置如下:
@Bean
@ConfigurationProperties(prefix="app.datasource")
public DataSource dataSource() {
return new DataSource();
}
// application.properties
app.datasource.url=jdbc:oracle:thin:@ip-address:port:orcl
app.datasource.username=user
app.datasource.password=password
app.datasource.driver-class-name=oracle.jdbc.OracleDriver
我會試着在我的春節,引導控制器執行jdbcTemplate.update(query)
如果出現以下錯誤(請注意,如果沒有外在上述作品):
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: The url cannot be null
我試圖刪除@ConfigurationProperties
並將app.datasource
更改爲spring.datasource
。我也嘗試使用DataSourceBuilder.create().build()
,它返回javax.sql.DataSource
,但在這兩種情況下都會引發同樣的錯誤。
我做錯了什麼。什麼是成功實現外部配置的正確方法?
爲什麼你甚至創建自己的'DataSource' ... –
我一開始並沒有創建自己的。我使用的是hsqldb,但它沒有訪問Oracle數據庫的權限。我問了一個問題,答案是更改爲ojdbc,所以我這樣做了。現在,它找不到自動裝入jdbctemplate的bean,所以我去閱讀spring reference(自從我開始工作以來的第n次),我認爲問題在於DataSource不知何故不存在,所以我猜我在做什麼可能會算作一個自定義的數據源,因此我試圖創建一個。現在它不會自動使用application.properties設置進行自我配置... – thegreatjedi
hsqldb不是oracle ...所以很明顯,它永遠不會工作。您需要正確的驅動程序,並且這些都不需要手動配置。此外,例外狀態(清楚地)表示數據源在那裏,但無法建立連接,因此(可能)您的用戶名/密碼組合有問題。基本上所有你需要的是刪除你的配置,在'application.properties'重新啓動時用'spring.'替換'app.'並檢查你的異常。 –