Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 骆驼不是春天开始的_Spring_Maven_Spring Mvc_Tomcat_Apache Camel - Fatal编程技术网

Spring 骆驼不是春天开始的

Spring 骆驼不是春天开始的,spring,maven,spring-mvc,tomcat,apache-camel,Spring,Maven,Spring Mvc,Tomcat,Apache Camel,我可以使用maven中的Camel-maven插件(mvn-Camel:run)运行我的Camel应用程序。读取camel-context.xml文件并正确启动我的路由 当我试图在春天执行这些骆驼路线时,我的问题就出现了。当spring启动时,我看不到任何来自Camel的日志,就像我直接运行Camel插件时一样。我也没有任何证据表明任何与骆驼有关的事情已经开始。成功运行应用程序所缺少的配置是什么?我目前正试图通过一个嵌入式tomcat实例来运行它(参见下面的mvn配置文件)。我可以想象,为了让s

我可以使用maven中的Camel-maven插件(mvn-Camel:run)运行我的Camel应用程序。读取camel-context.xml文件并正确启动我的路由

当我试图在春天执行这些骆驼路线时,我的问题就出现了。当spring启动时,我看不到任何来自Camel的日志,就像我直接运行Camel插件时一样。我也没有任何证据表明任何与骆驼有关的事情已经开始。成功运行应用程序所缺少的配置是什么?我目前正试图通过一个嵌入式tomcat实例来运行它(参见下面的mvn配置文件)。我可以想象,为了让spring找到驼峰上下文,我需要做一些独特的事情

谢谢你的帮助

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>---</groupId>
    <artifactId>---</artifactId>
    <version>1.0.6-SNAPSHOT</version>
</parent>

<artifactId>---</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging>

<properties>
    <jacoco.minimum.code.coverage>0.8</jacoco.minimum.code.coverage>
    <packaging.type>war</packaging.type>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <org.apache.camel.version>2.16.0</org.apache.camel.version>
</properties>

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-csv</artifactId>
    </dependency>


    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>2.19.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-aws</artifactId>
        <version>2.19.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>2.19.2</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-maven-plugin</artifactId>
            <version>2.19.2</version>
        </plugin>
    </plugins>
</build>


<profiles>
    <!-- Default build profile for generating war -->
    <profile>
        <id>war</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <packaging.type>war</packaging.type>
            <log.dir>${catalina.base}/logs</log.dir>
            <!-- updates bootstrap.properties -->
            <config.override.path>file:${catalina.base}/conf</config.override.path>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <descriptor>/src/main/resources/deployablecontent.xml</descriptor>
                        <tarLongFileMode>posix</tarLongFileMode>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

            </plugins>
        </build>
    </profile>

    <!-- Build profile for stand-alone java application with embedded Tomcat 
        Container -->
    <profile>
        <id>embedded</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <packaging.type>jar</packaging.type>
            <log.dir>logs</log.dir>
            <!-- updates bootstrap.properties -->
            <config.override.path>./conf</config.override.path>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.camel</groupId>
                    <artifactId>camel-maven-plugin</artifactId>
                    <version>2.19.2</version>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
位于resources/META-INF/spring/中的My camel-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:util="http://www.springframework.org/schema/util"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:camel="http://camel.apache.org/schema/spring" xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
                    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
                    ">


<camel:camelContext id="camel">

    <camel:routeBuilder ref="PriorityCodeSourcesUpdaterRouteBuilder"/>

    <camel:endpoint id="incomingEndpoint" uri="">
        <camel:property key="accessKey" value=""/>
        <camel:property key="secretKey" value="RAW()"/>
        <camel:property key="region" value=""/>
        <camel:property key="deleteAfterRead" value="false"/>
    </camel:endpoint>
    <camel:endpoint id="outgoingEndpoint" uri="file://#{systemProperties['java.io.tmpdir']}">
        <camel:property key="fileName" value="deadBeefName"/>
        <camel:property key="readLock" value="markerFile "/>
        <!-- We need a customer idempotentKey because all files sent to this endpoint have the same fileName. -->
        <!-- This will prevent camel from thinking that it has already consumed the file. -->
        <!--<camel:property key="idempotentKey" value="3"/>-->
    </camel:endpoint>

</camel:camelContext>


<bean id="PriorityCodeSourcesUpdaterRouteBuilder" class=".....PriorityCodeSourcesUpdaterRouteBuilder">
    <property name="incomingEndpoint" ref="incomingEndpoint" />
    <property name="outgoingEndpoint" ref="outgoingEndpoint" />
</bean>


TL;医生:

尝试将
camel-spring-boot-starter
依赖项添加到POM文件中,使用
@Component
注释标记您的路径,并添加
@springboot-application
类以启动与camel绑定的spring上下文


