我想配置我的自定义 PollerMetaData bean 以使用 JdbcPollingChannelAdapter 的 UPDATE 查询启用事务。我正在使用 Spring boot 和 Spring Data JPA 并启用所有自动配置。
@Configuration
public class PollerMetaDataConfigurer {
@Autowired
//edit
PlatformTransactionManager ptm;
@Bean("CustomPoller")
PollerMetadata getCustomPollermetaData(){
PollerMetadata transactionConfiguredPoller=new PollerMetadata();
TransactionInterceptor transactionInterceptor=new TransactionInterceptor();
transactionInterceptor.setTransactionManager(ptm);
List<Advice> pollerAdvice=new LinkedList<>();
//edit
pollerAdvice.add(transactionInterceptor);
transactionConfiguredPoller.setAdviceChain(pollerAdvice);
transactionConfiguredPoller.setTrigger(new PeriodicTrigger(2000));
return transactionConfiguredPoller;
}
}
这是我希望事务处理的集成代码。
@Configuration
@EnableIntegration
public class IntergrationMain{
@Bean
public MessageChannel aChannel() {
return new DirectChannel();
}
@Splitter(inputChannel = "inChannel", outputChannel = "outChannel")
public List<myEnity> splitter(Message message) {
}
@Bean
@InboundChannelAdapter(value = "inChannel", poller = @Poller(value="CustomPoller"))
public MessageSource<?> pollDbForQuery(DataSource dataSource) {
JdbcPollingChannelAdapter myAdapter = new JdbcPollingChannelAdapter(dataSource, SQL);
myAdapter.setRowMapper();
myAdapter.setUpdateSql("update query");
retrun adapter;
}
}
当前,事务拦截器在 UPDATE 查询已经执行后被调用。
编辑-我已将 transaction.interceptor 设置为 TRACE,我可以看到消息
| No need to create transaction for [org.springframework.integration.endpoint.AbstractPollingEndpoint$$Lambda$861/0x0000000800832520.call]: This method is not transactional.