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

Spring连接Oracle Cloud 19c数据库出现连接字符串格式错误如何解决

Spring连接Oracle Cloud 19c(Wallet)报错修复方案

问题根因

你遇到的oracle.net.ns.NetException: Invalid connection string format报错,核心原因有两个:一是依赖配置错误导致驱动无法识别Wallet模式的连接串,二是连接路径配置不规范无法正确加载Wallet证书。

1. build.gradle依赖修正

现有依赖存在UCP坐标错误、Lombok版本重复、无对应19c版本JDBC驱动的问题,修正后的dependencies配置如下:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // 统一Lombok版本,删除重复声明
    compileOnly 'org.projectlombok:lombok:1.18.20'
    annotationProcessor 'org.projectlombok:lombok:1.18.20'
    // Oracle 19c对应JDBC及相关依赖,修正UCP坐标
    implementation 'com.oracle.database.jdbc:ojdbc8:19.21.0.0'
    implementation 'com.oracle.database.jdbc:ucp:19.21.0.0'
    implementation 'com.oracle.database.security:oraclepki:19.21.0.0'
    implementation 'com.oracle.database.security:osdt_core:19.21.0.0'
    implementation 'com.oracle.database.security:osdt_cert:19.21.0.0'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

2. application.yml配置修正

现有配置存在相对路径打包后失效、连接串格式不规范的问题,修正后配置如下:

# local, dev, prod 공통 설정
server:
  port: 8080
  tomcat:
    uri-encoding: UTF-8

spring:
  datasource:
    driver-class-name: oracle.jdbc.OracleDriver
    # 替换[TNS_NAME]为Wallet包中tnsnames.ora内定义的服务别名,不要保留方括号
    # TNS_ADMIN路径建议用类路径写法,确保打包后可正常识别,Wallet文件夹直接放在resources目录下即可
    url: jdbc:oracle:thin:@[TNS_NAME]?TNS_ADMIN=classpath:Wallet
    username: 你的数据库用户名
    password: 你的数据库密码
    # 指定用UCP连接池,适配Oracle云连接
    type: oracle.ucp.jdbc.PoolDataSource
  jpa:
    database-platform: org.hibernate.dialect.Oracle12cDialect
    open-in-view: true
    hibernate:
      ddl-auto: none

3. 额外检查项

  • 确保解压后的Wallet文件夹内包含tnsnames.ora、sqlnet.ora、cwallet.sso、ewallet.p12四个核心文件
  • 打开sqlnet.ora,将WALLET_LOCATION配置修改为如下内容,避免硬编码绝对路径导致加载失败:
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SQLNET.AUTHENTICATION_SERVICES = (TCPS)
  • 若部署在服务器上,可将TNS_ADMIN改为服务器上存放Wallet的绝对路径,例如/opt/wallet

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:48:04