Apache 骆驼豆状态丢失

Apache camel bean state is lost

我有路线

    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,但在第二个循环中 由于某种原因,状态恢复正常。我做错了什么?

注释

这条路线,但是如果我将 process 变量设置为静态

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

其他注意事项

我正在使用

阿帕奇骆驼 3.10.0

spring-boot 2.5

更新 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))
       }
    }

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

你应该使用 .beanRef("name-of-the-bean", ....)