- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将一个简单的 Spring Boot 应用程序转换为 war 文件以部署到我的 tomcat 服务器,但我一直收到此错误:
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'errorPageFilter': Initialization of bean failed; nested exception is java.lang.ClassCastException: org.springframework.boot.context.web.ErrorPageFilter cannot be cast to org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
当我将这个 Spring Boot 应用程序作为 jar 运行时,它可以完美运行,但如果我创建一个 war,它就会给我错误。据我所知,我完全遵循了 Spring 指南:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file
这是我的应用程序类:
@Configuration
@EnableWebMvc
@ComponentScan({"XXX"})
@EnableAutoConfiguration
@EnableConfigurationProperties
@SpringBootApplication
@EnableAsync
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
这是我的build.gradle:
buildscript {
ext {
springBootVersion = '1.2.6.RELEASE'
}
repositories {
maven { url "http://repo.spring.io/libs-release" }
maven { url "http://repo.spring.io/libs-snapshot" }
mavenCentral()
mavenLocal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'war'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'application'
war {
archiveName 'hello-gradle.war'
}
configurations {
providedRuntime
}
compileJava {
targetCompatibility = 1.8
sourceCompatibility = 1.8
}
mainClassName = "XXX.Application"
repositories {
mavenCentral()
maven { url "http://repo.spring.io/libs-release" }
maven { url "http://repo.spring.io/libs-snapshot" }
maven { url "http://maven.springframework.org/milestone" }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.2'
compile 'com.fasterxml.jackson.core:jackson-core:2.5.3'
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-tomcat'
compile 'org.springframework.boot:spring-boot-starter-security'
compile 'org.springframework.boot:spring-boot-starter-actuator'
compile 'org.springframework.boot:spring-boot-starter-aop'
compile 'org.mongodb:mongo-java-driver:3.1.0'
compile 'org.springframework.data:spring-data-mongodb:1.8.0.RELEASE'
compile("org.springframework:spring-context-support")
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
task wrapper(type: Wrapper) {
gradleVersion = '2.8'
}
这是我的 catalina.log:
> 12-Dec-2015 14:53:54.921 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployWAR Deployment of web
> application archive C:\Tomcat8\webapps\hello-gradle.war has finished
> in 4,900 ms 12-Dec-2015 14:53:54.921 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deploying web
> application directory C:\Tomcat8\webapps\docs 12-Dec-2015 14:53:54.993
> INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of
> web application directory C:\Tomcat8\webapps\docs has finished in 72
> ms 12-Dec-2015 14:53:54.993 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deploying web
> application directory C:\Tomcat8\webapps\examples 12-Dec-2015
> 14:53:55.239 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of
> web application directory C:\Tomcat8\webapps\examples has finished in
> 246 ms 12-Dec-2015 14:53:55.239 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deploying web
> application directory C:\Tomcat8\webapps\host-manager 12-Dec-2015
> 14:53:55.262 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of
> web application directory C:\Tomcat8\webapps\host-manager has finished
> in 23 ms 12-Dec-2015 14:53:55.262 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deploying web
> application directory C:\Tomcat8\webapps\manager 12-Dec-2015
> 14:53:55.283 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of
> web application directory C:\Tomcat8\webapps\manager has finished in
> 21 ms 12-Dec-2015 14:53:55.284 INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deploying web
> application directory C:\Tomcat8\webapps\ROOT 12-Dec-2015 14:53:55.316
> INFO [localhost-startStop-1]
> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of
> web application directory C:\Tomcat8\webapps\ROOT has finished in 32
> ms 12-Dec-2015 14:53:55.328 INFO [main]
> org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler
> ["http-apr-8080"] 12-Dec-2015 14:53:55.337 INFO [main]
> org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler
> ["ajp-apr-8009"] 12-Dec-2015 14:53:55.340 INFO [main]
> org.apache.catalina.startup.Catalina.start Server startup in 5354 ms
> 12-Dec-2015 14:54:25.834 INFO
> [ContainerBackgroundProcessor[StandardEngine[Catalina]]]
> org.apache.catalina.startup.HostConfig.undeploy Undeploying context
> [/hello-gradle] 12-Dec-2015 14:54:25.847 SEVERE
> [ContainerBackgroundProcessor[StandardEngine[Catalina]]]
> org.apache.catalina.startup.ExpandWar.deleteDir
> [C:\Tomcat8\webapps\hello-gradle\WEB-INF\lib] could not be completely
> deleted. The presence of the remaining files may cause problems
> 12-Dec-2015 14:54:25.848 SEVERE
> [ContainerBackgroundProcessor[StandardEngine[Catalina]]]
> org.apache.catalina.startup.ExpandWar.deleteDir
> [C:\Tomcat8\webapps\hello-gradle\WEB-INF] could not be completely
> deleted. The presence of the remaining files may cause problems
> 12-Dec-2015 14:54:25.848 SEVERE
> [ContainerBackgroundProcessor[StandardEngine[Catalina]]]
> org.apache.catalina.startup.ExpandWar.deleteDir
> [C:\Tomcat8\webapps\hello-gradle] could not be completely deleted. The
> presence of the remaining files may cause problems 12-Dec-2015
> 14:54:25.849 SEVERE
> [ContainerBackgroundProcessor[StandardEngine[Catalina]]]
> org.apache.catalina.startup.ExpandWar.delete
> [C:\Tomcat8\webapps\hello-gradle] could not be completely deleted. The
> presence of the remaining files may cause problems 12-Dec-2015
> 14:54:25.851 INFO [localhost-startStop-2]
> org.apache.catalina.startup.HostConfig.deployDirectory Deploying web
> application directory C:\Tomcat8\webapps\hello-gradle 12-Dec-2015
> 14:54:27.196 INFO [localhost-startStop-2]
> org.apache.catalina.startup.HostConfig.deployDirectory Deployment of
> web application directory C:\Tomcat8\webapps\hello-gradle has finished
> in 1,345 ms 12-Dec-2015 14:54:35.176 INFO [http-apr-8080-exec-12]
> org.apache.catalina.startup.HostConfig.undeploy Undeploying context
> [/hello-gradle] 12-Dec-2015 14:54:35.203 INFO [http-apr-8080-exec-12]
> org.apache.catalina.startup.HostConfig.deployWAR Deploying web
> application archive C:\Tomcat8\webapps\hello-gradle.war 12-Dec-2015
> 14:54:39.295 SEVERE [http-apr-8080-exec-12]
> org.apache.catalina.core.ContainerBase.addChildInternal
> ContainerBase.addChild: start:
> org.apache.catalina.LifecycleException: Failed to start component
> [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/hello-gradle]]
> at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
> at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
> at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
> at
> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
> at
> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:466)
> at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1583)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497) at
> org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
> at
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
> at
> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
> at
> org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1460)
> at
> org.apache.catalina.manager.HTMLManagerServlet.upload(HTMLManagerServlet.java:288)
> at
> org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:209)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:136)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
> at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)
> at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)
> at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
> at
> org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
> at
> org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:745) Caused by:
> org.springframework.context.ApplicationContextException: Unable to
> start embedded container; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'errorPageFilter': Initialization of bean
> failed; nested exception is java.lang.ClassCastException:
> org.springframework.boot.context.web.ErrorPageFilter cannot be cast to
> org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
> at
> org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
> at
> org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:133)
> at
> org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:124)
> at
> org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:81)
> at
> org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
> at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5244)
> at
> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
> ... 45 more Caused by:
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'errorPageFilter': Initialization of bean
> failed; nested exception is java.lang.ClassCastException:
> org.springframework.boot.context.web.ErrorPageFilter cannot be cast to
> org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
> at
> org.springframework.boot.context.embedded.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:209)
> at
> org.springframework.boot.context.embedded.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:165)
> at
> org.springframework.boot.context.embedded.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:160)
> at
> org.springframework.boot.context.embedded.ServletContextInitializerBeans.addAdaptableBeans(ServletContextInitializerBeans.java:143)
> at
> org.springframework.boot.context.embedded.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:74)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getServletContextInitializerBeans(EmbeddedWebApplicationContext.java:234)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.selfInitialize(EmbeddedWebApplicationContext.java:221)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.access$000(EmbeddedWebApplicationContext.java:84)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext$1.onStartup(EmbeddedWebApplicationContext.java:206)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:162)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
> ... 55 more Caused by: java.lang.ClassCastException:
> org.springframework.boot.context.web.ErrorPageFilter cannot be cast to
> org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
> at
> com.futureprocessing.spring.ContainerConfiguration$1.customize(ContainerConfiguration.java:34)
> at
> org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor.postProcessBeforeInitialization(EmbeddedServletContainerCustomizerBeanPostProcessor.java:67)
> at
> org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor.postProcessBeforeInitialization(EmbeddedServletContainerCustomizerBeanPostProcessor.java:54)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
> ... 71 more
>
> 12-Dec-2015 14:54:39.321 SEVERE [http-apr-8080-exec-12]
> org.apache.catalina.startup.HostConfig.deployWAR Error deploying web
> application archive C:\Tomcat8\webapps\hello-gradle.war
> java.lang.IllegalStateException: ContainerBase.addChild: start:
> org.apache.catalina.LifecycleException: Failed to start component
> [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/hello-gradle]]
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:729)
> at
> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
> at
> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
> at
> org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945)
> at
> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:466)
> at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1583)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497) at
> org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
> at
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
> at
> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
> at
> org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1460)
> at
> org.apache.catalina.manager.HTMLManagerServlet.upload(HTMLManagerServlet.java:288)
> at
> org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:209)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:136)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
> at
> org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)
> at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)
> at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
> at
> org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
> at
> org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:745)
>
> 12-Dec-2015 14:54:39.327 INFO [http-apr-8080-exec-12]
> org.apache.catalina.startup.HostConfig.deployWAR Deployment of web
> application archive C:\Tomcat8\webapps\hello-gradle.war has finished
> in 4,123 ms
确实说错误发生在我名为 ContainerConfiguration.java
的 java 文件中:
@Configuration
public class ContainerConfiguration {
@Bean
EmbeddedServletContainerCustomizer containerCustomizer(
//all taken from the application.properties file
@Value("${keystore.file}") String keystoreFile,
@Value("${server.port}") final String serverPort,
@Value("${keystore.pass}") final String keystorePass)
throws Exception {
// This is boiler plate code to setup https on embedded Tomcat
// with Spring Boot:
final String absoluteKeystoreFile = new File(keystoreFile)
.getAbsolutePath();
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
tomcat.addConnectorCustomizers(connector -> {
connector.setPort(Integer.parseInt(serverPort));
connector.setSecure(true);
connector.setScheme("https");
Http11NioProtocol proto = (Http11NioProtocol) connector
.getProtocolHandler();
proto.setSSLEnabled(true);
proto.setKeystoreFile(absoluteKeystoreFile);
proto.setKeystorePass(keystorePass);
proto.setKeystoreType("JKS");
proto.setKeyAlias("abcd");
});
}
};
}
}
错误在这一行:
tomcat.addConnectorCustomizers(connector -> {
connector.setPort(Integer.parseInt(serverPort));
connector.setSecure(true);
connector.setScheme("https");
我不明白 errorPageFilter
是如何转换为 TomcatEmbeddedServletContainerFactory
的?
有谁知道我该如何解决这个错误?
编辑:
我还创建了一个简单的 SpringBoot 测试应用程序来演示此错误,您可以在这里找到它:https://github.com/Winghin2517/testSpringBootTomcat
github repo中只有两个类:
如果您注释掉 ContainerConfiguration 并构建一个 war 文件,然后将其上传到 tomcat 服务器,它会完美运行。如果您取消注释 ContainerConfiguration 并构建 war 文件并上传它,您将收到错误。
最佳答案
您正在尝试使用您的定制器来定制 SSL 连接。如果您启动嵌入式 tomcat 服务器,它是 100% 合法的。所以流程如下:
来自EmbeddedServletContainerCustomizer
的JavaDocs
Strategy interface for customizing auto-configured embedded servlet containers. Any beans of this type will get a callback with the container factory before the container itself is started, so you can set the port, address, error pages etc.
相反,您不能在已经运行的 tomcat 上自定义任何这些东西。
想象一下,如果您可以选择更改已经运行的 tomcat 的端口/地址,只需向其部署 war 文件,您可能会面临什么样的安全问题。
如果你真的需要自定义ssl连接器,你需要深入到tomcat的xml配置。
可以找到一个很棒而简单的指南 here
关于java - tomcat 上的 Spring Boot war 文件 : errorPageFilter cannot be cast to TomcatEmbeddedServletContainerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240159/
我很确定我不会是第一个被这个绊倒的人,但我找不到答案。这是作业。 class Tier{} class Fisch extends Tier{} class Vogel extends Tier{}
在接收器开发人员指南中如下: Applications running on the Google Cast receiver device (receiver applications) are a
最近我制作了一个自定义本地 Flask 网站,用于从本地设备转换到连接到我的电视的 RPi4。有一个 GUI它也可以通过 GET 请求控制,这是转换工作的主要方式,实际上是通过 GET 请求将数据从
最近我因为某些原因重置了我的路由器,所以当我尝试将它连接到 chromecast 时,Chromecast 没有在其列表中列出我的 wifi 名称。 之前它工作正常,所以我选择其他并手动输入我的网络名
做这样的 Actor 阵容的好方法是什么? seq { yield (box "key", box "val") } |> Seq.cast 因为这看起来非常难看: seq { yield (box
我继承的遗留 Web 应用程序是在经典 ASP 中为新西兰乐施会定制编写的,它在用户提交的输入上运行字符串替换,删除字符串“cast”,大概是因为 cast 函数。 然而,这意味着我们的参与者都不能拥
我去了三星网站并下载了 Media Control SDK 包。当我在我的 Galaxy S3 Android 4.3 上使用 AllShare Cast 视频播放器时,我的智能电视(在同一网络中)出
如何在 BigQuery 中查看 INT64 的二进制表示形式?将其转换为 BYTES 类型也可以。 最佳答案 正如@Elliot Brossard 所述,INT64 如何执行是一个实现问题。类型表示
Google 的文档要求我们设置自己的网络服务器来托管 receiver.html。 是否有任何人都可以使用的默认公共(public) chrome-cast 接收器? 我只需要非常基本的接收器,与
我在 Eclipse 3.6 (Helios) 中运行某人的代码时遇到问题。代码是用 OpenJDK 7 编写的。我运行的是 Windows 7,我必须为它安装 Java 7。我之前使用的是 Java
所以我有一些 COM 类型,它们的名称很难记住、又长又笨重,所以如果可以避免的话,我宁愿在从对象进行转换时不必键入它们。使用 Seq.cast 它将推断所需的类型并根据需要进行强制转换。 这是一个用
假设您不关心编译器和机器的转换风格,以下之间是否存在明显差异: #include #include #include static int64_t tosigned (void *p) {
我的测试类 XString 有两个转换运算符。但是编译器不会为 fooA 使用显式转换 operator const wchar_t*()。为什么? class XString { public:
我有以下代码: T imageCollectionItem; // This checks if image actually exists, if it doesn't it gets the ne
这有点假设,因为我不太担心性能 - 只是想知道一般来说哪个选项实际上最快/最有效,或者是否没有任何区别。 假设我有以下支持重载的访问者模板代码: #define IMPLEMENT_VISITOR_W
我目前正在存储复选框的真/假状态。在注册表中检查值以在下次加载表单时重置。 加载表单时,我获取值并像这样设置复选框。 string value = (string)Registry.GetValue(
enum Gender { Male, Female } var k = new[] { Gender.Male }.Cast().ToList().Cast().ToList(); //alrigh
我正在按照 https://codelabs.developers.google.com/codelabs/cast-receiver#0 上的教程构建一个 chrome cast 自定义接收器。我无
我看不懂以下作品 SELECT price, CAST(price AS DECIMAL(10,2)) FROM orders; 但是更新失败: UPDATE orders SET price = C
在 Cast v3 中,如何手动更改“停止转换”按钮的颜色? 我可以为其他所有内容更改转换对话框或媒体路由器的样式,但“停止转换”按钮似乎会根据背景颜色切换为黑色/蓝色。 我的主题:
我是一名优秀的程序员,十分优秀!