繁体   English   中英

Spring Boot 1.0.0-RC4从多个EmbeddedServletContainerFactory实例开始

[英]Spring Boot 1.0.0-RC4 starts with multiple EmbeddedServletContainerFactory instances

我希望覆盖此处记录的默认EmbeddedServletContainerFactory,以便设置SSL。 旧版文档 (从RC1开始)一直覆盖自定义程序,并且在我今天进行升级之前一直有效,并按照新的约定更改了实现。

@Configuration
public class ContainerConfig {

@Bean
public EmbeddedServletContainerFactory servletContainer() {
  TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
  factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {

  @Override
  public void customize(Connector connector) {

    connector.setPort(8443);
    connector.setSecure(true);
    connector.setScheme("https");
    connector.setAttribute("keyAlias", "tomcat");
    connector.setAttribute("keystorePass", "changeit");
    try {
      connector.setAttribute("keystoreFile", ResourceUtils.getFile("src/ssl/tomcat.keystore").getAbsolutePath());
    } catch (FileNotFoundException e) {
      throw new IllegalStateException("Cannot load keystore", e);
    }
      connector.setAttribute("clientAuth", "false");
      connector.setAttribute("sslProtocol", "TLS");
      connector.setAttribute("SSLEnabled", true);
    }

  });

  factory.setSessionTimeout(10, TimeUnit.MINUTES);

  return factory;
}

Boot(EmbeddedServletContainerAutoConfiguration)中的源代码指示,如果确实找到了我的bean,它将不会注册默认值:

@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)

但是,它似乎仍在注册。 其他人有这个工作吗? 这是堆栈:

线程“主”中的异常org.springframework.context.ApplicationContextException:无法启动嵌入式容器。 嵌套异常是org.springframework.context.ApplicationContextException:由于多个EmbeddedServletContainerFactory bean而无法启动EmbeddedWebApplicationContext:org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.javaspring:135)上的servletContainer,tomcatEmbeddedServletContainerFactory。位于org.springframework.boot.SpringApplication.refresh(SpringApplication.java: 619)在org.springframework.boot.SpringApplication.run(SpringApplication.java:306)在org.springframework.boot.SpringApplication.run(SpringApplication.java:880)在org.springframework.boot.SpringApplication.run(SpringApplication.java) :869)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMeth com.intellij.rt.execution处java.lang.reflect.Method.invoke(Method.java:606)上的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)上的odAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) .application.AppMain.main(AppMain.java:120)由以下原因引起:org.springframework.context.ApplicationContextException:由于多个EmbeddedServletContainerFactory bean:org.springframework.boot.context.embedded.EmbeddedWebApplicationContext上的servletContainer,tomcatEmbeddedServletContainerFactory而无法启动EmbeddedWebApplicationContext。 org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158)的org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.Ref.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:190) ...另外12个

我创建了一个GitHub存储库 ,该存储库融合了Spring Boot项目中的Tomcat和Websocket示例,并应用了此配置。

这是(一种)错误( https://github.com/spring-projects/spring-boot/issues/479 )。 立即修复。 解决方法是使用EmbeddedServletContainerCustomizer而不是EmbeddedServletContainerFactory (就像原始问题的docs链接中一样)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM