开发者社区 问答 正文

org.springframework.boot.autoconfig无法确定合适的驱动

所有,

我正在尝试使用Spring Boot创建Oracle DB的数据源。我收到以下错误:

org.springframework.boot.autoconfigure.jdbc.DataSourceProperties $ DataSourceBeanCreationException:无法确定合适的驱动程序类

我确实在类似的问题上研究了不同的stackoverflow问题,但没有任何效果。

这是示例代码和其他工件:

pom.xml:

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
</dependency>
<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ucp</artifactId>
    <version>12.2.0.1</version>
</dependency>
<dependency>
    <groupId>com.oracle.jdbc</groupId>
    <artifactId>ons</artifactId>
    <version>12.2.0.1</version>
</dependency>

application.yml:

spring:
  oracle-db:
    url: jdbc:oracle:thin:<oracle db details>
    username: <user id>
    password: <password>
    driver-class-name: oracle.jdbc.OracleDriver

在上面我什至尝试使用oracle.jdbc.driver.OracleDriver作为驱动程序类名。我也将driver-class-name更改为driverClassName,但存在相同的错误。

在代码中,我按以下方式创建数据源:

@Bean
@Primary
@ConfigurationProperties("spring.oracle-db")
public DataSourceProperties myDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties("spring.oracle-db")
public HikariDataSource getMyds() {
    return myDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}

我是什么?

展开
收起
垚tutu 2019-12-04 17:18:23 1167 分享 版权
阿里云 AI 助理回答

根据您提供的信息,看起来您在尝试为Spring Boot应用配置Oracle数据库数据源时遇到了问题。错误提示表明Spring Boot无法确定合适的JDBC驱动类。尽管您已经尝试了多种方法,这里有几个可能的解决方案和检查点,希望能帮助到您:

  1. 确认依赖是否正确加载

    • 您已经在pom.xml中添加了ojdbc8、ucp和ons的依赖。请确保这些依赖没有被其他配置或profile覆盖或排除。
    • 确认Maven构建过程中没有遇到任何关于这些依赖的下载或解析错误。可以通过运行mvn dependency:tree来查看依赖树,确认Oracle JDBC驱动是否被正确解析并包含在内。
  2. Spring Boot版本兼容性

    • 确保您的Spring Boot版本与ojdbc8版本之间没有兼容性问题。虽然ojdbc8通常支持较新的Spring Boot版本,但有时特定版本组合可能会出现问题。考虑查阅官方文档或社区论坛以获取推荐的搭配版本。
  3. YAML配置格式

    • application.yml中,确保数据库URL是完整的,并且包含了正确的主机名、端口和SID/服务名。例如:
      spring:
      oracle-db:
       url: jdbc:oracle:thin:@hostname:port/service_name
       username: your_username
       password: your_password
       driver-class-name: oracle.jdbc.OracleDriver
      
    • 注意,如果使用的是spring.datasource而非自定义属性前缀(如spring.oracle-db),则应相应调整配置。
  4. 移除不需要的依赖

    • ons(Oracle Notification Service)客户端库通常不是连接数据库所必需的,除非您有特殊需求。可以尝试从pom.xml中移除它,看是否影响数据源的创建。
  5. 使用自动配置

    • Spring Boot对于常见的数据库提供了自动配置功能,包括Oracle。如果您手动配置了DataSourcePropertiesHikariDataSource,并且指定了所有必要的属性,理论上应该能正常工作。但是,您可以尝试简化配置,仅在application.yml中提供必要信息,让Spring Boot自动处理数据源的创建。例如:
      spring:
      datasource:
       url: ...
       username: ...
       password: ...
       driver-class-name: oracle.jdbc.OracleDriver
       type: com.zaxxer.hikari.HikariDataSource
      
  6. 检查Classpath冲突

    • 有时候,项目中可能存在多个不同版本的JDBC驱动,这可能导致类加载冲突。确保只有所需的驱动版本存在于项目的类路径上。

如果以上步骤都不能解决问题,请检查应用程序日志中的其他异常或警告信息,它们可能提供更多线索。此外,考虑到环境因素,确保您的Java环境与Oracle JDBC驱动兼容,以及网络配置允许访问数据库服务器。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答