У меня есть приложение, которое использует Spring Boot и Spring Data JPA с конфигурацией на основе только аннотаций для своего уровня персистентности.Я начал переносить это приложение на последнюю версию Spring Boot (2.1.x) вместе с Java (OpenJDK) 11. После настройки дескрипторов модуля приложение запускается, но когда Spring достигает точки, где оно хочет создатьНа уровне постоянства приложение останавливается со следующим исключением:
Caused by: javax.persistence.PersistenceException: Unable to resolve persistence unit root URL
at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:640)
at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.preparePersistenceUnitInfos(DefaultPersistenceUnitManager.java:462)
at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.afterPropertiesSet(DefaultPersistenceUnitManager.java:443)
at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:328)
at spring.beans@5.1.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1804)
at spring.beans@5.1.2.RELEASE/org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1741)
... 16 common frames omitted
Caused by: java.io.FileNotFoundException: class path resource [] cannot be resolved to URL because it does not exist
at spring.core@5.1.2.RELEASE/org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195)
at spring.orm@5.1.2.RELEASE/org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.determineDefaultPersistenceUnitRootUrl(DefaultPersistenceUnitManager.java:636)
... 21 common frames omitted
Эта проблема возникает, только когда я пытаюсь запустить приложение в IntelliJ IDEA, который запускает JVM путем настройки пути к модулю вместо пути к классам (как и ожидалось).Когда я пытаюсь запустить приложение, упакованное как исполняемый файл jar, проблема исчезает, но, как я заметил, дескрипторы модуля в основном игнорируются, когда приложение запускается из исполняемого файла jar ...
Что мне удалосьобнаружение состоит в том, что org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
находит объекты, а также сохраняет их в единице постоянства, но после этого пытается определить корневой URL-адрес единицы постоянства, и в этот момент происходит сбой.Без дескрипторов модуля у приложения есть classpath, и этого достаточно для DefaultPersistenceUnitManager, оно будет использовать целевой каталог (запущенный из IDEA) или JAR модуля постоянства Maven (запущенный из исполняемого JAR).
Полагаю,в дескрипторе модуля я что-то упускаю, так что просто для справки это выглядит так:
open module leaflet.app.backend.persistence {
requires java.persistence;
requires java.validation;
requires org.apache.commons.lang3;
requires org.hibernate.orm.core;
requires spring.beans;
requires spring.context;
requires spring.data.commons;
requires spring.data.jpa;
requires spring.tx;
exports hu.psprog.leaflet.persistence.dao;
exports hu.psprog.leaflet.persistence.entity;
exports hu.psprog.leaflet.persistence.repository;
exports hu.psprog.leaflet.persistence.repository.specification;
}
Если у кого-то есть какие-то мысли по этому поводу, пожалуйста, не стесняйтесь писать этовниз - я в основном застрял в этой точке.Заранее большое спасибо!