You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.2.3集成ProxyDataSource与Liquibase报错UnsupportedDataSourcePropertyException

问题分析与解决方案

问题原因

启用datasource-proxy后,Spring Boot的主数据源被包装为ProxyDataSource。当未显式配置spring.liquibase.url时,Liquibase自动配置会通过DataSourceBuilder尝试基于主数据源的属性构建迁移数据源,但ProxyDataSource并未暴露setUrl这类属性设置方法,导致反射调用失败,抛出UnsupportedDataSourcePropertyException异常。

可行解决方案

方案1:显式配置Liquibase数据源信息

直接在application.properties中添加Liquibase的URL配置,让Liquibase使用独立的数据源配置,避免依赖代理数据源的反射属性:

spring.liquibase.url=jdbc:h2:mem:test

方案2:自定义Liquibase Bean,使用原始数据源

通过配置类获取代理数据源背后的原始Hikari数据源,直接注入给Liquibase,绕过反射问题:

import liquibase.integration.spring.SpringLiquibase;
import net.ttddyy.dsproxy.support.ProxyDataSource;
import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;

@Configuration
public class LiquibaseConfig {

    @Bean
    public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties properties) {
        // 剥离代理,获取原始数据源
        DataSource targetDataSource = dataSource;
        if (dataSource instanceof ProxyDataSource) {
            targetDataSource = ((ProxyDataSource) dataSource).getTargetDataSource();
        }

        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setDataSource(targetDataSource);
        liquibase.setChangeLog(properties.getChangeLog());
        liquibase.setContexts(properties.getContexts());
        liquibase.setDefaultSchema(properties.getDefaultSchema());
        liquibase.setDropFirst(properties.isDropFirst());
        liquibase.setShouldRun(properties.isEnabled());
        liquibase.setLabels(properties.getLabels());
        liquibase.setChangeLogParameters(properties.getParameters());
        liquibase.setRollbackFile(properties.getRollbackFile());
        return liquibase;
    }
}

方案3:升级datasource-proxy版本

当前使用的1.10版本对Spring Boot 3.x的兼容性可能不足,升级到最新稳定版(如1.13.0及以上),新版本可能修复了数据源代理与Liquibase自动配置的适配问题:

<dependency>
  <groupId>net.ttddyy</groupId>
  <artifactId>datasource-proxy</artifactId>
  <version>1.13.0</version>
</dependency>

内容的提问来源于stack exchange,提问作者user29484920

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:05:21