Приложение Spring Boot не запускается после обновления с 1.3.3 до 1.3.5. Пружина не может запустить встроенный контейнер (Tomcat 8) и следующее сообщение об ошибке отображается:Встраиваемый tomcat не запускается при обновлении с Spring Boot 1.3.3 -> 1.3.5
org.springframework.context.ApplicationContextException: Невозможно запустить встроенный контейнер; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем «embeddedServletContainerFactory»: Ошибка создания бина; Вложенное исключение - org.springframework.beans.BeanInstantiationException: Не удалось создать экземпляр [wad.config.HttpsConfiguration $ 1]: конструктор по умолчанию не найден; вложенное исключение составляет java.lang.NoSuchMethodException: wad.config.HttpsConfiguration $ 1()
В основном это сообщение об ошибке говорит, что не может создать embeddedServletContainerFactory
, но это не для меня ясно, что [wad.config.HttpsConfiguration$1]
относится.. Сам класс конфигурации Java находится в пакете wad.config
и имеет имя HttpsConfiguration
. Я попытался добавить пустой конструктор в мой HttpsConfiguration.java
, но это не помогло.
Вот соответствующие части моей POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
...
</dependencies>
Мой класс Применение:
@EntityScan(
basePackageClasses = {Application.class, Jsr310JpaConverters.class}
)
@SpringBootApplication
@Import({DevProfile.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
И вот моя конфигурация порта перенаправляют из 8080 -> 8443 (настраивается с помощью application.properties):
@Configuration
public class HttpsConfiguration {
@Value("${server.port}")
private int httpsPort;
@Value("${server.port.http}")
private int httpPort;
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
// redirect from (http) port to (https) if https is enabled.
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(httpPort);
connector.setSecure(false);
connector.setRedirectPort(httpsPort);
return connector;
}
application.properties конфигурации:
...
#Actuator port
management.port = 9001
#HTTPS port
server.port=8443
#HTTP port
server.port.http=8080
#Enable SSL
server.ssl.enabled=true
...
Update:
Издание может быть воспроизведена с Spring загрузки 1.3.5 проекта сконфигурированной с указанным выше POM, application.properties и HttpSecurity & классов приложений.