Spring Data Rest:“无法从 @EntityScan 配置 LocalContainerEntityManagerFactoryBean”

2024-01-16

我有一个 REST 服务 spring boot 应用程序,包含两个独立的 Maven 项目:

  1. 第一个myapp-data包括 Spring Data JPA + Spring Data Rest Entities 和 Rest Repositories 类定义(我已将它们隔离在一个单独的 Maven 项目中,因为我还在 REST 服务之外的其他应用程序中使用它们)。
  2. 第二myapp-services是一个 Spring Boot 应用程序,基本上包含 main 方法 + 配置,以将上述 Spring Data Rest 存储库公开为 REST 端点。

如果我在本地开发环境(STS Eclipse,启动mvn spring-boot:run在我的本地开发机器上)一切似乎都工作正常,但是当我将其部署为暂存 tomcat 环境(ubuntu 14.04 下的 tomcat7)上的战争时,我在下面的框中得到了异常。请注意,除此之外,两种部署的差异仅在于不同的设置application.properties(数据库连接、日志记录级别等)。

在我进行一些代码更改之前(例如,在以前的版本中,我使用普通的 JPA 存储库和自定义 Rest 控制器而不是 Spring Data Rest 存储库),应用程序在开发和临时环境中部署得很好。当我添加 Spring Data Rest 存储库时,问题可能开始出现,但我不能 100% 确定这一点,因为我在连续进行了许多其他细微更改后部署在临时环境中。

这是异常堆栈跟踪:

java.lang.IllegalStateException: Unable to configure LocalContainerEntityManagerFactoryBean from @EntityScan, ensure an appropriate bean is registered.
        at org.springframework.util.Assert.state(Assert.java:392)
        at org.springframework.boot.orm.jpa.EntityScanRegistrar$EntityScanBeanPostProcessor.afterSingletonsInstantiated(EntityScanRegistrar.java:148)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:792)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
        at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:149)
        at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:129)
        at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:85)
        at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5456)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1256)
        at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:692)
        at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:217)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:213)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:610)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

这是主要的应用程序类myapp-services项目:

package eu.myapp.services;

@ComponentScan(value="eu.myapp")
@EnableJpaRepositories("eu.myapp.data")
@EntityScan(value="eu.myapp.data")
@SpringBootApplication
public class MyappServicesApplication extends SpringBootServletInitializer {

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

where eu.myapp.data是定义在的包myapp-data项目包含为 Maven 依赖项,包含实体和存储库类定义。

在我的服务项目配置中,我将 Spring Security 与自定义 UserDetailsS​​ervice 一起使用(不知道这是否相关,..它在以前的部署中有效,所以可能不是)。


我不知道是否为时已晚,但我将告诉您我为解决此问题所做的工作以供将来参考。

显然,问题与 Spring Security 和自定义 UserDetailsS​​ervice 有关。

我认为一旦主应用程序类和SpringSecurity的配置类尝试同时访问数据库层,它们之间就会发生冲突。

要解决此问题,您可以将标签 @Order(1) 添加到主类,并将另一个标签(例如@Order(30))添加到安全类。

我不知道为什么只有当您将应用程序部署到网络服务器(对我来说是 Glassfish 4.1.1)时才会发生这种情况。

我希望它有帮助。

其他参考:

https://github.com/spring-projects/spring-boot/issues/1008 https://github.com/spring-projects/spring-boot/issues/1008

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data Rest:“无法从 @EntityScan 配置 LocalContainerEntityManagerFactoryBean” 的相关文章

  • Spring boot 2+日志详细日志不起作用,配合Logback、Hibernate + Weblogic

    I use 甲骨文11 x 春季启动 2 x maven weblogic 作为外部服务器 入口点 SpringBootConfiguration SpringBootApplication public class WebSpringBo
  • 配置 Jackson 在 Spring Boot 中省略延迟加载属性

    在纯java配置的spring boot mvc项目中如何配置Jackson以省略延迟加载属性 使用最新版本的 Spring Boot 这要容易得多 com fasterxml jackson databind Module 类型的任何 b
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 如何在不同的班级中启动和停止计时器?

    我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间 这两个时间点都位于不同的类中 我将如何启动和停止这些不同类别的计时器 我没有看到使用 MeterRegistry 中的 命名 计时器的方法 我该怎么办呢 您可以使用 AOP 如下
  • 如何使用Spring @Value注解来设置值?

