[英]@InboundChannelAdapter in Spring-integration is not running continously?
我在 spring 雲數據流中工作,我有一個場景,比如從數據庫中讀取數據並使用 @InboundChannelAdapter 將數據發送到 kafka 主題
以下是我遵循的策略。
-> 如果列表為空,則創建通用列表以存儲對象
->如果列表有數據我不會輪詢
->我通過使用索引將值一一發送到kafka,然后我將刪除索引
如果我保留@Bean,它只會將列表中的第一個 object 插入到 kafka 主題。
{"id":101443442,"name":"Mobile1","price":8000}
如果我刪除@Bean,那么它會將所有空數據插入kafka。
{}
public static List<Product> products;
@Bean
public void initList() {
products = new ArrayList<>();
}
@Bean
@InboundChannelAdapter(channel = TbeSource.PR1)
public MessageSource<Product> addProducts() {
if (products.size() == 0) {
products.add(new Product(101443442, "Mobile1", 8000));
products.add(new Product(102235434, "book111", 6000));
}
MessageBuilder<Product> message = MessageBuilder.withPayload(products.get(0));
products.remove(0);
return message::build;
}
我究竟做錯了什么?
我需要通過從數據庫讀取來頻繁發送數據嗎?
真的不清楚你在問什么。
如果您談論 JDBC,那么您可以考慮使用來自數據流的現成應用程序的JDBC Source
。
如果您自己進行邏輯以從數據庫中獲取數據,您可以考慮使用來自JdbcPollingChannelAdapter
集成的@InboundChannelAdapter
,原因與 @InboundChannelAdapter 相同。
您的邏輯與該列表的 rest 不清楚。 在void
方法上看到@Bean
很奇怪。 如果您需要初始化該products
並從MessageSource
實現中獲取訪問權限,您只需執行private List<Product> products = new ArrayList<>();
. 將財產public
確實是一種不好的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.