我正在使用外部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}
有人可以向我解释吗?
答案 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}
的驱动程序不存在。
要解决此问题,您可以:
${}
替换为实际值,例如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。