我想从application.properties
运行两个Amazon S3的SDK信息,但是我不想在文件中添加它们,而是想在运行./mvnw spring-boot:run
时添加它们。我看到可以这样做:
./mvnw spring-boot:run -Dspring-boot.run.arguments="--srp.storage.s3.access-key=FOOBARFOOBAR,--srp.storage.s3.secret-key=foobarfoobarfoobarfoobarfoobar"
我尝试运行上面的命令,并在引号周围加上引号,并且引号之间有/没有空格。另外,我尝试在属性文件中保留空白值并完全删除它们。
# srp.storage.s3.access-key=
# srp.storage.s3.secret-key=
srp.storage.s3.access-key=
srp.storage.s3.secret-key=
我有一个用@ConfigurationProperties("srp.storage")
注释的类。这些尝试的结果有所不同,从由于类未找到属性而导致应用程序无法启动到实际运行但没有任何效果。导致服务器无法启动的命令的变化形式是未在application.properties
中指定任何属性,并且尝试运行带引号,不带引号且不带空格的命令。它运行但没有生效的情况是放置空格。
我知道如何使用内置的JAR文件运行它,但我希望能够(如果可能)那样运行它,只是为了防止每次更改内容时都进行构建。
也尝试如此处所示指定占位符,但同样没有成功。我甚至可以使用./mvnw
做我想做的事情吗?还是必须与JAR文件一起使用?
srp.storage.s3.access-key=${access-key}
srp.storage.s3.secret-key=${secret-key}
./mvnw spring-boot:run -Dspring-boot.run.arguments="--access-key=FOOBARFOOBAR,--secret-key=foobarfoobarfoobarfoobarfoobar"
使用环境变量解决。对我来说足够了。不用说,您可以为Spring的文件和变量中的属性选择想要的任何名称,只记得在Linux环境中,必须将变量名称设置为所有大写字母并使用下划线。
在.bashrc
或.zshrc
或类似物中,添加:
export AWS_S3_ACCESS_KEY=FOOBARFOOBAR
export AWS_S3_SECRET_KEY=foobarfoobarfoobarfoobarfoobar
并且如前所示,在application.properties
文件中添加;
srp.storage.s3.access-key=${AWS_S3_ACCESS_KEY}
srp.storage.s3.secret-key=${AWS_S3_SECRET_KEY}
并正常开始。好多了。
如果使用gradle并具有bootRun
任务,则可以将任务配置为读取在运行任务时传递的args。
将以下内容添加到您的构建文件中。
bootRun {
if (project.hasProperty('params')) {
args project.params.split(",")
}
}
然后您可以运行以下命令。
.\gradlew.bat bootRun -Pparams=--demo.prop=commandlinearg
我的字段注释如下
@Value("${demo.prop}")
private String prop;