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

问题描述 投票:0回答:2

我正在使用外部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}

有人可以向我解释吗?

spring spring-boot application.properties
2个回答
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


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
© www.soinside.com 2019 - 2024. All rights reserved.