gpt4 book ai didi

java - 在 Executors.withFixedSizePool 中创建固定大小的数据库连接

转载 作者:行者123 更新时间:2023-12-02 12:42:42 25 4
gpt4 key购买 nike

我正在构建一个使用中央数据库的多线程系统。

我遇到的问题是我想创建固定大小的数据库连接。

我用过Executors.newFixedSizePool创建最大数量的池线程等于 MAX_N .

我正在使用 execute 执行我的线程ExecutorService 提供的功能.

我希望以这样的方式构建我的系统:只要该池线程仍然处于 Activity 状态,池中的每个池线程都拥有与数据库的单个连接。所以,当我 execute我的线程池中只有 MAX_N到数据库的连接。另外,从Executors.newFixedSizePool开始注意池线程的数量,如果其中一些线程因异常而停止,则会创建新的线程,我希望我的数据库连接也保持同样的状态。

所以我正在寻找的是使用 Executors.newFixedSizePool 创建固定大小的池线程,每个池线程都有自己的数据库连接。如果池线程终止,则此连接将被关闭,并且如果构造了新的池线程,则也会构造新连接并将其链接到此池线程。

我用谷歌搜索了一种方法,但没有找到任何有用的东西。有正确的方法吗?

最佳答案

您应该使用 Jdbc 连接池。然后从代码中任何需要连接到数据库的地方,只需从池中获取到数据库的连接(连接池将负责维护到数据库的所需连接数)

例如,如果您使用 BoneCP:

import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

/**
* <dependency>
* <groupId>com.jolbox</groupId>
* <artifactId>bonecp</artifactId>
* <version>0.8.0.RELEASE</version>
* </dependency>
*/
public class BoneCPexample {

public static final int TOTAL_CONNECTIONS_TO_DATABASE = 20;

public static void main(String[] args) throws SQLException {
BoneCPexample boneCPexample = new BoneCPexample();
boneCPexample.doTheWork();
}

private void doTheWork() throws SQLException {


String jdbcUrlString = "jdbc:postgresql://localhost/test_database"; // jdbc:postgresql://host:port/database
BoneCPConfig bcpConfig = new BoneCPConfig();
bcpConfig.setJdbcUrl(jdbcUrlString);
bcpConfig.setUsername("postgres");
bcpConfig.setPassword("mi-password");
bcpConfig.setPartitionCount(1);
bcpConfig.setMinConnectionsPerPartition(TOTAL_CONNECTIONS_TO_DATABASE);
bcpConfig.setMaxConnectionsPerPartition(TOTAL_CONNECTIONS_TO_DATABASE);
bcpConfig.setConnectionTimeoutInMs(1 * 1000);
bcpConfig.setDefaultAutoCommit(false);
bcpConfig.setConnectionTestStatement("select now()");
bcpConfig.setIdleConnectionTestPeriodInMinutes(5);


BoneCP boneCP = new BoneCP(bcpConfig);
Connection connection = boneCP.getConnection();

Statement statement = connection.createStatement();
statement.execute("select * from mytable");

}
}

关于java - 在 Executors.withFixedSizePool 中创建固定大小的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44868731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com