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

Java17 Spring Boot用JpaRepository连Azure Databricks遇JDBC报错

解决Spring Boot(Java 17)连接Azure Databricks使用JpaRepository时的事务创建失败问题

问题场景

在Java 17的Spring Boot应用中,连接Azure Databricks并使用JpaRepository调用方法时,触发如下错误:

CannotCreateTransactionException: Could not open JPA EntityManager for transaction
...
org.hibernate.TransactionException: JDBC begin transaction failed
...
java.sql.SQLFeatureNotSupportedException: [Databricks]JDBC Driver does not support this optional feature.

解决方案

1. 调整JPA与Hibernate的事务配置

由于Databricks JDBC驱动不支持传统JDBC事务,需要修改Spring配置禁用事务自动管理:

application.properties配置:

# 禁用Hibernate自动DDL(根据实际需求调整,若不需要可设为none)
spring.jpa.hibernate.ddl-auto=none
# 开启自动提交,避免Hibernate尝试开启事务
spring.jpa.properties.hibernate.connection.autocommit=true
# 禁用JTA事务平台
spring.jpa.properties.hibernate.transaction.jta.platform=org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform
# 取消默认事务超时设置
spring.transaction.default-timeout=0

application.yml配置:

spring:
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        connection:
          autocommit: true
        transaction:
          jta:
            platform: org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform
  transaction:
    default-timeout: 0

2. 移除或调整事务注解

如果你的Repository接口或方法上标注了@Transactional,需要移除该注解,或者设置事务传播行为为不支持事务:

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public interface YourRepository extends JpaRepository<YourEntity, Long> {
    // 自定义方法
}

3. 确保使用兼容的Databricks JDBC驱动

在pom.xml中引入最新稳定版的Databricks JDBC驱动:

<dependency>
    <groupId>com.databricks</groupId>
    <artifactId>databricks-jdbc</artifactId>
    <version>2.6.25</version> <!-- 替换为最新稳定版本 -->
</dependency>

4. 验证Databricks连接URL格式

确保数据源URL符合Databricks官方规范,示例:

spring.datasource.url=jdbc:databricks://<你的Databricks实例地址>:443/default;transportMode=http;ssl=1;httpPath=<SQL仓库的HTTP路径>;AuthMech=3;UID=token;PWD=<你的Databricks访问令牌>

问题原因

Azure Databricks的SQL引擎(尤其是Serverless SQL仓库)基于Spark SQL设计,本身不支持传统的JDBC事务机制。当Hibernate尝试自动开启JDBC事务时,Databricks JDBC驱动会直接抛出"不支持该特性"的异常,导致无法创建EntityManager事务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:20