DBCP2 풀을 구성하는 동안, 그리고 documentation에 따라 나는 것으로 나타났습니다 -로 설명 timeBetweenEvictionRunsMillis
라는 구성이 :DBCP2 - 유휴 연결은 풀에서 제거되면
사이 잠 (밀리 초) 유휴 오브젝트 축출 기 스레드의 실행. 양수가 아닌 경우 유휴 오브젝트 축출 기 스레드는 실행되지 않습니다. .
기본값은 -1
입니다.
축출 기 스레드가 절대로 기본 구성에서 실행되지 않는다는 것을 의미합니까? 그런 다음 구성 매개 변수는 어떻게 적용됩니까 maxIdle
- 풀은 유휴 연결 수가 maxIdle
보다 큰 경우 유휴 연결을 제거해야합니다.
유휴 연결이 절대 퇴장되지 않도록 기본 구성이 매우 혼란스러워 보입니다.
timeBetweenEvictionRunsMillis
상단에 몇 가지 역할을하는 것으로 보이는 또 다른 구성 인 softMiniEvictableIdleTimeMillis
이 있습니다.
이 점에 대한 설명은 엄청난 도움이 될 것입니다.
당분간 나는 내 풀에서 너무 오래 유휴 연결이없는 것을 목표로 (내 생각에는 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을 초과합니까? –
고마워, 너 지금 편집을 읽었 어. 꽤 깨끗한 지금 –
@ 바드 마커, 여러분 환영합니다. 연결을 재사용하는 것에 관해서는, 내가 올바르게 질문을 이해한다면, 풀이 필요하다면 풀이 재사용되고 '유휴 타이머'가 리셋됩니다. –