Вызовите запрос MyBatis как часть пользовательского DefaultShutdownStrategy в Apache Camel - PullRequest
0 голосов
/ 27 ноября 2018

Доброе время суток!

В нашем проекте Spring Boot + Apache Camel мы используем компонент mybatis для получения и обработки данных.Работает как шарм.

У нас также есть собственная реализация DefaultShutdownStrategy, где мы переопределяем метод protected boolean doShutdown(..) для определения некоторых пользовательских действий при завершении работы.

Одним из этих действий будеточистить некоторые записи в базе данных, другими словами выполнить простой запрос UPDATE для одной строки в таблице базы данных.Я хочу использовать компонент mybatis, но не могу узнать, как это сделать в «сырой» Java (в моей реализации метода doShutdown(..)), так как мы используем mybatis в контексте маршрута через .to("mybatis: ... ").

даже возможно?Или мне нужно инициализировать Mybatis снова MyBatis с помощью Spring (что представляется излишним только для одного запроса, так как этот компонент уже запущен в Apache Camel)?

1 Ответ

0 голосов
/ 27 ноября 2018

Следуя предложению, приведенному в комментариях, я получил его с помощью ProducerTemplate :

package com.mypackage;

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.impl.DefaultShutdownStrategy;
import org.apache.camel.spi.RouteStartupOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * Custom implementation for gracious shutdown.
 */
@Component
public class MyCustomShutdownStrategy extends DefaultShutdownStrategy {

  private static final Logger LOGGER = LoggerFactory.getLogger(MyCustomShutdownStrategy.class);

  @Autowired
  public MyCustomShutdownStrategy() {}

  @Override
  protected boolean doShutdown(
      CamelContext context,
      List<RouteStartupOrder> routes,
      long timeout,
      TimeUnit timeUnit,
      boolean suspendOnly,
      boolean abortAfterTimeout,
      boolean forceShutdown)
      throws Exception {

    boolean shutdownComplete =
        super.doShutdown(
            context, routes, timeout, timeUnit, suspendOnly, abortAfterTimeout, forceShutdown);

    if (shutdownComplete) {
      clearSomeEntries(context);
    }

    return shutdownComplete;
  }

  private void clearSomeEntries(CamelContext context) {
    LOGGER.info("Do some clean-up...");

    ProducerTemplate template = context.createProducerTemplate();
    template.setDefaultEndpointUri("mybatis:removeDataFromDatabase?statementType=Update");
    template.sendBody("hi");
  }
}
...