当前位置: 首页 > 知识库问答 >
问题:

为什么骆驼上下文无法解决Spring启动脂肪罐内的路线?

毋城
2023-03-14

以下是spring boot fat jar camel项目结构:

/opt/java/spring/boot/fat/jar/camel/project/
    ├─ menus.json
    ├─ proxy.json
    └─ chorke─boot─launch-1.0.00-SNAPSHOT.jar!
        ├─ META-INF/
        ├─ org/springframework/boot/loader/
        ├─ com/chorke/boot/launch/
        ├─ application.properties
        ├─ application.yml
        ├─ log4j.xml
        └─ lib/
            ├─ annotations-2.0.0.jar
            ├─ camel-core-2.15.2.jar
            ├─ camel-hl7-2.15.2.jar
            ├─ camel-mina2-2.15.2.jar
            ├─ camel-spring-2.15.2.jar
            ├─ camel-spring-javaconfig-2.15.2.jar
            ├─ chorke-boot-jproxy-1.0.00-SNAPSHOT.jar!
            │   ├─ META-INF/
            │   │   ├─ camel/
            │   │   │   └─ applicationContext-camel.xml
            │   │   └─ property/
            │   └─ com/chorke/boot/jproxy/
            │
            ├─ chorke-boot-webapp-1.0.00-SNAPSHOT.jar
            ├─ chorke-comn-spring-1.0.00-SNAPSHOT.jar
            ├─ commons-collections-3.2.1.jar
            ├─ spring-context-4.1.6.RELEASE.jar
            ├─ spring-core-4.1.6.RELEASE.jar
            ├─ spring-webmvc-4.1.6.RELEASE.jar
            ├─ ..more..more..and..more..jar
            ├─ tomcat-embed-core-8.0.23.jar
            └─ zuul-core-1.0.28.jar

以下是路线:

package com.chorke.boot.jproxy.route;

import org.apache.camel.builder.RouteBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ProxyRoute extends RouteBuilder {

    private static final Logger log =LoggerFactory.getLogger(ProxyRoute.class);

    @Override
    public void configure() throws Exception {

        from("mina2:tcp://0.0.0.0:22210?codec=#hl7codec&sync=true").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                String body = exchange.getIn().getBody(String.class);
                log.info("Port-Forwarded body:\n {}", body);
            }
        }).to("mina2:tcp://192.168.0.10:22210?codec=#hl7codec&sync=true").end();

        from("mina2:tcp://0.0.0.0:22211?codec=#hl7codec&sync=true").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                String body = exchange.getIn().getBody(String.class);
                log.info("Port-Forwarded body:\n {}", body);
            }
        }).to("mina2:tcp://192.168.0.11:22211?codec=#hl7codec&sync=true").end();

    }
}

下面是骆驼上下文配置:

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

    <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
        <property name="locations">
            <list>
                <value>classpath:/META-INF/property/mina2.properties</value>
            </list>
        </property>
    </bean>

    <camel:camelContext id="camelContext">
        <camel:packageScan>
            <camel:package>com.chorke.boot</camel:package>
            <camel:includes>**.route.*</camel:includes>
        </camel:packageScan>
    </camel:camelContext>

</beans>

在制作脂肪罐之前,这些骆驼路线可以很好地工作。当Spring boot生成fat jar文件时,camel软件包扫描程序无法动态解析这些路由。是spring boot的缺陷还是camel软件包扫描器对fat jar文件的限制?

对于这种情况,你有什么解决方案吗?

共有1个答案

郑乐池
2023-03-14

spring fatjar使用不同的类加载,因此不受支持/工作。

您可以使用spring componentScan而不是packageScan,并使用spring@Component注释声明路由生成器类。

请参阅使用conextScan部分:http://camel.apache.org/spring.html

 类似资料:
  • 我需要在Gradle项目中创建fat jar,其中测试的主要方法是src/test。现在我在线程“main”java中遇到了当我运行由“gradle bootJar”创建的fat jar时。 我的格拉德尔: 我的Spring。xml: 例外情况: 之前遵循gradle影罐的代码运行良好,直到我将ASHOJ添加到项目中 运行“gradle shadowJar”时出现错误 我在某处发现暗影罐和Spri

  • 我的Apache骆驼项目开始有一个相当好的结构,但我陷入了困境,因为我的routeContext中的路由无限执行。我的所有路由都使用SQL组件,我希望所有路由只执行一次。 我发现,当我的routeContext中有两条路由时,两条路由都只执行一次,但是一旦我添加了第三条路由(不管第三条路由是什么),camel就开始无限执行所有路由。我所有的路由都导致sql插入,因此相同的路由运行多次会导致重复键错

  • 为了优化Docker层,我尝试将我们的30M Spring Boot fat jar拆分为2M应用程序。jar和2800万libs。罐子 我可以使用爆炸模式,但我更喜欢使用2罐,因为它简化了一些事情,如部署,脚本等。 我的问题是,当我把lib分离出来时,我无法让启动器找到它们。无论是在jar模式还是爆炸模式(有两个dir)下,我都会 我在以下所有情况下都会得到这个: 知道我怎么才能让它工作吗?

  • 我正在用Spring Boot,Jpa和MySQL连接器编写java控制台应用程序。我怎样才能轻松地排除所有不必要的脂肪从我的脂肪罐?

  • 我使用JarSplice创建了一个胖jar文件,但是当我启动它时,我得到一个窗口(大小可以),它在半秒后关闭。。。 在“addjars”部分中,我添加了从Eclipse导出的jar文件,以及我正在使用的所有库jar。在本机部分,我只为lwjgl添加Windows本机。我想我写了正确的主类。 我做错了什么?我怎样才能解决这个问题? 注意:我使用的是最新版本的eclipse和jdk。

  • 我将Gradle用于一个简单的Java项目,并希望生成一个fat JAR,其中还包含源代码。 我准备了一个示例存储库:https://github.com/szarnyasg/gradle-shadowjar-source.我尝试了这个配置: 我可以通过以下方式构建此功能: 这将在目录中生成两个JAR文件: -没有源的胖JAR -一个(仅)包含源的JAR Gradle Shadow插件的文档说明