通读你的文件我猜你在用Spring Boot,对吧

如果是这样,最好在POM中具有以下依赖项:

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot BOM -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Camel BOM -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-dependencies</artifactId>
            <version>${camel.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
然后这些路由将自动启动。要使主线程保持阻塞状态,以便Camel保持运行,请包括spring boot starter web依赖项,或者将Camel.springboot.main run controller=true添加到application.properties或application.yml文件中

中有更多的信息和示例


干杯

TL;医生:

尝试将
camel-spring-boot-starter
依赖项添加到POM文件中,使用
@Component
注释标记您的路径,并添加
@springboot-application
类以启动与camel绑定的spring上下文


通读你的文件我猜你在用Spring Boot,对吧

如果是这样,最好在POM中具有以下依赖项:

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot BOM -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Camel BOM -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-dependencies</artifactId>
            <version>${camel.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
然后这些路由将自动启动。要使主线程保持阻塞状态,以便Camel保持运行,请包括spring boot starter web依赖项,或者将Camel.springboot.main run controller=true添加到application.properties或application.yml文件中

中有更多的信息和示例


干杯

根据要求,下面是我们在Camel项目中使用的Camel-Spring设置的简化版本。使用了Spring Boot(它提供的好东西太好了,我不能忽视),我们还使用了
web
starter。既然你正在使用战争包装,这对你来说应该不是问题

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <artifactId>stackoverflow</artifactId>
    <groupId>sandbox</groupId>
    <version>1.0-SNAPSHOT</version>
    <modelVersion>4.0.0</modelVersion>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>2.19.2</version>
        </dependency>
    </dependencies>
</project>
src/main/resources/application.properties(说明如何将配置值传递给路由定义):

src/main/resources/log4j.properties(主要是为了让您可以在日志中看到您的路线开始):

src/main/java/stackoverflow/TestApp.java:

package stackoverflow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestApp {
    public static void main(String[] args) {
        SpringApplication.run(TestApp.class, args);
    }
}
TestApp类启动应用程序,并一直运行直到停止(它启动嵌入式Tomcat服务器)。路由在应用程序启动时被发现并启动

此设置更喜欢Java配置而不是XML,但如果您仍然喜欢XML,则可以使用TestApp上的
@ImportResource
注释导入配置。您还可以将XML配置的类自动关联到路由定义中


如果您对此设置有任何疑问,请告诉我。

根据要求,下面是我们在Camel项目中使用的Camel-Spring设置的简化版本。使用了Spring Boot(它提供的好东西太好了,我不能忽视),我们还使用了
web
starter。既然你正在使用战争包装,这对你来说应该不是问题

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <artifactId>stackoverflow</artifactId>
    <groupId>sandbox</groupId>
    <version>1.0-SNAPSHOT</version>
    <modelVersion>4.0.0</modelVersion>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>2.19.2</version>
        </dependency>
    </dependencies>
</project>
src/main/resources/application.properties(说明如何将配置值传递给路由定义):

src/main/resources/log4j.properties(主要是为了让您可以在日志中看到您的路线开始):

src/main/java/stackoverflow/TestApp.java:

package stackoverflow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestApp {
    public static void main(String[] args) {
        SpringApplication.run(TestApp.class, args);
    }
}
TestApp类启动应用程序,并一直运行直到停止(它启动嵌入式Tomcat服务器)。路由在应用程序启动时被发现并启动

此设置更喜欢Java配置而不是XML,但如果您仍然喜欢XML,则可以使用TestApp上的
@ImportResource
注释导入配置。您还可以将XML配置的类自动关联到路由定义中


如果您对此设置有任何疑问,请告诉我。

您是否需要
camel-spring-javaconfig
Maven依赖项来启用
RouteBuilder
类的自动发现?让我来研究一下这个快速方法。我认为这不是必需的。我在没有额外依赖性的示例项目中看到了这一点。我的项目在我添加它时也能工作。你是对的,它不能。只有在使用Spring引导时才需要它,并且
RouteBuilder
被注释为Spring
@组件
。这就是我们在构建SpringCamel应用程序时选择的方法。您是否也考虑过这种方法?您的方法是否允许使用上下文或spring xml文件来注入端点/其他组件?您是否需要
camel-spring-javaconfig
Maven依赖项来启用
RouteBuilder
类的自动发现?让我来研究一下这种快速方法。我不认为这是必需的。我在没有额外依赖性的示例项目中看到了这一点。我的项目在我添加它时也能工作。你是对的,它不能。只有在使用Spring引导时才需要它,并且
RouteBuilder
被注释为Spring
@组件log4j.rootLogger=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %c:%L - %m%n
package stackoverflow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestApp {
    public static void main(String[] args) {
        SpringApplication.run(TestApp.class, args);
    }
}