2017-01-24 11 views
0

У меня есть приложение, которое запускается через несколько баз данных, и для каждой базы данных выполняется выбор запроса на всех таблицах и выгружает его в hasoop.Пул соединений jdbc с использованием ThreadpoolExecutor весной загрузки

Мой проект заключается в том, чтобы создать одно соединение с источником данных за раз и использовать пул соединений, полученный для запуска выборочных запросов в нескольких потоках. После этого для этого источника данных закройте соединение и создайте новый.

Вот код Асинхронного

@Component 
public class MySampleService { 

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

    @Async 
    public Future<String> callAsync(JdbcTemplate template, String query) throws InterruptedException { 

try { 
     jdbcTemplate.query(query); 
     //process the results 
     return new AsyncResult<String>("success"); 
     } 
catch (Exception ex){ 
     return new AsyncResult<String>("failed"); 
    }  
} 

Здесь вызывающий

public String taskExecutor() throws InterruptedException, ExecutionException { 
     Future<String> asyncResult1 = mySampleService.callAsync(jdbcTemplate,query1); 
     Future<String> asyncResult2 = mySampleService.callAsync(jdbcTemplate,query2); 
     Future<String> asyncResult3 = mySampleService.callAsync(jdbcTemplate,query3); 
     Future<String> asyncResult4 = mySampleService.callAsync(jdbcTemplate,query4); 

     LOGGER.info(asyncResult1.get()); 
     LOGGER.info(asyncResult2.get()); 
     LOGGER.info(asyncResult3.get()); 
     LOGGER.info(asyncResult4.get()); 

     //now all threads finished, close the connection 
     jdbcTemplate.getConnection().close(); 
    } 

мне интересно, если это правильный способ сделать это или делать какое-либо, выходящее/оптимизированное решение, что из коробки Мне не хватает. Я не могу использовать spring-data-jpa, так как мои запросы сложны.

Благодаря

ответ

0

Spring Boot docs: соединения с базой данных

производства также может быть автоматически конфигурируется с помощью пула DataSource. Вот алгоритм для выбора конкретного реализации:

  • Мы предпочитаем объединение DataSource Tomcat для его производительности и параллелизма, так что, если доступно мы всегда выбираем его.
  • В противном случае, если HikariCP доступен, мы будем использовать его.
  • Если у вас нет пула данных Tomcat и HikariCP, и если Commons DBCP будет доступен, мы его будем использовать, но мы не рекомендуем его в производстве.
  • Наконец, если Commons DBCP2 доступен, мы будем использовать его.

Если вы используете пружинный загрузочный стартер-JDBC или пружинно-загрузочные-стартер-данных JPA-стартеры «» вы автоматически получаете зависимость к TOMCAT-JDBC.

Таким образом, вы должны быть обеспечены разумными значениями по умолчанию.

+0

Я думаю, вы неправильно поняли мой вопрос. Я знаю, что мы получаем пул данных. но мой вопрос заключается в использовании этого объединенного источника данных для обработки нескольких таблиц в настоящее время. –