Spring Boot 为什么光数据源在这种情况下泄漏?

k4emjkb1  于 2023-01-17  发布在  Spring
关注(0)|答案(1)|浏览(134)

我使用Spring框架(使用JPA)。URL中的ID被解析为动态创建和使用数据源。数据源使用咖啡因进行缓存,但即使在过期时间之后也没有从内存中释放。这导致内存泄漏。过期时间之后,数据源将从缓存中删除,但没有从内存中释放。即使删除缓存以允许使用一次数据源,也会发生内存泄漏。是否有任何方法可以缓存数据源?
下面是部分代码。

private HikariDataSource getDataSourceRdsLocation(RdsLocationEntity rdsLocationEntity){
        HikariConfig config = new HikariConfig();
        config.setAllowPoolSuspension(true);
        config.setJdbcUrl("jdbc:mysql://"+rdsLocationEntity.getServerReadOnly()+"/"+rdsLocationEntity.getDatabaseName());
        config.setUsername("");
        config.setPassword("");

        config.setPoolName(rdsLocationEntity.getName());
        config.setMaximumPoolSize(10);
        config.setMinimumIdle(1);
        config.setIdleTimeout(3600000);
        config.setMaxLifetime(7200000);
        config.setConnectionTimeout(500);

        return new HikariDataSource(config);
    }
new CaffeineCache(cache.getCacheName(), Caffeine.newBuilder().recordStats()
                                .removalListener((key, value, cause) -> {
                                    if (cause.wasEvicted() && value instanceof HikariDataSource ds) {
                                        ds.close();
                                    }
                                })
                                .expireAfterWrite(cache.getExpiredAfter(), cache.getTimeUnit())
                                .maximumSize(cache.getMaximumSize())
                                .build()
hyrbngr7

hyrbngr71#

对于{1..1000}中的i;做jmap -历史记录:实时pid〉out3.log ;组织。apache。http。实现。连接。池化HttpClient连接管理out3.log;日期;/bin/睡眠5;完成〉log5.txt|尾部-f log5.txt

相关问题