首页 > 解决方案 > Apache骆驼豆状态丢失

问题描述

我有路线

    from("timer://poller?fixedRate=true&period=1500")
            .routeId("db-poller")
            .filter(method(StateBean.class, "doProcess"))
            .to("direct:ready-to-process").end();

     from("direct:ready-to-process")
            .bean(StateBean.class, "setDoProcess(false)");

我的 StateBean 看起来像这样

@Component
public class StateBean {

    private final AtomicBoolean process =
            new AtomicBoolean(true);

    public boolean doProcess() {
        return process.get();
    }

    public void setDoProcess(boolean state) {
        process.set(state);
    }

}

我的期望是 bean 将进程状态保留为 false,但在第二个循环中,由于某种原因状态恢复为 true。我做错了什么?

笔记

process但是,如果我将变量设为静态,则此路线将按预期工作

有没有办法让它在没有静态字段process或没有外部源(即数据库)的情况下工作

其他说明

我正在使用

阿帕奇骆驼 3.10.0

弹簧靴 2.5

更新 NO.1

为了完整的解决方案,感谢 Luca Burgazzoli,我做了这样的事情

@Component
public class MyRoute extends RouteBuilder {

    private StateBean state;

    @Autowired
    public MyRoute(StateBean state) {
        this.state = state;
    }

    @Override
    public void configure() {
    
    from("timer://poller?fixedRate=true&period=1500")
            .routeId("db-poller")
            .filter(exchange -> state.doProcess())
            .to("direct:ready-to-process").end();

     from("direct:ready-to-process")
            .process(exchange -> state.setDoProcess(false))
            .process(...)
            .process(...)
            .split(...)
            .streaming()
            .to(...)
            .process(exchange ->  state.setDoProcess(true))
       }
    }

标签: javaspring-bootapache-camel

解决方案


问题是您没有共享特定的 bean 实例,因为调用 bean(StateBean.class, ...) 应该创建所需类的 bean 的新实例

您应该使用类似 .beanRef("name-of-the-bean", ....)


推荐阅读