2013-12-08 3 views
0

Я создал приложение Spring Boot (0.5.0.BUILD-SNAPSHOT), используя Spring Initializr (http://start.spring.io/), и я добавлен один @RestController, один интерфейс CrudRepository и один класс @Entity - ничего сложного. Мой Maven POM содержит следующие зависимости:Добавление Spring-boot-starter-security в приложение Spring Boot приводит к ошибке «entityManagerFactory» или «persistenceUnitName» требуется

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jdbc</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
    </dependency> 

Класс Application содержит по умолчанию:

@ComponentScan 
@EnableAutoConfiguration 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

Простое приложение работает без ошибок, но я решил добавить Spring Security в POM для обеспечения управления конечные точки:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 

Теперь приложение не запускается, и я получаю следующее:

java.lang.IllegalArgumentException: «EntityManagerFactory» или «persistenceUnitName» требуется

Caused by: java.lang.IllegalArgumentException: 'entityManagerFactory' or 'persistenceUnitName' is required 
    at org.springframework.orm.jpa.JpaTransactionManager.afterPropertiesSet(JpaTransactionManager.java:304) 
    at org.springframework.orm.jpa.JpaTransactionManager.<init>(JpaTransactionManager.java:141) 
    at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.transactionManager(JpaBaseConfiguration.java:68) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) 
    ... 18 more 

Когда я удалить зависимость весна-загрузки-стартер-безопасности, приложение работает нормально, но без безопасности включена. Что означает ошибка? Приложение уже использует JPA и Hibernate без использования Spring Security.

+0

Похоже, что некоторые бобы в конфигурации безопасности заставляют раннее создание некоторых зависимостей JPA. Раньше я никогда не видел этой конкретной проблемы, и мы работали над довольно многими приложениями с JPA и Security. Может быть, проблема с нечетным порядком, которую мы никогда раньше не видели. Я посмотрю и посмотрю, смогу ли я воспроизвести его. Любой, у кого есть ответ, не стесняется комментировать. –

ответ

0

Существует bug there. Причина очень глубоко техническая и связана с внутренними элементами весной BeanFactory. Посмотрите на проблему Github, если вы хотите получить больше понимания, но, вероятно, вы сможете просто обновить зависимости моментальных снимков и получить исправление.

Смежные вопросы