spring boot項目中使用jpa的一個未解之謎
公司最近主要的工作就是把之前的一個項目進行幾乎全麵的重構,之所以說幾乎全麵,是因為除開業務邏輯外全部換血:
框架由spring+struts2+mybatis改為spring boot+jpa
數據庫由sybase+h2改為oracle+redis
子係統之間的交互由activemq改為http
代碼具體實現全部重寫
對一個運行了若幹年的項目進行這樣的大動作,路程無疑是漫長而複雜的。在進行了一係列設計文檔的編寫、評審、修訂、再評審之後,終於可以開始碼代碼了。
本以為碼代碼終於可以鬆一口氣,沒想到在框架搭建階段便遇到了一頭攔路虎:
在進行jpa整合的時候,一切配置完成後,卻無論如何不能啟動項目,日誌中打印了如下的異常信息
[ERROR] [2017-09-11 18:11:39.707] org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter.report [LoggingFailureAnalysisReporter.java : 42] |
***************************
APPLICATION FAILED TO START
***************************
Description:
Cannot determine embedded database driver class for database type NONE
Action:
If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (the profiles "dev" are currently active).
看這個異常,就是數據庫連不上,似乎是配置文件加載不了,但是實際上隻要我去掉jpa的jar包,就可以正常運行。
於是網上一頓搜索,但是結果卻不盡如人意,看了十幾個答案,基本上都是一樣的:
原因是:springboot啟動時會自動注入數據源和配置jpa
解決:在@SpringBootApplication中排除其注入
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
但是很明顯,我就是要用數據庫,這樣一排除掉自然是啟動不報錯了,但是我卻用不了了,於是我便求助了一下之前專門研究了一段時間jpa的同事。
他看了下我的項目後,說少了h2的jar包,於是在pom.xml中加入了h2的依賴
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.175</version>
</dependency>
沒想到加入這個jar之後再次運行項目,還真的是成功啟動並連接上數據庫了!
隻不過,項目雖然成功啟動,他卻也說不出來為什麼要這樣改,之所以這樣改了,隻是因為一個偶然。
後來我也再次查看了項目框架中的代碼,依舊沒有找到哪裏用到了h2,因此這個問題便暫時成為了未解之謎!
由於任務催的緊,一時之間也沒有那麼多時間深入去探究,隻能做個記錄,留待後邊空閑點了繼續刨根問底,也希望知道答案的朋友不吝賜教,感激不盡!
最後更新:2017-09-11 22:03:51