在发布之前,我在此上花费了很多时间…
我有一个可以很好地作为JAR运行的spring-boot应用程序,但是当我尝试将其转换为WAR时,无法部署它。
我尝试寻找规则来决定它是嵌入式的还是外部的Tomcat。
使用WEB-INF / lib和WEB-INF / lib提供的WAR看起来正确,并且没有明显放置的jar。
我的Application类扩展了SpringBootServletInitializer。调试时,此类将应用程序上下文类设置为AnnotationConfigEmbeddedWebApplicationContext.class …这是正确的吗?
尝试作为WAR进行部署时,是否应该期望看到 嵌入式 类正在加载?
我在用 :-
1)spring框架4.1.2.RELEASE 2)spring-boot 1.1.9.RELEASE 3)spring安全3.2.5.RELEASE 4)Tomcat 7.0.57
该应用程序同时使用WebMvc和WebSockets …
问候
我父母的POM有
<dependencyManagement> .... <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> .... </dependencyManagement>
我的POM包含以下弹簧引导工件。
<!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <!-- WebSocket Latest --> <!--<version>1.2.0.RC1</version>--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> <scope>provided</scope> </dependency> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- Spring Boot Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
这是通过-Ddebug作为WAR部署在Tomcat 7.0.57内的
抱歉这么多日志记录;-(
.... 123143 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.c.ConfigFileApplicationListener - Skipped config file 'classpath:/application.yaml' for profile resource not found 123143 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@54d9aaa1: startup date [Wed Dec 03 09:13:08 GMT 2014]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@2c6debf9 123190 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Bean factory for org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@54d9aaa1: org.springframework.beans.factory.support.DefaultListableBeanFactory@10dbb363: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,play.application,errorPageFilter]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@3d5e51e5 141940 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/E:/Software/Servers/apache-tomcat-7.0.57/webapps/ROOT/WEB-INF/lib/cf_shared-1.0-SNAPSHOT.jar!/spring/beanRefContext.xml] 142065 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/E:/Software/Servers/apache-tomcat-7.0.57/webapps/ROOT/WEB-INF/lib/cf_shared-1.0-SNAPSHOT.jar!/spring/globalApplicationContext.xml] 142174 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/E:/Software/Servers/apache-tomcat-7.0.57/webapps/ROOT/WEB-INF/lib/cf_shared-1.0-SNAPSHOT.jar!/spring/globalApplicationContext-configuration.xml] 142455 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.s.DefaultListableBeanFactory - Overriding bean definition for bean 'org.springframework.boot.autoconfigure.AutoConfigurationPackages': replacing [Generic bean: class [org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Generic bean: class [org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] 146518 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.s.DefaultListableBeanFactory - Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]] 162564 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'async' of type [class com.cf.play.config.Async$$EnhancerBySpringCGLIB$$dd119135] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 162939 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.s.c.ThreadPoolTaskExecutor - Initializing ExecutorService 'getAsyncExecutor' 162939 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'getAsyncExecutor' of type [class org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 162939 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.scheduling.annotation.ProxyAsyncConfiguration' of type [class org.springframework.scheduling.annotation.ProxyAsyncConfiguration$$EnhancerBySpringCGLIB$$7617ce05] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 164892 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration' of type [class org.springframework.security.config.annotation.configuration.ObjectPostProcessorConfiguration$$EnhancerBySpringCGLIB$$6c9aa01e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 165611 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'objectPostProcessor' of type [class org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 165642 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@41b21e0a' of type [class org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 167330 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'security.AuthenticationConfiguration' of type [class com.cf.play.config.Security$AuthenticationConfiguration$$EnhancerBySpringCGLIB$$f014df73] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 168111 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration' of type [class org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration$$EnhancerBySpringCGLIB$$fe30e14e] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 169814 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'securityProperties' of type [class org.springframework.boot.autoconfigure.security.SecurityProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 170861 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.boot.autoconfigure.security.AuthenticationManagerConfiguration' of type [class org.springframework.boot.autoconfigure.security.AuthenticationManagerConfiguration$$EnhancerBySpringCGLIB$$538cd08c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 171392 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/E:/Software/Servers/apache-tomcat-7.0.57/webapps/ROOT/WEB-INF/lib/cf_shared-1.0-SNAPSHOT.jar!/spring/globalApplicationContext-configuration.xml] 171502 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/E:/Software/Servers/apache-tomcat-7.0.57/webapps/ROOT/WEB-INF/lib/cf_shared-1.0-SNAPSHOT.jar!/spring/globalApplicationContext-security.xml] 171908 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.s.c.SpringSecurityCoreVersion - You are running with Spring Security Core 3.2.5.RELEASE 171939 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.s.c.SecurityNamespaceHandler - Spring Security 'config' module version is 3.2.5.RELEASE 172267 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/E:/Software/Servers/apache-tomcat-7.0.57/webapps/ROOT/WEB-INF/lib/cf_shared-1.0-SNAPSHOT.jar!/spring/globalApplicationContext.xml] 172377 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@7b50e9c5: startup date [Wed Dec 03 09:13:57 GMT 2014]; root of context hierarchy 172705 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.e.EhCacheManagerFactoryBean - Initializing EhCache CacheManager 174923 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor 175048 [RMI TCP Connection(2)-127.0.0.1] INFO o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 175048 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.2.1 created. 175064 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.simpl.RAMJobStore - RAMJobStore initialized. 175064 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'CAS ProxyGrantingTicketStorage Scheduler' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. 175064 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'CAS ProxyGrantingTicketStorage Scheduler' initialized from an externally provided properties instance. 175064 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1 175080 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.core.QuartzScheduler - JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@24917741 175111 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147483647 175111 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.s.quartz.SchedulerFactoryBean - Starting Quartz Scheduler now 175111 [RMI TCP Connection(2)-127.0.0.1] INFO org.quartz.core.QuartzScheduler - Scheduler CAS ProxyGrantingTicketStorage Scheduler_$_NON_CLUSTERED started. 175330 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'globalParentApplicationContext' of type [class org.springframework.context.support.GenericXmlApplicationContext] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 175392 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration' of type [class org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration$$EnhancerBySpringCGLIB$$61dc3bd3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 176486 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration' of type [class org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration$$EnhancerBySpringCGLIB$$f4cff750] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 176658 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'methodSecurityMetadataSource' of type [class org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 176736 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - Bean 'metaDataSourceAdvisor' of type [class org.springframework.security.access.intercept.aopalliance.MethodSecurityMetadataSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 176767 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@10a32452] 176783 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.e.AnnotationConfigEmbeddedWebApplicationContext - Using ApplicationEventMulticaster [org.springframework.context.event.SimpleApplicationEventMulticaster@774aa541] 323644 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.e.t.TomcatEmbeddedServletContainerFactory - Code archive: E:\Software\Servers\apache-tomcat-7.0.57\webapps\ROOT\WEB-INF\lib\spring-boot-1.1.9.RELEASE.jar 323644 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.e.t.TomcatEmbeddedServletContainerFactory - Code archive: E:\Software\Servers\apache-tomcat-7.0.57\webapps\ROOT\WEB-INF\lib\spring-boot-1.1.9.RELEASE.jar 323644 [RMI TCP Connection(2)-127.0.0.1] DEBUG o.s.b.c.e.t.TomcatEmbeddedServletContainerFactory - None of the document roots [src/main/webapp, public, static] point to a directory and will be ignored. 323660 [RMI TCP Connection(2)-127.0.0.1] INFO o.s.b.c.e.t.TomcatEmbeddedServletContainerFactory - Server initialized with port: 8080 Dec 03, 2014 9:16:29 AM org.apache.catalina.core.StandardService startInternal INFO: Starting service Tomcat Dec 03, 2014 9:16:29 AM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.57 Dec 03, 2014 9:16:29 AM org.apache.catalina.loader.WebappLoader startInternal SEVERE: LifecycleException java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedWebappClassLoader at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:260) at org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:721) at org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:582) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5357) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 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)
好的,我发现了问题。…配置!
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application .showBanner(true) .parent(Global.class) .child(applicationClass) .profiles("container") ; }
应该 …
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application .showBanner(true) .parent(Global.class) .sources(applicationClass) .profiles("container") ; }
…我用child()代替了source()…
感谢您的时间!