我们有一个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?我们如何解决这个问题呢?
1条答案
按热度按时间h79rfbju1#
调试了几个小时。错误不是因为找不到
com.teradata.jdbc:terajdbc4:jar
,这是因为application.properties
没有通过。我们以为它正在阅读application.properties
,但它没有。在我们的例子中,我们使用问题中提到的shade插件构建fatjar。结果应该使用spring-boot-maven-plugin
构建fatjar,如here所述。具体来说,您必须小心用途:在第一种情况下(使用shade插件),
application.properties
位于jar文件的根目录下。而application.properties是在
BOOT-INF/classes/application.properties
下。组织非常不同。