当配置spring jpa数据源的线程池失效后如何手动处理

使用了spring jpa 作为数据管理插件,主要是因为前人留下,使用方便。

在使用的时候发现了一个奇怪的问题,只要项目一启动,数据库线程池连接就耗尽。

不用多想是线程池管理出问题了,工程里使用了多个数据库。

查找了下质料,spring jpa 使用的是Hikari作为线程池管理的,在默认的情况下是启动10个线程池连接。

问题就在这里,我这里大概有5个库,并且都分读写,那么启动后就是100个线程池。大概这样,启动了其他服务就容易出现了线程池不足。

查询了很多的资料,可以通过配置进行修改控制,可是怎么修改yml的配置,就是不生效,不知为何?

跟了下代码发现配置读取有要求,也懒得新增了。

 

    public HikariConfig() {
        this.dataSourceProperties = new Properties();
        this.healthCheckProperties = new Properties();
        this.minIdle = -1;
        this.maxPoolSize = -1;
        this.maxLifetime = MAX_LIFETIME;
        this.connectionTimeout = CONNECTION_TIMEOUT;
        this.validationTimeout = VALIDATION_TIMEOUT;
        this.idleTimeout = IDLE_TIMEOUT;
        this.initializationFailTimeout = 1L;
        this.isAutoCommit = true;
     // 通过环境变量来读取配置 String systemProp
= System.getProperty("hikaricp.configurationFile"); if (systemProp != null) { this.loadProperties(systemProp); } }

 

通过配置文件的设置

    public HikariConfig(Properties properties) {
        this();
        PropertyElf.setTargetFromProperties(this, properties);
    }

    public HikariConfig(String propertyFileName) {
        this();
        this.loadProperties(propertyFileName);
    }

 

 

无赖之下,只能是代码手动配置了。

 

public DataSource dataSourceRead() {
    HikariConfig config = getReadConfig();
    HikariDataSource ds = new HikariDataSource(config);
    return ds;
}

 

public HikariConfig getReadConfig(){
        HikariConfig config = new HikariConfig();
        DbUtils.initDbPool(config);
        config.setPoolName("Hikari read Db");
        return  config;
    }   

 public static void initDbPool(HikariConfig config) {
        long timeOut = 60L * 1000L;
        config.setIdleTimeout(timeOut);
        config.setMinimumIdle(0);
        config.setMaximumPoolSize(5);
    }

代码内容很简单。

posted @ 2022-01-13 14:35  Annkiny  阅读(193)  评论(0编辑  收藏  举报

福建C# .net  技术群