我遇到了一个“无法为属性驱动程序类名设置值”(请参阅最后一段了解完整的错误详细信息)。我已经阅读了其他几篇文章,似乎表明我有这个设置正确,但我不能找出我错过了什么,所以我提前道歉,因为使用属性文件是新的我。是什么导致了这个错误?
应用程序属性:
# MySQL
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/cafe?useTimezone=true&serverTimezone=UTC
db.user=root
db.password=root
pom.xml文件:
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
<scope>runtime</scope>
</dependency>
数据源配置:
@Configuration
@PropertySource("../../../../../../../../application.properties")
public class DBConfig {
@Bean
public DataSource getDataSource()
{
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("db.driver");
dataSourceBuilder.url("db.url");
dataSourceBuilder.username("db.user");
dataSourceBuilder.password("db.password");
return dataSourceBuilder.build();
}
}
错误:
10:58:11.577 [main] DEBUG com.zaxxer.hikari.HikariConfig - Driver class db.driver not found in Thread context class loader sun.misc.Launcher$AppClassLoader@18b4aac2, trying classloader sun.misc.Launcher$AppClassLoader@18b4aac2
10:58:11.580 [main] ERROR com.zaxxer.hikari.HikariConfig - Failed to load driver class db.driver from HikariConfig class classloader sun.misc.Launcher$AppClassLoader@18b4aac2
Exception in thread "main" org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under '' to com.zaxxer.hikari.HikariDataSource
at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:363)
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:323)
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:308)
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:238)
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:212)
at org.springframework.boot.jdbc.DataSourceBuilder.bind(DataSourceBuilder.java:94)
at org.springframework.boot.jdbc.DataSourceBuilder.build(DataSourceBuilder.java:75)
at edu.bu.met.cs665.database.DataConfig.getDataSource(DataConfig.java:22)
at edu.bu.met.cs665.database.CreateConnection.<init>(CreateConnection.java:26)
at edu.bu.met.cs665.database.CreateConnection.getInstance(CreateConnection.java:35)
at edu.bu.met.cs665.Main.seedDatabase(Main.java:51)
at edu.bu.met.cs665.Main.main(Main.java:39)
Caused by: java.lang.IllegalStateException: Unable to set value for property driver-class-name
at org.springframework.boot.context.properties.bind.JavaBeanBinder$BeanProperty.setValue(JavaBeanBinder.java:351)
at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:98)
at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:80)
at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:56)
at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:451)
at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:571)
at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:557)
at org.springframework.boot.context.properties.bind.Binder$Context.access$300(Binder.java:512)
at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:449)
at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:390)
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:319)
... 10 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.context.properties.bind.JavaBeanBinder$BeanProperty.setValue(JavaBeanBinder.java:348)
... 20 more
Caused by: java.lang.RuntimeException: Failed to load driver class db.driver in either of HikariConfig class loader or Thread context classloader
at com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:486)
2条答案
按热度按时间5m1hhzi41#
原因:java.lang.runtimeexception:未能加载驱动程序类db.driver
这意味着
dataSourceBuilder.driverClassName("db.driver");
作为值传递db.driver
而不是价值com.mysql.cj.jdbc.Driver
您需要读取这些配置属性的值。现在,它将这些字段的属性名作为值传递。以下内容应该对您有用f3temu5u2#
既然你用的是
spring-boot
所以application.properties应该遵循标准,您不需要定义任何数据库配置,比如dbconfig.java以下是您的
application.properties
看起来像https://spring.io/guides/gs/accessing-data-mysql/