Мне нужно прочитать сообщения от оракула AQ. Я использую Spring boot 2.2.0.RELEASE. В настоящее время я могу читать сообщения, только когда мое весеннее загрузочное приложение уже запущеноНо если AQ уже поставил сообщения в очередь, они не удаляются. Я не могу понять, что не так.
Мой класс конфигурации:
@Configuration
@EnableJms
public class BridgeConfiguration {
@Bean
DataSource dataSource() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser("user");
dataSource.setPassword("pwd");
dataSource.setURL("jdbc:oracle:thin:host:1521/sid");
dataSource.setImplicitCachingEnabled(true);
dataSource.setFastConnectionFailoverEnabled(true);
return dataSource;
}
@Bean
// @Qualifier(value = "aqconnectionFactory")
public QueueConnectionFactory aqconnectionFactory() throws Exception {
return AQjmsFactory.getQueueConnectionFactory(dataSource());
}
@Bean
public PlatformTransactionManager transactionManager() throws Exception {
JmsTransactionManager jmsTransactionManager = new JmsTransactionManager();
jmsTransactionManager.setConnectionFactory(aqconnectionFactory());
return jmsTransactionManager;
}
@Bean
public JmsListenerContainerFactory jmsListenerContainerFactory() throws Exception {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(aqconnectionFactory());
factory.setTransactionManager(transactionManager());
factory.setSessionTransacted(true);
return factory;
}
}
Мой класс слушателя
@Component
public class AqDaoImpl {
@JmsListener(destination = "IBMBRIDGE_OUT", concurrency = "3-10")
public void getMessage(String message) {
try{
System.out.println(message + " received on " + Thread.currentThread().getName());
}catch (Exception e ){
System.out.println(e);
}
}
}
Я ожидаю, что смогу получитьуже в очереди сообщения. Но если я выключаю свое приложение, ставлю в очередь некоторые сообщения в oracle aq, а затем включаю мое приложение, оно не может получить это сообщение, сообщения остаются в oracle aq.