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

Spring Boot 2.1.8连接OCI带Wallet的数据源启动失败问题

多数据源(含OCI Wallet认证)启动失败排查与解决

问题场景

基于Spring Boot 2.1.8的Web应用需连接两个数据库,其中一个为OCI数据库并使用WALLET认证,启动时抛出jdbcUrl is required with driverClassName错误,导致应用启动失败。

现有配置

1. OCI数据源配置

#Configuration to OCI
datasource1.spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
datasource1.spring.datasource.jdbc-url=jdbc:oracle:thin:@bddociaddv?TNS_ADMIN=/u02/Admin/domains/domain1/wls12c/props/bddoci
datasource1.spring.datasource.username=username
datasource1.spring.datasource.password=pass

注:jdbc-url中TNS_ADMIN指向已解压Wallet配置文件的文件夹

2. POM依赖配置

<!-- Uncomment this when using Oracle Credentials Wallet -->
<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>${oracle.ojdbc.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>simplefan</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>ons</artifactId>
        </exclusion>
    </exclusions>
</dependency>

其中${oracle.ojdbc.version}取值范围为[19,20)

错误日志

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-05-17 16:22:19,040 ERROR org.springframework.boot.SpringApplication [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] Application run failed
# org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'xxxxxxEntityManagerFactory' defined in class path resource [com/domain/subdomain/repository1/model/XXXXXXDatasourceConfiguration.class]: Unsatisfied dependency expressed through method 'XXXXXXXEntityManagerFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactoryBuilder' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactoryBuilder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.JpaVendorAdapter]: Factory method 'jpaVendorAdapter' threw exception; nested exception is java.lang.IllegalArgumentException: **jdbcUrl is required with driverClassName.**

解决方案

1. 修正配置文件前缀

当前配置前缀datasource1.spring.datasource不符合Spring Boot多数据源配置规范,需去掉多余的spring.,修改为:

#Configuration to OCI
datasource1.datasource.driver-class-name=oracle.jdbc.OracleDriver
datasource1.datasource.jdbc-url=jdbc:oracle:thin:@bddociaddv?TNS_ADMIN=/u02/Admin/domains/domain1/wls12c/props/bddoci
datasource1.datasource.username=username
datasource1.datasource.password=pass

自定义多数据源配置类通常使用@ConfigurationProperties(prefix = "datasource1.datasource")绑定配置,多余的spring.会导致配置无法被正确读取,进而触发jdbcUrl缺失错误。

2. 检查数据源配置类的属性绑定

确保XXXXXXDatasourceConfiguration类中,数据源Bean的配置正确使用@ConfigurationProperties,且前缀与配置文件一致:

@Configuration
@EnableJpaRepositories(basePackages = "com.domain.subdomain.repository1",
        entityManagerFactoryRef = "xxxxxxEntityManagerFactory",
        transactionManagerRef = "xxxxxxTransactionManager")
public class XXXXXXDatasourceConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "datasource1.datasource")
    public DataSource datasource1() {
        return DataSourceBuilder.create().build();
    }

    // EntityManagerFactory、TransactionManager配置省略...
}

若配置类中前缀写错,会导致配置无法正确绑定,需严格与配置文件前缀匹配。

3. 验证Wallet文件权限与路径

确认应用进程有权限访问TNS_ADMIN指向的文件夹及其中的Wallet文件(如cwallet.sso、tnsnames.ora等),路径不存在或权限不足可能间接引发配置读取异常。可执行以下命令检查:

ls -l /u02/Admin/domains/domain1/wls12c/props/bddoci

4. 补充Wallet依赖(可选)

使用Wallet认证时,建议补充以下Oracle Wallet相关依赖,确保版本与ojdbc匹配:

<dependency>
    <groupId>com.oracle.database.security</groupId>
    <artifactId>oraclepki</artifactId>
    <version>${oracle.ojdbc.version}</version>
</dependency>
<dependency>
    <groupId>com.oracle.database.security</groupId>
    <artifactId>osdt_core</artifactId>
    <version>${oracle.ojdbc.version}</version>
</dependency>
<dependency>
    <groupId>com.oracle.database.security</groupId>
    <artifactId>osdt_cert</artifactId>
    <version>${oracle.ojdbc.version}</version>
</dependency>

这些依赖是OCI Wallet认证的必要组件,可避免后续出现认证相关错误。


内容的提问来源于stack exchange,提问作者Joaquín Figueroa Arrué

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:19:52