【问题标题】:jdbc connection pool using ThreadpoolExecutor in spring boot在spring boot中使用ThreadpoolExecutor的jdbc连接池
【发布时间】:2017-01-24 00:28:55
【问题描述】:

我有一个通过多个数据库运行的应用程序,并且每个数据库对所有表运行选择查询并将其转储到 hadoop。

我的设计是一次创建一个数据源连接,并使用获得的连接池在多个线程中运行选择查询。完成此数据源后,关闭连接并创建新连接。

这是异步代码

@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,因为我的查询很复杂。

谢谢

【问题讨论】:

    标签: spring-boot spring-jdbc threadpoolexecutor spring-async


    【解决方案1】:

    Spring Boot docs:

    生产数据库连接也可以使用 池化数据源。这是选择特定算法的算法 实现:

    • 我们更喜欢 Tomcat 池数据源,因为它的性能和并发性,所以如果可用,我们总是选择它。
    • 否则,如果 HikariCP 可用,我们将使用它。
    • 如果 Tomcat 池数据源和 HikariCP 均不可用且 Commons DBCP 可用,我们将使用它,但我们 不推荐在生产环境中使用。
    • 最后,如果 Commons DBCP2 可用,我们将使用它。

    如果您使用 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa ‘starters’ 你会自动得到一个 对 tomcat-jdbc 的依赖。

    所以应该为您提供合理的默认值。

    【讨论】:

    • 我想你误解了我的问题。我知道我们得到了池化数据源。但我的问题是目前使用这个池化数据源来处理多个表。
    猜你喜欢
    • 2019-03-15
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2022-06-29
    • 2017-04-27
    • 2015-02-20
    • 2018-09-24
    相关资源
    最近更新 更多