Java spring连接池在物理级别上是如何工作的?
例如,我有一个设置:Java spring连接池在物理级别上是如何工作的?,java,spring,Java,Spring,例如,我有一个设置: spring.datasource.maxActive=5 这是否意味着Spring启动后,池中已经创建了5个活动物理连接?或者它们只是物体 访问池后是否会创建与数据库的物理连接 如果所有5个连接都忙,连接池是否会创建新连接并将其放入池中 中间立场在哪里?如何计算游泳池的体积 每个连接池都有自己的配置选项。即使不同版本的连接池也可能有不同的选项。比如说,maxActive在DBCP 1.x中使用,在DBCP 2.x中被重命名为maxTotal 了解您正在使用的连接池对于正
spring.datasource.maxActive=5
每个连接池都有自己的配置选项。即使不同版本的连接池也可能有不同的选项。比如说,maxActive在DBCP 1.x中使用,在DBCP 2.x中被重命名为maxTotal 了解您正在使用的连接池对于正确配置它至关重要。某些设置可能会有不同的工作方式,并且这个问题没有通用的答案 对于您的特定情况,您使用的是HikariCP连接池。 HikariCP具有以下可用设置: 从源代码:
// Properties changeable at runtime through the HikariConfigMXBean
//
private volatile String catalog;
private volatile long connectionTimeout;
private volatile long validationTimeout;
private volatile long idleTimeout;
private volatile long leakDetectionThreshold;
private volatile long maxLifetime;
private volatile int maxPoolSize;
private volatile int minIdle;
private volatile String username;
private volatile String password;
// Properties NOT changeable at runtime
//
private long initializationFailTimeout;
private String connectionInitSql;
private String connectionTestQuery;
private String dataSourceClassName;
private String dataSourceJndiName;
private String driverClassName;
private String jdbcUrl;
private String poolName;
private String schema;
private String transactionIsolationName;
private boolean isAutoCommit;
private boolean isReadOnly;
private boolean isIsolateInternalQueries;
private boolean isRegisterMbeans;
private boolean isAllowPoolSuspension;
private DataSource dataSource;
private Properties dataSourceProperties;
private ThreadFactory threadFactory;
private ScheduledExecutorService scheduledExecutor;
private MetricsTrackerFactory metricsTrackerFactory;
private Object metricRegistry;
private Object healthCheckRegistry;
private Properties healthCheckProperties;
它不使用maxActive属性,因此您的问题不适用于此连接池
在您的情况下,可以删除此属性,因为com.zaxxer.hikari.HikariDataSource未使用它。每个连接池都以不同的方式管理连接。他们有不同的策略来扩展池或抛出没有可用连接的异常 通常(但不是规则):
了解适当的池大小是一个统计数据和可用资源的问题。同样,可以根据服务器上的使用模式和连接可用性增加或减少最大池大小。是否使用DBCP连接池?我在Spring Boot 2.0.com.zaxxer.hikari.HikariDataSource中默认使用HIKARIP?是!它是com.zaxxer.hikari.HikariDataSource。感谢Martin接受答案!我希望您能理解连接池是如何工作的,并有一天编写一个新的实现!谢谢你的回答!但这个问题更一般地涉及池的基本架构。看看我的问题。还有:Privet iz Moskvi:)tomcat的池架构是否与Hikaru的架构或DBCP如此不同?(例如)是的,它的源代码和实现完全不同。唯一常见的是接口。但接口不是实现:(实现是不同的,您可以检查两者的源代码。这是了解其工作原理的最佳方式。事实的最终来源:)但请注意,在主要版本之间,实现可能会发生根本性的变化。DBCP 2.x的实现方式与DBCP 1.x不同。我现在在纽约:)但感谢您的“女贞子”:)来自纽约的女贞子:)