使用 Apache-Camel Spring 启动程序时无法扩展 SpringBootServletInitializer
Can not extend SpringBootServletInitializer while using Apache-Camel Spring starter
我正在尝试按照他们的文档从 Spring 引导应用程序创建可部署的 *.war。我在扩展 SpringBootServletInitializer 时遇到问题。它给我一个编译时错误 The type org.springframework.web.WebApplicationInitializer cannot be resolved. It is indirectly referenced from required .class files
。但是在 Maven 依赖目录中我可以清楚地看到 SpringBootServletInitializer.class
存在于 spring-boot-1.5.10.RELEASE
jar 中。它是作为 camel-spring-boot-starter
依赖项的一部分下载的。
我的主class
@SpringBootApplication
@EnableAutoConfiguration
public class SpringCamelApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(SpringCamelApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCamelApplication.class);
}
@Bean
public RestConfiguration restConfiguration()
{
RestConfiguration restconfig=new RestConfiguration();
restconfig.setPort(8081);
restconfig.setComponent("restlet");
//restconfig.setHost("localhost");
restconfig.setContextPath("/api");
restconfig.setBindingMode("auto");
return restconfig;
}
}
我的pom.xml
<modelVersion>4.0.0</modelVersion>
<groupId>com.camel</groupId>
<artifactId>spring-camel</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-camel</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<camel.version>2.21.0</camel.version>
<spring.version>2.0.0.RELEASE</spring.version>
<start-class>com.camel.springcamel.SpringCamelApplication</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-restlet</artifactId>
<version>${camel.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我哪里错了?我注意到如果我使用 spring-boot-starter-web
依赖项,那么这不会给我任何错误,但我已经有 camel-spring-boot-starter
,所以我不需要 spring-boot-starter-web
。谁能解释这里到底出了什么问题?提前致谢。
我找到了我的解决方案,这肯定是我使用的 spring-boot 版本的问题,低于 2 的版本工作正常,hot 是否有时间研究为什么版本 2.。 无效。
您需要更新您的 camel 版本以获得 Spring Boot 2 兼容性。
Spring Boot 2 is supported since Camel 2.22 (summer 2018). Previous versions of Camel support Spring Boot 1.x only.
从 Spring Boot 2 开始,spring-boot-starter-web
不再是 Spring Starters 中的传递依赖,因为添加了 spring-boot-starter-webflux
用于 HTTP 和 WebSockets 的反应性实现.由第三方或您自己决定选择哪种实施方式。
我正在尝试按照他们的文档从 Spring 引导应用程序创建可部署的 *.war。我在扩展 SpringBootServletInitializer 时遇到问题。它给我一个编译时错误 The type org.springframework.web.WebApplicationInitializer cannot be resolved. It is indirectly referenced from required .class files
。但是在 Maven 依赖目录中我可以清楚地看到 SpringBootServletInitializer.class
存在于 spring-boot-1.5.10.RELEASE
jar 中。它是作为 camel-spring-boot-starter
依赖项的一部分下载的。
我的主class
@SpringBootApplication
@EnableAutoConfiguration
public class SpringCamelApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(SpringCamelApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCamelApplication.class);
}
@Bean
public RestConfiguration restConfiguration()
{
RestConfiguration restconfig=new RestConfiguration();
restconfig.setPort(8081);
restconfig.setComponent("restlet");
//restconfig.setHost("localhost");
restconfig.setContextPath("/api");
restconfig.setBindingMode("auto");
return restconfig;
}
}
我的pom.xml
<modelVersion>4.0.0</modelVersion>
<groupId>com.camel</groupId>
<artifactId>spring-camel</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-camel</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<camel.version>2.21.0</camel.version>
<spring.version>2.0.0.RELEASE</spring.version>
<start-class>com.camel.springcamel.SpringCamelApplication</start-class>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-restlet</artifactId>
<version>${camel.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
我哪里错了?我注意到如果我使用 spring-boot-starter-web
依赖项,那么这不会给我任何错误,但我已经有 camel-spring-boot-starter
,所以我不需要 spring-boot-starter-web
。谁能解释这里到底出了什么问题?提前致谢。
我找到了我的解决方案,这肯定是我使用的 spring-boot 版本的问题,低于 2 的版本工作正常,hot 是否有时间研究为什么版本 2.。 无效。
您需要更新您的 camel 版本以获得 Spring Boot 2 兼容性。
Spring Boot 2 is supported since Camel 2.22 (summer 2018). Previous versions of Camel support Spring Boot 1.x only.
从 Spring Boot 2 开始,spring-boot-starter-web
不再是 Spring Starters 中的传递依赖,因为添加了 spring-boot-starter-webflux
用于 HTTP 和 WebSockets 的反应性实现.由第三方或您自己决定选择哪种实施方式。