You need to enable JavaScript to run this app. Azure Databricks运行Spring Boot Java应用及类找不到报错解决
优惠活动
大模型
产品
解决方案
定价
更多

Azure Databricks运行Spring Boot Java应用及类找不到报错解决

Azure Databricks 运行Spring Boot Java应用落地指南

原有本地Spark环境的验证可行方案

该方案最早适配OpenShift构建场景,经过本地Apache Spark环境的运行验证,可实现驱动端完整Spring Boot能力(含依赖注入)、集群端Spark计算逻辑正常运行的效果,核心步骤如下:

  • 使用copy-rename-maven-plugin对spring-boot-maven-plugin生成的原始jar包执行重命名操作,对应pom配置:
<plugin>
  <groupId>com.coderplus.maven.plugins</groupId>
  <artifactId>copy-rename-maven-plugin</artifactId>
  <version>1.0.1</version>
  <executions>
    <execution>
      <id>rename-file</id>
      <phase>package</phase>
      <goals>
        <goal>rename</goal>
      </goals>
      <configuration>
        <sourceFile>target/${project.name}-${project.version}.jar.original</sourceFile>
        <destinationFile>target/${project.name}-${project.version}-original.jar</destinationFile>
      </configuration>
    </execution>
  </executions>
</plugin>
  • 新增配置项记录原始jar包的名称与存储路径,配置值设置为原始jar包的实际部署位置
  • 在Spark初始化流程中通过-Doriginal.jar-file参数,将原始jar包的名称与路径传递给Spark会话,对应代码:
sparkConf.setJars(new String[]{props.getJarFile()});
  • 执行spark-submit命令启动应用,示例命令:
spark-submit --master yarn --deploy-mode client --conf "spark.driver.extraJavaOptions=-Dspring.profiles.active=dev" SparkPiBoot-0.0.1.jar

方案运行效果说明:驱动应用可在本地Spark环境以完整Spring Boot应用形态运行,支持依赖注入等核心能力;在Spark集群端执行的Dataframe计算逻辑取自未修改的原始jar包,不具备Spring Boot相关特性。

Databricks场景下的现有运行情况

当前计划通过Azure Data Factory管道调度Databricks作业运行应用,已完成基础准备:

  • 已将两个jar包上传至Azure Databricks文件系统
  • 已创建关联DBFS中原始jar包路径的Azure Data Factory Databricks活动
    运行时触发报错如下:
command--1:1: error: Class org.springframework.boot.CommandLineRunner not found - continuing with a stub.
io.radanalytics.SparkPiBootApplication.main(Array())
^

已完成的前置排查:主jar为Spring Boot生成的uber jar,已包含全部依赖,其中就包含承载org.springframework.boot.CommandLineRunner类的spring-boot-1.5.2.RELEASE.jar,问题并非依赖包缺失导致。

Databricks环境适配调整方案

核心报错根因:Databricks集群的类加载机制无法识别Spring Boot uber jar内部嵌套的BOOT-INF/classes、BOOT-INF/lib目录下的类,即便jar包物理包含对应类,也无法被类加载器扫描到,因此触发类找不到的报错。可通过以下调整完成适配:

  • 调整打包逻辑,生成扁平结构的类路径jar
    修改maven打包配置,不再生成带BOOT-INF嵌套结构的Spring Boot可执行jar,而是将所有依赖类直接解压到jar包根目录后重新打包,确保Databricks类加载器可直接扫描到类文件。
  • 统一使用DBFS绝对路径注册依赖
    所有需要加载的应用jar、依赖jar,在Databricks作业配置的“库引用”列表中,统一使用dbfs:/开头的绝对路径注册,不要依赖代码中SparkConf动态传递的jar路径配置。
    同时在Spark配置项中,将两个jar的DBFS绝对路径追加到spark.driver.extraClassPath、spark.executor.extraClassPath参数中,绕过Databricks默认的类加载路径扫描规则。
  • 明确指定作业主类
    在Databricks作业配置中,直接填写应用主类的全路径名(如io.radanalytics.SparkPiBootApplication),不要依赖jar包内部MANIFEST.MF中配置的Spring Boot JarLauncher主类,绕开Spring Boot可执行jar的类加载隔离逻辑。
  • 对齐原有运行参数
    参照本地Spark的配置,在Databricks作业的JVM参数中追加spark.driver.extraJavaOptions=-Dspring.profiles.active=dev,确保Spring配置文件按预期加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 23:45:05