alibaba/druid · error · IllegalArgumentException
driverClassName length > 256.
Error message
driverClassName length > 256.
What it means
setDriverClassName rejects any non-null driverClass string longer than 256 characters. This is a defensive sanity check: a real JDBC driver class name is far shorter, so a >256 value almost always means a URL, SQL fragment, or other data was pasted into the driver-class field by mistake.
Source
Thrown at core/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java:1269
if (jdbcUrl != null) {
jdbcUrl = jdbcUrl.trim();
}
this.jdbcUrl = jdbcUrl;
// if (jdbcUrl.startsWith(ConfigFilter.URL_PREFIX)) {
// this.filters.add(new ConfigFilter());
// }
}
public String getDriverClassName() {
return driverClass;
}
public void setDriverClassName(String driverClass) {
if (driverClass != null && driverClass.length() > 256) {
throw new IllegalArgumentException("driverClassName length > 256.");
}
if (JdbcConstants.ORACLE_DRIVER2.equalsIgnoreCase(driverClass)) {
driverClass = "oracle.jdbc.OracleDriver";
LOG.warn("oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver.");
}
if (inited) {
if (StringUtils.equals(this.driverClass, driverClass)) {
return;
}
throw new UnsupportedOperationException();
}
this.driverClass = driverClass;
}
View on GitHub (pinned to fa8dc99126)
Solutions
- Set driverClassName to the actual driver FQN (e.g. com.mysql.cj.jdbc.Driver).
- Put the JDBC URL in setUrl/setJdbcUrl, not setDriverClassName.
- Check property binding / placeholder resolution for accidental concatenation.
Example fix
// before
// ds.setDriverClassName("jdbc:mysql://localhost:3306/db?useSSL=false&...");
// after
// ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
// ds.setUrl("jdbc:mysql://localhost:3306/db?useSSL=false"); Defensive patterns
Strategy: validation
Validate before calling
String dc = driverClassName;
if (dc != null && dc.length() > 256) {
throw new IllegalArgumentException("driverClassName looks like a URL/text, length > 256: " + dc);
}
ds.setDriverClassName(dc); Try / catch
try {
ds.setDriverClassName(value);
} catch (IllegalArgumentException e) {
if (e.getMessage().equals("driverClassName length > 256.")) {
// value is probably a JDBC URL or garbage; set the real driver FQN, put URL in setUrl
}
throw e;
} Prevention
- Keep driverClassName to the driver's FQN (e.g. com.mysql.cj.jdbc.Driver).
- Bind JDBC URLs to setUrl/setJdbcUrl, never to driverClassName.
- Double-check Spring @Value / placeholder bindings for swapped properties.
When it happens
Trigger: Calling setDriverClassName(s) where s != null && s.length() > 256.
Common situations: Pasting a JDBC URL (jdbc:mysql://...) into the driverClassName property; a miswired Spring @Value binding the wrong property; a templating/placeholder expansion that concatenated extra text.
Related errors
- maxEvictableIdleTimeMillis must be grater than minEvictableI
- timeBetweenEvictionRunsMillis must > 0
- minIdle greater than maxActive, {} must >= {}
- ConfigLoader only support DruidDataSource
- Config DataSource error.
AI-assisted analysis of alibaba/druid@fa8dc99126 (2026-08-14).
Data as JSON: /api/errors/e2afba0e97f2daf1.
Report an issue: GitHub.