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

Spring Boot3.1.0+Java17集成Apache Flink启动报错解决方案咨询

问题根源分析

  • 当前Flink依赖版本混乱(同时存在1.11、1.14、1.17版本),Flink 1.16之前的版本对Java17模块系统支持不完善,反射访问java.lang包时触发模块权限限制,导致报错。
  • pom中Scala版本为2.11,与新版本Flink的兼容版本不匹配,且Kafka连接器版本过旧。

具体修复步骤

1. 统一Flink版本到兼容Java17的稳定版

Flink 1.16及以上正式支持Java17,推荐使用1.17.1(与现有flink-core版本一致),同时统一Scala版本为2.12(当前主流兼容版本)。

2. 修正pom.xml依赖

替换所有Flink相关依赖,确保版本统一、Scala版本匹配,同时更新Kafka连接器:

<properties>
    <java.version>17</java.version>
    <flink.version>1.17.1</flink.version>
    <scala.binary.version>2.12</scala.binary.version>
</properties>

<dependencies>
    <!-- 保留原有Spring Boot等依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.6.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>

    <!-- 统一Flink核心依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-statebackend-rocksdb_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-core</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- 更新为对应Flink版本的通用Kafka连接器 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
</dependencies>

3. 调整JVM参数解决模块权限问题

合并重复的argLine配置,添加开放java.lang包的参数,同时在Spring Boot插件中配置运行时JVM参数:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --illegal-access=warn</argLine>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <jvmArguments>--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED</jvmArguments>
            </configuration>
        </plugin>
    </plugins>
</build>

4. 集成注意事项

  • 不要在Flink Operator(如Map、FlatMap)中直接注入Spring Bean,需手动初始化Spring上下文或通过ApplicationContext获取Bean实例。
  • 若使用Flink集群模式,可将Flink核心依赖标记为provided(集群环境已内置),避免类加载冲突;本地运行时保持compile scope。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:27:05