{"record":{"id":"9ecd603839f59833","repo":"alibaba/druid","slug":"maxevictableidletimemillis-must-be-grater-than-min-9ecd60","errorCode":null,"errorMessage":"maxEvictableIdleTimeMillis must be grater than minEvictableIdleTimeMillis","messagePattern":"maxEvictableIdleTimeMillis must be grater than minEvictableIdleTimeMillis","errorType":"exception","errorClass":"SQLException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java","lineNumber":735,"sourceCode":"\n            if (maxActive <= 0) {\n                throw new IllegalArgumentException(\"illegal maxActive \" + maxActive);\n            }\n\n            if (maxActive < minIdle) {\n                throw new IllegalArgumentException(\"illegal maxActive \" + maxActive);\n            }\n\n            if (getInitialSize() > maxActive) {\n                throw new IllegalArgumentException(\"illegal initialSize \" + this.initialSize + \", maxActive \" + maxActive);\n            }\n\n            if (timeBetweenLogStatsMillis > 0 && useGlobalDataSourceStat) {\n                throw new IllegalArgumentException(\"timeBetweenLogStatsMillis not support useGlobalDataSourceStat=true\");\n            }\n\n            if (maxEvictableIdleTimeMillis < minEvictableIdleTimeMillis) {\n                throw new SQLException(\"maxEvictableIdleTimeMillis must be grater than minEvictableIdleTimeMillis\");\n            }\n\n            if (keepAlive && keepAliveBetweenTimeMillis <= timeBetweenEvictionRunsMillis) {\n                throw new SQLException(\"keepAliveBetweenTimeMillis must be greater than timeBetweenEvictionRunsMillis\");\n            }\n\n            if (this.driverClass != null) {\n                this.driverClass = driverClass.trim();\n            }\n\n            initFromSPIServiceLoader();\n\n            resolveDriver();\n\n            initCheck();\n\n            this.netTimeoutExecutor = new SynchronousExecutor();\n","sourceCodeStart":717,"sourceCodeEnd":753,"githubUrl":"https://github.com/alibaba/druid/blob/fa8dc9912637a2f729eef9f55356621fec18d40e/core/src/main/java/com/alibaba/druid/pool/DruidDataSource.java#L717-L753","documentation":"SQLException thrown during init() when maxEvictableIdleTimeMillis < minEvictableIdleTimeMillis. The evictor uses min as the soft floor and max as the hard ceiling for idle connection eviction; an inverted relationship (max < min) would make eviction logic contradictory, so it is rejected. (Note the message typo 'grater'.)","triggerScenarios":"init() with maxEvictableIdleTimeMillis strictly less than minEvictableIdleTimeMillis. The check at line 734 throws.","commonSituations":"Manually tuning eviction timers and swapping the two values; copying timings from another pool with different semantics; unit confusion (seconds vs milliseconds).","solutions":["Set maxEvictableIdleTimeMillis >= minEvictableIdleTimeMillis (typically max several times larger than min).","Double-check units: both are milliseconds in Druid.","Leave them at defaults unless you have a measured eviction need."],"exampleFix":"// before\ndataSource.setMinEvictableIdleTimeMillis(600_000); // 10 min\ndataSource.setMaxEvictableIdleTimeMillis(300_000); // 5 min -> throws\n// after\ndataSource.setMinEvictableIdleTimeMillis(300_000); // 5 min\ndataSource.setMaxEvictableIdleTimeMillis(900_000); // 15 min","handlingStrategy":"validation","validationCode":"if (dataSource.getMaxEvictableIdleTimeMillis() < dataSource.getMinEvictableIdleTimeMillis()) {\n    throw new IllegalStateException(\"maxEvictableIdleTimeMillis (\"\n        + dataSource.getMaxEvictableIdleTimeMillis()\n        + \") must be >= minEvictableIdleTimeMillis (\"\n        + dataSource.getMinEvictableIdleTimeMillis() + \")\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep maxEvictableIdleTimeMillis several times larger than min.","Remember all eviction timers are milliseconds.","Leave defaults unless you have measured eviction needs."],"tags":["config","eviction","timing","init","validation"],"backgroundTag":null,"analyzedSha":"fa8dc9912637a2f729eef9f55356621fec18d40e","analyzedAt":"2026-08-14T04:55:06.789Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}