我正在使用外部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}
有人可以向我解释吗?
例如,使用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
使用语法${}
时,实际上是在告诉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)或通过环境变量传递。您可以查看弹簧Boot documentation for more details。