java 数据源属性$数据源Bean创建异常:无法确定合适的驱动程序类

ryevplcw  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(140)

我们有一个spring Boot 2.7.3应用程序,从Maven调用时运行良好,如下所示:

mvn spring-boot:run

但是当我们使用shade插件构建一个fatjar,并尝试使用java调用应用程序时,我们会得到这个错误(显示最里面的异常):

Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
    at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:182)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.initializeDataSourceBuilder(DataSourceProperties.java:123)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:48)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:90)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 42 common frames omitted

我们的application.properties是这样的:

spring.datasource.driver-class-name=com.teradata.jdbc.TeraDriver
spring.jpa.hibernate.ddl-auto=none
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.TeradataDialect
spring.datasource.username=
spring.datasource.url=jdbc:teradata://TD1/TMODE=ANSI,CHARSET=UTF8
spring.datasource.password=

在我们的pom.xml中,我们有:

<dependency>
      <groupId>com.teradata.jdbc</groupId>
      <artifactId>terajdbc4</artifactId>
      <version>17.20.00.12</version>
    </dependency>
  • 我们还解压缩了fatjar并验证了其中包含com.teradata.jdbc.TeraDriver *。构建fatjar时,我们可以在Maven输出中看到以下内容:
[INFO] Including com.teradata.jdbc:terajdbc4:jar:17.20.00.12 in the shaded jar.

那么为什么它说Failed to determined a appropriate driver class?我们如何解决这个问题呢?

h79rfbju

h79rfbju1#

调试了几个小时。错误不是因为找不到com.teradata.jdbc:terajdbc4:jar,这是因为application.properties没有通过。我们以为它正在阅读application.properties,但它没有。在我们的例子中,我们使用问题中提到的shade插件构建fatjar。结果应该使用 spring-boot-maven-plugin 构建fatjar,如here所述。具体来说,您必须小心用途:

mvn clean package spring-boot:repackage

在第一种情况下(使用shade插件),application.properties位于jar文件的根目录下。

% ls                                                                                                                                                                                                                                         temp/td-atr-api2 SIJAIN2-M-89PB
BOOT-INF META-INF org

而application.properties是在BOOT-INF/classes/application.properties下。组织非常不同。

相关问题