Spring 集成 DSL 历史问题
Spring Integration DSL History issue
我必须动态设置流程。
示例:
@Component
@Slf4j
public class FTPFlow {
@Autowired
private IntegrationFlowContext integrationFlowContext;
@EventListener(ApplicationReadyEvent.class)
public void setup(){
integrationFlowContext.registration(flow()).register();
}
public IntegrationFlow flow() {
DefaultFtpSessionFactory defaultFtpSessionFactory = new DefaultFtpSessionFactory();
defaultFtpSessionFactory.setHost("localhost");
defaultFtpSessionFactory.setPort(252);
defaultFtpSessionFactory.setUsername("user");
defaultFtpSessionFactory.setPassword("password");
return IntegrationFlows.from(Ftp.inboundAdapter(defaultFtpSessionFactory).preserveTimestamp(true)
.localDirectory(new File("D:/tools/input"))
.regexFilter("yo.txt")
.remoteDirectory("/testing")
.deleteRemoteFiles(true),
e -> e.poller(Pollers.fixedDelay(10, TimeUnit.SECONDS)))
.transform((GenericTransformer<File, File>) file -> {
log.info("Dummy transformer. ");
return file;
})
.handle(o -> {
log.info("history {}", o.getHeaders());
})
.get();
}
}
springboot应用:
@SpringBootApplication
@EnableMessageHistory
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
headers 不包含历史记录,但如果我不使用 IntegrationContext 并直接在方法流上使用 @Bean
,那么我可以看到历史记录。
使用 IntegrationFlowContext
时是否必须启用历史记录?
其实是我自己发现的。只是为其他人添加答案
当您使用 IntegrationFlowContext
时,您必须提供 "id"
否则历史记录不会被保留。
integrationFlowContext.registration(flow()).id("tesflow").register();
我必须动态设置流程。
示例:
@Component
@Slf4j
public class FTPFlow {
@Autowired
private IntegrationFlowContext integrationFlowContext;
@EventListener(ApplicationReadyEvent.class)
public void setup(){
integrationFlowContext.registration(flow()).register();
}
public IntegrationFlow flow() {
DefaultFtpSessionFactory defaultFtpSessionFactory = new DefaultFtpSessionFactory();
defaultFtpSessionFactory.setHost("localhost");
defaultFtpSessionFactory.setPort(252);
defaultFtpSessionFactory.setUsername("user");
defaultFtpSessionFactory.setPassword("password");
return IntegrationFlows.from(Ftp.inboundAdapter(defaultFtpSessionFactory).preserveTimestamp(true)
.localDirectory(new File("D:/tools/input"))
.regexFilter("yo.txt")
.remoteDirectory("/testing")
.deleteRemoteFiles(true),
e -> e.poller(Pollers.fixedDelay(10, TimeUnit.SECONDS)))
.transform((GenericTransformer<File, File>) file -> {
log.info("Dummy transformer. ");
return file;
})
.handle(o -> {
log.info("history {}", o.getHeaders());
})
.get();
}
}
springboot应用:
@SpringBootApplication
@EnableMessageHistory
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
headers 不包含历史记录,但如果我不使用 IntegrationContext 并直接在方法流上使用 @Bean
,那么我可以看到历史记录。
使用 IntegrationFlowContext
时是否必须启用历史记录?
其实是我自己发现的。只是为其他人添加答案
当您使用 IntegrationFlowContext
时,您必须提供 "id"
否则历史记录不会被保留。
integrationFlowContext.registration(flow()).id("tesflow").register();