ich eine REST-Service Frühjahr Boot-Anwendung haben, besteht in zwei separate Maven Projekte:Spring Data Rest: "Kann nicht LocalContainerEntityManagerFactoryBean von @EntityScan konfigurieren"
- Die erste
myapp-data
enthält Spring Data JPA + Frühling Klassendefinitionen für Datenrest-Entitäten und Rest-Repositories (Ich habe diese in einem separaten Maven-Projekt isoliert, da ich sie auch in anderen Anwendungen neben meinem REST-Service verwende). - Der secon
myapp-services
ist eine Spring Boot-Anwendung, die im Wesentlichen die Methode + method + Konfiguration enthält, um die oben genannten Spring Data Rest-Repositorys als REST-Endpunkte verfügbar zu machen.
Wenn ich laufe diese in einer lokalen Entwicklungsumgebung (STS Eclipse mvn spring-boot:run
auf meiner lokalen Entwicklung Maschine starten) alles scheint gut zu funktionieren, aber wenn ich implementieren sie als Krieg auf einer Staging tomcat Umgebung (tomcat7 unter ubuntu 14.04) Ich habe die Ausnahme in der Box unten. Beachten Sie, dass außerdem der Unterschied in den beiden Bereitstellungen nur in verschiedenen Einstellungen von application.properties
(db-Verbindung, Protokollierungsebenen usw.) besteht.
Bevor einige Codeänderungen vorgenommen wurden (in früheren Versionen habe ich zum Beispiel normale JPA-Repositorys und benutzerdefinierte Rest-Controller anstelle von Spring Data Rest-Repositorys verwendet), wurde die Anwendung in Entwicklungs- und Staging-Umgebungen ordnungsgemäß implementiert. Das Problem trat wahrscheinlich auf, als ich die Spring Data Rest-Repositorys hinzufügte, aber ich bin nicht 100% sicher, da ich nach einer Reihe anderer kleinerer Änderungen in der Staging-Umgebung implementiert habe.
Dies ist der Ausnahme-Stack-Trace:
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)
Dies ist die Hauptanwendungsklasse für das myapp-services
Projekt:
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);
}
}
wo eu.myapp.data
das Paket im myapp-data
Projekt enthielt als Maven Abhängigkeit definiert ist , die Definitionen von Entitäten und Repository-Klassen enthalten.
In meiner Service-Projektkonfiguration verwende ich Spring Security mit einem benutzerdefinierten UserDetailsService (weiß nicht, ob dies relevant sein könnte, .. es funktionierte in früheren Bereitstellungen, also ist es wahrscheinlich nicht).
Danke für Ihren Vorschlag (Ich sehe es erst jetzt, seit ich in den letzten Wochen Urlaub hatte). Am Ende habe ich beschlossen, den Dienst auch als eigenständige (Embedded Tomcat) Springboot-App in der Produktion zu implementieren, anstatt ihn auf der Tomcat-Instanz der Produktionsserver zu installieren. Da diese Lösung neben der Lösung meiner Ausnahme viele andere Vorteile hatte, entschloss ich mich, mich daran zu halten und das Problem nicht weiter zu untersuchen. In jedem Fall, da ich bei der Überprüfung, ob Ihre Lösung funktioniert, interessant bin, sobald ich etwas Zeit habe, werde ich es versuchen und lassen Sie wissen, ob es funktionierte. – chrx