私はJdbcPollingChannelAdapterを使用してデータベースをポーリングし、その結果をJmsSendingMessageHandlerを使用してActivemqキューにポストするためにバネ統合を使用しています。私はMappingJackson2MessageConverterを使用してjsonの文字列としてjdbcの結果をシリアライズしています。メッセージが送信されると、arraylistとして送信されます。一度に1つのメッセージのペイロードで1つのjson-serializedオブジェクトのみを送信することは可能ですか?例えば - これは私がそのようにSpring Integrationを使用して、メッセージペイロードを含む単一のjsonオブジェクト文字列を一度に送信しますか?
@JmsListener(destination = "${activemq.queue.name}")
public void receive(DomainObj obj)
春の統合の設定
@Configuration
public class SpringIntegrationConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(SpringIntegrationConfig.class);
@Value("${database.polling-interval.rate-in-milliseconds}")
private Long pollingRateInMilliSeconds;
@Value("${database.max-messages-per-poll}")
private Long maxMessagesPerPoll;
@Bean
public MessageChannel helloWorldChannel() {
return new DirectChannel();
}
@Bean
public PollerMetadata poller(PlatformTransactionManager transactionManager) {
PeriodicTrigger trigger = new PeriodicTrigger(pollingRateInMilliSeconds);
trigger.setFixedRate(true);
MatchAlwaysTransactionAttributeSource attributeSource = new MatchAlwaysTransactionAttributeSource();
attributeSource.setTransactionAttribute(new DefaultTransactionAttribute());
TransactionInterceptor interceptor = new TransactionInterceptor(transactionManager, attributeSource);
PollerMetadata poller = new PollerMetadata();
poller.setTrigger(trigger);
poller.setMaxMessagesPerPoll(maxMessagesPerPoll);
poller.setAdviceChain(Collections.singletonList(interceptor));
return poller;
}
@Bean
@InboundChannelAdapter(value = "helloWorldChannel", channel = "helloWorldChannel", poller = @Poller("poller"))
public MessageSource<?> helloWorldMessageSource(DataSource dataSource) {
JdbcPollingChannelAdapter adapter = new JdbcPollingChannelAdapter(dataSource, "select * from item where type = 2");
adapter.setUpdateSql("update item set type = 10 where id in (:id)");
adapter.setRowMapper(new ItemRowMapper());
adapter.setMaxRowsPerPoll(maxMessagesPerPoll.intValue());
return adapter;
}
@Bean
@ServiceActivator(inputChannel = "helloWorldChannel")
public MessageHandler jsmOutboundAdapter(JmsTemplate template, Queue queue, MessageConverter converter) {
template.setMessageConverter(converter);
JmsSendingMessageHandler handler = new JmsSendingMessageHandler(template);
handler.setDestination(queue);
return handler;
}
@Bean // Serialize message content to json using TextMessage
public MessageConverter jsonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
}
ありがとうございました。私は本当に助けに感謝します。 – HaloMediaz
私はそれを試しました。単一の結果が得られますが、オブジェクトはまだjson配列にシリアル化されています。結果をjsonオブジェクトにシリアル化することは可能ですか? – HaloMediaz
私のapoligies;それは常にリストです。あなたは '@ Transformer'をフローに追加することができます。' public Object transform(List