    最近开始学习Spring核心框架 我对将 spring 与 XML 一起使用很有信心 但只想尝试基于注释的程序 但现在我陷入了这个 Value 注释 我有一个类 Line 扩展 Shape 接口 它使用 Point 对象作为依赖项 Poin
  • 如何使用 Spring Data Rest 和 PagingAndSortingRepository 处理异常?

    假设我有一个像这样的存储库 public interface MyRepository extends PagingAndSortingRepository
  • Spring 框架 application.properties 与 logback.xml

    我正在使用 Spring 和 Spring boot 最近 在尝试使用 EhCache 时 我尝试为 EhCache 启用日志记录 在 application properties 中设置日志级别 logging level org spr
  • Jhipster:对非管理员隐藏实体

    问候 Java 潮人 我刚刚生成了一个 jhipster 项目并创建了一些实体 我想通过将某些实体限制为仅管理员用户来隐藏它们 我该如何实现这一目标 Thanks 初读Spring安全文档 http docs spring io autor
  • OutputCapture 进行多次测试

    我正在使用 org springframework boot test OutputCapture 来测试记录某些内容的注释 它对于单个测试非常有效 当单独运行测试时 如果源文件中存在使用输出捕获的多个测试 但是当多个测试一起运行时 只有第
  • 如何使用 Spring Boot 传输音频

    我想让用户能够播放声音 我的实现在 Firefox 上运行良好 在 Safari 上 不播放声音 我验证了音频控制可以在 Safari 中与其他网站一起使用 所以 我认为我必须更改控制器中的某些内容 控制器 RequestMapping v
  • 在spring data jpa中实现动态数据源

    我有 N 个服务器 N 个数据库和 N 个配置 看下面的场景 因此 对于每个请求 我都需要根据配置访问服务器和数据库 spring data jpa如何实现动态数据源 你可以试试抽象路由数据源 https docs spring io sp
  • HTTPS 请求仅在 iOS、Ionic 2 上失败

    我有一个Ionic 2调用一个应用程序Spring Boot用于向其他设备发送推送通知的 API API 配置为 HTTPS The API POST请求适用于一切except iOS 我在服务器上的 SSL 证书是自签名的 也许就是这样
  • 使用HTTP/2协议时如何传递Keep-alive元数据?

    我有一个angular使用带有嵌入式 Spring Boot 的 Web 应用程序tomcat服务器在后端 我想让已建立的 http 连接保持更长时间 以提高后续 http 请求的响应时间 和http 1 1浏览器被告知通过添加来保持 ht
  • 如何使用 Spring Boot 测试 Maven 模块项目

    我已经将一个基于 Spring Boot 的项目拆分为几个 Maven 模块 现在只有war project包含一个starter类 有一个main方法 启动Spring 其他模块都是jar类型 如果 jar 项目不包含启动器 我该如何测试
  • 异步不适用于控制器的抽象超类方法

    我有一个BaseRestControllerRest 控制器扩展的类 它有一个我想异步运行的方法 public abstract class BaseRestController Async someThreadPoolTaskExecut
  • Spring Boot 开发工具 IntelliJ

    我正在使用 Spring Boot 1 3 0 M5 并且我正在尝试利用 devtools 这允许您在开发过程中对应用程序进行更改 并且启动将重新加载您的应用程序 我已经看到这个演示使用 Java 和 Maven 在 STS 中工作 我正在
  • spring中如何一起发送@Requestbody和@Requestpart

    我想使用curl 在控制器中一起传递json 和文件 我在控制器中有以下方法 PostMapping value api campaign headers content type multipart mixed content type
  • Spring boot 2.1.x 如何通过基本身份验证保护执行器端点

    我正在尝试构建一个 Spring Boot 应用程序 并希望利用 Actuator 功能 但我想保护 Actuator health shutdown 等的端点 我有以下配置 但似乎不起作用 也就是说 应用程序从不提示输入凭据 或者当邮递员
  • 从 Spring 启动运行 Java 类

    我使用的是Java8和Spring4 3 1 我有一个 Java Spring 应用程序托管由浏览器和移动应用程序客户端访问的 RESTfult 服务 其次 我编写了一个侦听事件的聊天服务器 socket io 来自客户 该聊天服务器正在从
  • 如何使用@PostConstruct仅在一个实例中调用@Scheduled方法

    有一项工作需要按 cron 计划完成 与作业中相同的逻辑必须在 Spring Boot 应用程序启动时执行 因此使用 PostConstruct 方法 使用 Shedlock 因为计划在多个实例中运行应用程序 问题是 如何使 PostCon

随机推荐