"java.lang.IllegalStateException: Cannot load driver class" 在 Spring 引导应用程序中
"java.lang.IllegalStateException: Cannot load driver class" in Spring Boot application
我正在使用外部 YAML 配置和 CMD 配置 spring 引导。
->application.yml文件
spring:
profiles: integration-test
datasource:
driverClassName: ${SPRING_DATASOURCE_DRIVER_CLASS_NAME}
url: ${SPRING_DATASOURCE_URL}
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
->cmd
mvn clean install
->结果
Caused by: java.lang.IllegalStateException: Cannot load driver class: ${SPRING_DATASOURCE_DRIVER_CLASS_NAME}
谁能给我解释一下?
当您使用 java YourMainClass
运行 您的应用程序时,在您的程序启动配置或命令行中传递这些变量,例如
java -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=<full_qualified_name_of_your_jdbc_driver_class> -DSPRING_DATASOURCE_URL=<jdbc_url> YourMainClass
同样传递其他两个变量,用户名和密码!
您甚至可以在 OS 级别设置这些环境变量,因此您不必在每次启动应用程序时都设置它们...
如果你使用 Spring Boot 也可以看看这个:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
当您使用语法 ${}
时,您实际上是在告诉 Spring Boot 使用名称在括号中的 属性 的值。在您的情况下,Spring Boot 尝试解析 属性 SPRING_DATASOURCE_DRIVER_CLASS_NAME
。当它失败时,它按原样使用字符串,这会导致您提到的错误,因为名称 ${SPRING_DATASOURCE_DRIVER_CLASS_NAME}
.
下不存在驱动程序
要解决此问题,您可以:
- 用实际值替换
${}
,例如driverClassName: org.postgresql.Driver
并对其他属性执行相同操作(url
、username
和 password
)
- 提供属性
SPRING_DATASOURCE_DRIVER_CLASS_NAME
、SPRING_DATASOURCE_URL
和另外两个属性。这些可以通过 -D
选项(例如 -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver)或通过环境变量在命令行中传递。大家可以看看springBoot documentation for more details。
我正在使用外部 YAML 配置和 CMD 配置 spring 引导。
->application.yml文件
spring:
profiles: integration-test
datasource:
driverClassName: ${SPRING_DATASOURCE_DRIVER_CLASS_NAME}
url: ${SPRING_DATASOURCE_URL}
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
->cmd
mvn clean install
->结果
Caused by: java.lang.IllegalStateException: Cannot load driver class: ${SPRING_DATASOURCE_DRIVER_CLASS_NAME}
谁能给我解释一下?
当您使用 java YourMainClass
运行 您的应用程序时,在您的程序启动配置或命令行中传递这些变量,例如
java -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=<full_qualified_name_of_your_jdbc_driver_class> -DSPRING_DATASOURCE_URL=<jdbc_url> YourMainClass
同样传递其他两个变量,用户名和密码!
您甚至可以在 OS 级别设置这些环境变量,因此您不必在每次启动应用程序时都设置它们...
如果你使用 Spring Boot 也可以看看这个:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
当您使用语法 ${}
时,您实际上是在告诉 Spring Boot 使用名称在括号中的 属性 的值。在您的情况下,Spring Boot 尝试解析 属性 SPRING_DATASOURCE_DRIVER_CLASS_NAME
。当它失败时,它按原样使用字符串,这会导致您提到的错误,因为名称 ${SPRING_DATASOURCE_DRIVER_CLASS_NAME}
.
要解决此问题,您可以:
- 用实际值替换
${}
,例如driverClassName: org.postgresql.Driver
并对其他属性执行相同操作(url
、username
和password
) - 提供属性
SPRING_DATASOURCE_DRIVER_CLASS_NAME
、SPRING_DATASOURCE_URL
和另外两个属性。这些可以通过-D
选项(例如 -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver)或通过环境变量在命令行中传递。大家可以看看springBoot documentation for more details。