Spring Boot如何从环境变量绑定数据源属性
解决Spring Boot通过JVM系统属性填充数据库配置的问题
这个问题我之前也碰到过,核心是你传递的JVM系统属性名和配置文件里引用的变量名没对应上,所以才会出现绑定无效的情况。下面给你两种可行的解决办法:
方法一:配置文件直接对应系统属性名
你启动命令里用-DdbUrl=URL这类参数设置的是JVM系统属性,名字分别是dbUrl、dbUser、dbPassword,所以只要在application.properties里直接引用这些名字就行:
spring.datasource.url=${dbUrl} spring.datasource.username=${dbUser} spring.datasource.password=${dbPassword}
这样启动时Spring Boot会自动读取这些JVM系统属性的值,填充到对应的数据源配置项里。
方法二:修改启动命令的系统属性名(不推荐)
如果你想继续在配置文件里用${URL}这种写法,那需要把启动命令里的系统属性名改成对应的名字:
java -jar demo-0.0.1-SNAPSHOT.jar -DURL=URL -DUSER=USER -DPASSWORD=PASSWORD
不过这种全大写的命名不符合常规的配置属性命名规范,更推荐用第一种方法。
补充说明:如果后续你想用操作系统环境变量(比如Linux下的export DB_URL=xxx)而不是JVM系统属性,Spring Boot会自动处理命名转换——比如环境变量DB_URL会被映射为配置属性dbUrl,这时候配置文件里写${dbUrl}或者${DB_URL}都能生效,但JVM系统属性是严格匹配名字的,这一点要注意区分。
内容的提问来源于stack exchange,提问作者stoxa
相关产品推荐
相关产品推荐

