Spring Boot应用程序中的“ java.lang.IllegalStateException:无法加载驱动程序类”

时间:2019-10-01 15:51:01

标签: spring spring-boot application.properties

我正在使用外部YAML配置和CMD配置Spring Boot。

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

有人可以向我解释吗?

2 个答案:

答案 0 :(得分:0)

例如,当您使用java YourMainClass运行应用程序时,在程序的启动配置中或在命令行中传递这些变量。

java -DSPRING_DATASOURCE_DRIVER_CLASS_NAME=<full_qualified_name_of_your_jdbc_driver_class> -DSPRING_DATASOURCE_URL=<jdbc_url> YourMainClass

还以相同的方式传递其他两个变量,即用户名和密码!

您甚至可以在操作系统级别上设置这些环境变量,因此您不必在每次启动应用程序时都进行设置...

如果您使用的是Spring Boot,也可以看看以下内容:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

答案 1 :(得分:0)

使用语法${}时,实际上是在告诉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)或通过环境变量来传递它们。您可以查看春季Boot documentation for more details