Spring Boot 2.7.0升级后使用c3p0 ComboPooledDataSource遇UnsupportedDataSourcePropertyException问题求助
解决Spring Boot 2.7.0升级后c3p0数据源自动配置的URL绑定问题
不用手动创建DataSource Bean!最简单的解决方式是调整你的配置文件属性,让Spring Boot的自动配置能正确匹配c3p0的setter方法:
直接修改配置文件
把原来的spring.datasource.url替换为spring.datasource.jdbc-url,同时把驱动类配置换成Spring Boot的标准属性。修改后的application.properties如下:
# 替换原spring.datasource.url为jdbc-url,匹配c3p0的setJdbcUrl方法 spring.datasource.jdbc-url=jdbc:mysql://db-url:3307/service spring.datasource.username=user spring.datasource.password=pass spring.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource # 用标准属性替代自定义的pool.driverClass,匹配c3p0的setDriverClass方法 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 可选:添加c3p0的其他连接池配置,Spring会自动映射到对应setter spring.datasource.max-pool-size=20 spring.datasource.min-pool-size=5 spring.datasource.acquire-increment=2
为什么这样能解决问题?
你分析的没错——Spring Boot 2.5+版本的DataSourceBuilder在绑定属性时,会根据属性名严格匹配数据源类的setter方法:
- 默认的
spring.datasource.url会让框架寻找setUrl方法,但c3p0的ComboPooledDataSource只有setJdbcUrl方法,因此抛出UnsupportedDataSourcePropertyException - 改用
spring.datasource.jdbc-url后,框架会自动匹配setJdbcUrl方法,完美适配c3p0的API - 同样,
spring.datasource.driver-class-name会映射到c3p0的setDriverClass方法,替代你原来的自定义属性
额外提示
如果需要配置c3p0的其他连接池参数(比如maxPoolSize、initialPoolSize),直接用蛇形命名的Spring属性即可,框架会自动将其转换为驼峰式的setter方法调用(比如spring.datasource.initial-pool-size对应setInitialPoolSize)。
内容的提问来源于stack exchange,提问作者Rishabh Shrivastava
相关产品推荐
相关产品推荐

