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

  1. Set driverClassName to the actual driver FQN (e.g. com.mysql.cj.jdbc.Driver).
  2. Put the JDBC URL in setUrl/setJdbcUrl, not setDriverClassName.
  3. 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

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


AI-assisted analysis of alibaba/druid@fa8dc99126 (2026-08-14). Data as JSON: /api/errors/e2afba0e97f2daf1. Report an issue: GitHub.