Как запустить JMS Publisher из загрузочного веб-приложения Spring - PullRequest
0 голосов
/ 09 июля 2020

У меня следующие требования:

  1. Издатель JMS, который будет читать из таблиц БД каждые 30 секунд и создавать сообщение, которое будет размещено в очереди JMS
  2. Этот издатель 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»

...