При настройке DBCP2 бассейна и на основе documentation я заметил, что - есть конфигурация называется timeBetweenEvictionRunsMillis
, которая описана как:DBCP2 - Когда Idle соединение удаляется из пула
Количество миллисекунд, чтобы спать между пробеги незанятого объекта evictor thread. Когда неположительный, ни одна простаивающая тема evictor не будет запущена .
Его значение по умолчанию - -1
.
Означает ли это, что поток evictor никогда не будет работать в конфигурации по умолчанию? Затем, как применяется параметр конфигурации maxIdle
- пул должен выходить из простоя, если их количество больше maxIdle
.
Мне кажется очень запутанным, что конфигурация по умолчанию такова, что незанятые соединения никогда не выселяются.
Существует также другая конфигурация softMiniEvictableIdleTimeMillis
, которая, кажется, играет определенную роль в верхней части timeBetweenEvictionRunsMillis
.
Любые разъяснения в этом отношении окажут огромную помощь.
На данный момент я настраиваю пул, как показано ниже, поскольку моя цель - не иметь никаких простоя подключений в моем пуле слишком долго (это было необходимо, поскольку мы используем AWS RDS и, кажется, a weird issue с ним которые мы часто используем)
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl(properties.getProperty("app.mysql.url"));
dataSource.setUsername(properties.getProperty("app.mysql.username"));
dataSource.setPassword(properties.getProperty("app.mysql.password"));
dataSource.setMaxIdle(20);
dataSource.setMaxWaitMillis(20000); //wait 10 seconds to get new connection
dataSource.setMaxTotal(200);
dataSource.setMinIdle(0);
dataSource.setInitialSize(10);
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery("select 1");
dataSource.setValidationQueryTimeout(10); //The value is in seconds
dataSource.setTimeBetweenEvictionRunsMillis(600000); // 10 minutes wait to run evictor process
dataSource.setSoftMinEvictableIdleTimeMillis(600000); // 10 minutes wait to run evictor process
dataSource.setMinEvictableIdleTimeMillis(60000); // 60 seconds to wait before idle connection is evicted
dataSource.setMaxConnLifetimeMillis(600000); // 10 minutes is max life time
dataSource.setNumTestsPerEvictionRun(10);
Благодарим за подробную информацию. Эти незадействованные соединения в течение 10-20 минут окна - будут ли они повторно использоваться пулом соединений? Я предполагаю, что они будут повторно использованы. В вашем втором примере, когда вы говорите «Если время простоя превышает это» ... вы имеете в виду, что оно превышает 10000 + 30000? –
Спасибо, я прочитал ваше редактирование сейчас. Довольно ясно сейчас, –
@Wand Marker, пожалуйста. Что касается повторного использования соединения, если я правильно понял вопрос, конечно, пул будет их повторно использовать, если он им понадобится, и «таймер простоя» будет сброшен. –