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
相关产品推荐
相关产品推荐

