楽落人の備忘録

楽して生きていきたい。知識とか覚えておきたくない。

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

spring - Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath - Stack Overflow

 

どうも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のライブラリ削除しておくことを推奨します。利用時にどちらを利用しているのかを明確にするため。たぶんバージョン指定しているから問題ないとは思うけど。