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

Spring Boot应用部署服务器时--add-opens参数配置问题求助

解决Apache Arrow的MemoryUtil初始化失败问题

问题根源

Apache Arrow的MemoryUtil类需要访问Java NIO包的内部API,Java 9+的模块系统默认限制了这类访问,因此必须通过--add-opens=java.base/java.nio=ALL-UNNAMED这个VM参数开放权限。

无效方案分析

  1. 移除Arrow依赖无效:大概率是项目中其他依赖间接引入了Apache Arrow(比如部分大数据、数据处理类库),可以执行mvn dependency:tree命令排查依赖树,定位间接引入的Arrow依赖。
  2. application.properties中配置K8s环境变量错误:spec.containers[0].env是Kubernetes Deployment/YAML配置的语法,并非Spring Boot application.properties的配置项,放在此处不会生效。

正确的服务器端配置方案

场景1:直接以Jar包形式运行应用

启动命令中直接追加VM参数:

java --add-opens=java.base/java.nio=ALL-UNNAMED -jar your-spring-boot-app.jar

如果使用脚本启动,可将参数写入启动脚本的JAVA_OPTS变量:

export JAVA_OPTS="--add-opens=java.base/java.nio=ALL-UNNAMED"
java $JAVA_OPTS -jar your-spring-boot-app.jar

场景2:使用Kubernetes部署

需在Deployment的YAML配置文件中添加配置,而非Spring Boot的application.properties:

方式一:通过JAVA_OPTS环境变量传递

spec:
  containers:
    - name: your-app-container
      image: your-app-image:latest
      env:
        - name: JAVA_OPTS
          value: "--add-opens=java.base/java.nio=ALL-UNNAMED"

方式二:直接指定启动命令

spec:
  containers:
    - name: your-app-container
      image: your-app-image:latest
      command: ["java"]
      args: ["--add-opens=java.base/java.nio=ALL-UNNAMED", "-jar", "/app/your-spring-boot-app.jar"]

场景3:使用Docker容器部署

在Dockerfile中整合VM参数到启动逻辑:

方式一:直接写入ENTRYPOINT

FROM openjdk:17-jdk-slim
COPY target/your-spring-boot-app.jar /app.jar
ENTRYPOINT ["java", "--add-opens=java.base/java.nio=ALL-UNNAMED", "-jar", "/app.jar"]

方式二:通过环境变量传递

FROM openjdk:17-jdk-slim
COPY target/your-spring-boot-app.jar /app.jar
ENV JAVA_OPTS="--add-opens=java.base/java.nio=ALL-UNNAMED"
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app.jar"]

场景4:部署到Tomcat等应用服务器

修改Tomcat的catalina.sh(Linux)或catalina.bat(Windows),在JAVA_OPTS配置中追加参数:

JAVA_OPTS="$JAVA_OPTS --add-opens=java.base/java.nio=ALL-UNNAMED"

额外建议

如果确实不需要Arrow依赖,执行mvn dependency:tree找到所有引入Arrow的上游依赖,在pom.xml中排除:

<dependency>
    <groupId>xxx</groupId>
    <artifactId>xxx-dependency</artifactId>
    <version>xxx</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.arrow</groupId>
            <artifactId>arrow-vector</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.arrow</groupId>
            <artifactId>arrow-memory-netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:20:11