java - 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))
}
}
解决方案
问题是您没有共享特定的 bean 实例,因为调用 bean(StateBean.class, ...) 应该创建所需类的 bean 的新实例
您应该使用类似 .beanRef("name-of-the-bean", ....)
推荐阅读
- crystal-reports - Crystal Report 部分详细信息不创建列
- c# - TakeLast 在 .net core 3.1 中无法按预期工作
- angular - 未定义的属性
- sql - postgresql 的“JOIN”处或附近的语法错误
- javascript - 在某个字符后将数组中的每个元素拆分为对象
- python - 如何连接 Numpy 的 ndarray 来存储对象?
- javascript - iOS13 getUserMedia 不适用于 chrome 和 edge
- c - 谁能告诉我为什么我得到一个分段错误(cs50替换)
- amazon-web-services - 如何实现 aws chime 实时与会者状态?
- python - C#程序无法识别python脚本中的配置文件