У меня следующие требования:
- Издатель JMS, который будет читать из таблиц БД каждые 30 секунд и создавать сообщение, которое будет размещено в очереди JMS
- Этот издатель JMS должен быть упакован как файл WAR, чтобы его можно было развернуть на сервере Tomcat
. Я создал издателя JMS, который идеально выполняет необходимую бизнес-обработку. Но я не уверен, как я могу запустить издателя из загрузочного приложения Spring, когда я упаковываю его как WAR и развертываю на Tomcat.
Мой logi c работает, когда я добавляю eventListner в код следующим образом :
@Component
@EnableJms
public class NotificationPublisherController {
@Autowired
private SqlQueriesDao sqlQueriesDao;
@Autowired
private JmsTemplate jmsTemplate;
@EventListener(ApplicationReadyEvent.class)
public void getExecutionStatusInfo() {
try {
while (true) {
Thread.sleep(3000);
//ExecutionStatus executionStatus = sqlQueriesDao.getAtlasFeedByStatus();
List<ExecutionStatus> executionStatusList = sqlQueriesDao.getAtlasFeedByStatus("SUCCESS");
for (ExecutionStatus executionStatus : executionStatusList) {
String msg = executionStatus.getCobId() + "|" + executionStatus.getFeedName() + "|"
+ executionStatus.getSkipFlag() + "|" + executionStatus.getBusinessDay() + "|"
+ executionStatus.getDayOfTheWeek()+ "|" +executionStatus.getSequenceNo()+"|"+executionStatus.getProcessedDttm()
+"|"+executionStatus.getSrcCobId();
// into a JMS TextMessage
System.out.println(msg);
jmsTemplate.send(new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
// TODO Auto-generated method stub
return session.createTextMessage(msg);
}
});
if (null != executionStatus.getFlowRunId() && !executionStatus.getFlowRunId().equalsIgnoreCase(""))
sqlQueriesDao.updateAtlasFeedDetails(executionStatus.getFlowRunId());
}
//count++;
}
} catch (JmsException e) {
if (e != null)
{
System.err.println("getLinkedException()=" + e.getMostSpecificCause());
System.err.println(e.getLocalizedMessage());
e.printStackTrace();
}
} catch (BeansException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Но это не позволяет мне создавать WAR, так как издатель работает в бесконечном l oop и не выходит во время процесса «mvn clean install»