"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}.

下不存在驱动程序

要解决此问题,您可以:

  1. 用实际值替换 ${},例如driverClassName: org.postgresql.Driver 并对其他属性执行相同操作(urlusernamepassword
  2. 提供属性 SPRING_DATASOURCE_DRIVER_CLASS_NAMESPRING_DATASOURCE_URL 和另外两个属性。这些可以通过 -D 选项(例如 -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver)或通过环境变量在命令行中传递。大家可以看看springBoot documentation for more details