将 spring-boot-starter-security 添加到 Spring Boot 应用程序会导致错误 'entityManagerFactory' 或 'persistenceUnitNa

Posted

技术标签:

【中文标题】将 spring-boot-starter-security 添加到 Spring Boot 应用程序会导致错误 \'entityManagerFactory\' 或 \'persistenceUnitName\' is required【英文标题】:Adding spring-boot-starter-security to Spring Boot application causes error 'entityManagerFactory' or 'persistenceUnitName' is required将 spring-boot-starter-security 添加到 Spring Boot 应用程序会导致错误 'entityManagerFactory' 或 'persistenceUnitName' is required 【发布时间】:2013-12-25 08:44:30 【问题描述】:

我使用 Spring Initializr (http://start.spring.io/) 创建了一个 Spring Boot (0.5.0.BUILD-SNAPSHOT) 应用程序,并添加了一个 @RestController、一个 CrudRepository 接口和一个 @Entity 类 - 没什么复杂的。我的 Maven POM 包含以下依赖项:

    <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

当我删除 spring-boot-starter-security 依赖项时,应用程序运行良好但没有启用安全性。错误是什么意思?该应用程序已经使用 JPA 和 Hibernate,但未启用 Spring Security。

【问题讨论】:

看起来可能安全配置中的某些 bean 正在强制一些 JPA 依赖项的早期实例化。不过,我之前从未见过这个特定问题,我们已经使用 JPA 和 Security 开发了很多应用程序。可能有一个我们以前从未见过的奇怪的排序问题。我会看看,看看我是否可以重现它。其他有答案的人随时发表评论。 【参考方案1】:

有一个bug there。原因确实是技术性很强的,并且与 Spring BeanFactory 的内部结构有关。如果您想进一步了解,请查看 Github 问题,但可能您应该能够刷新您的快照依赖项并获得修复。

【讨论】:

以上是关于将 spring-boot-starter-security 添加到 Spring Boot 应用程序会导致错误 'entityManagerFactory' 或 'persistenceUnitNa的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?

如何将CMD窗口背景改成透明?