Invocation of init method failed; nested exception is javax.validation.ValidationException
タイトルわかりにくいですが
SpringBootアプリケーションの起動エラーに関してです。
少しはまったのと、別件調査・試行錯誤中に発生してイラっとしたので備忘録として記載します。
構成:SpringBoot[v2.3.3.RELEASE]、Maven[3.8]、Java[1.8]
SpringBootアプリケーション作成中に挙動が訝しいので「.m2」配下のrepositoryフォルダ内を削除して再度ライブラリをダウンロードしたところ、mavenのinstall実行でエラーが発生するようになった。
エラーは以下の通り
2020/09/16 11:59:10 WARN [main] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultValidator' defined in class path resource [org/springframework/boot/autoconfigure/validation/ValidationAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.validation.ValidationException: Unable to instantiate Configuration. Exception in thread "task-2" java.lang.IllegalStateException: EntityManagerFactory is closed at org.hibernate.internal.SessionFactoryImpl.validateNotClosed(SessionFactoryImpl.java:509) at org.hibernate.internal.SessionFactoryImpl.getProperties(SessionFactoryImpl.java:503) at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.findDataSource(DataSourceInitializedPublisher.java:105) at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.publishEventIfRequired(DataSourceInitializedPublisher.java:97) at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.access$100(DataSourceInitializedPublisher.java:50) at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher$DataSourceSchemaCreatedPublisher.lambda$postProcessEntityManagerFactory$0(DataSourceInitializedPublisher.java:200) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)
Invocation of init method failed; nested exception is javax.validation.ValidationException
が主原因のように見える。。。
????
ググってみるとどうもバリデーションが正常に言っていないようです。
チェック処理が邪魔になるとは。。
参考:
Java - Spring Boot -プロジェクト作成し、起動した後のエラー|teratail
どうもmavenで記載しているライブラリのバージョンが古いせいでエラーが出ている模様。
バージョンの古いライブラリがかみ合わないorバグ の影響でエラーが発生しているものと解釈。
ライブラリって便利だけどこういう時の更新忘れや不一致は困りものですね。
pom.xmlの以下の記述を修正。
修正前:
<dependency> <groupid>org.hibernate</groupid> <artifactid>hibernate-validator</artifactid> <version>5.2.0.Alpha1</version> </dependency>
修正後:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.5.Final</version> </dependency>
そもそもalphaってあるのに使うのが危ない。。
利用時は試行錯誤していたのでそこまで気が回っていなかった。
新規構築時などは一通り構築後にリポジトリの再構成やPOMの見直しをしたほうがいいですね。
そのあと運用になるとなかなか手を入れる機会もなくなりますし。
補足:m2フォルダのrepository内から利用していないバージョンのhibernate-validatorのライブラリ削除しておくことを推奨します。利用時にどちらを利用しているのかを明確にするため。たぶんバージョン指定しているから問題ないとは思うけど。