springboot引入cdc无法启动排查

文章讲述了在使用FlinkSQL的CDCOracle插件时遇到的SAXParserFactory冲突问题,logback初始化失败。通过设置系统属性`javax.xml.parsers.SAXParserFactory`为`com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl`解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

系统提供为外部应用程序提供了一个验证flink sql语法以及在线试运行flink sql的接口。

bug

在pom.xml引入cdc依赖:

<dependency>
    <groupId>com.ververica</groupId>
    <artifactId>flink-sql-connector-oracle-cdc</artifactId>
    <version>${flink.cdc.version}</version>
</dependency>

使用idea启动springboot应用,控制台输入如下:

可以看到没有任务的异常日志,只有 Process finished with exit code 1。

排查

修改Application 启动类增加异常打印:

@Configuration
@RefreshScope
@EnableDiscoveryClient
@EnableFeignClients
@EnableCaching
@EnableAsync
@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        try {
            SpringApplication.run(Application.class, args);
        } catch (Exception e) {
            e.printStackTrace(System.err);
            throw new RuntimeException(e);
        }
    }
}

再次运行,提示 javax.xml.parsers.ParserconfiqurationException create breakpoint : SAx feature 'http://xm.org/sax/features/external-general-entities'not supported

从错误日志可以看出来,cdc依赖包中的oracle.xml.jaxp.JXSAXParserFactory与logback存在冲突导致致 logback 初始化报错,异常位置在 ch.qos.logback.core.joran.event.SaxEventRecorder#buildSaxParser,SAXParserFactory spf = SAXParserFactory.newInstance();这一行获取到的 SAXParserFactory 实例是cdc包中的错误实现

SAXParserFactory 作为 XML 文档解析器的接口,核心入口为 javax.xml.parsers.FactoryFinder#find,初始化该类实例的逻辑如下:

  1. 检验系统属性 javax.xml.parsers.SAXParserFactory是否设置,如果有使用该值
  2. 读取 ${java.home}/conf/jaxp.properties 配置 javax.xml.parsers.SAXParserFactory
  3. 依据 java.util.ServiceLoader 查找实现了 SAXParserFactory 的类后,取第一个

三种方式未能找到,使用默认实现com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl。

解决

设置系统属性 javax.xml.parsers.SAXParserFactory,启动正常

@Configuration
@RefreshScope
@EnableDiscoveryClient
@EnableFeignClients
@EnableCaching
@EnableAsync
@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        try {
            // FIX javax.xml.parsers.ParserConfigurationException: SAX feature 'http://xml.org/sax/features/external-general-entities' not supported.
            System.setProperty("javax.xml.parsers.SAXParserFactory", "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
 
            SpringApplication.run(Application.class, args);
        } catch (Exception e) {
            e.printStackTrace(System.err);
            throw new RuntimeException(e);
        }
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风卷残尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值