lightbend config:在application.properties文件中传递动态值

时间:2019-08-28 11:36:38

标签: scala apache-spark config typesafe-config

我在Scala代码中使用了lightbend,因此我的application.properties文件远离了jar。我需要在application.properties文件中传递当前日期。

Date_read_write = 20190828 

如果我可以提及

,那么如何使它动态地显示出来?
Date_read_write=`date +%Y%m%d`

如何在application.properties文件中执行类似的步骤?

更新时间以添加时间

下面是我的application.properties文件:

hdfs_link = hdfs://XX.XXX.XXX.XX:8080/sessions/data/events
mediaKey = 1234
eventName = media
Date_read_write = 20190815
time = *_W
parts = *

我正在使用上面的方法生成hdfs://XX.XXX.XXX.XX:8080/sessions/data/events/1234/media/20190815/*_W/*

使用:

val conf = ConfigFactory.load() 
val hdfs_path = conf.getString("hdfs_link")+"/"+conf.getString("mediaKey")+"/"+conf.getString("eventName")+"/"+conf.getString("Date_read_write")+"/"+conf.getString("time")+"/"+conf.getString("parts")

但是当我添加

--driver-java-options -DDate_read_write=`date --date='1 days ago' '+%Y%m%d'`

令我感到困惑的是,我的URL正在访问hdfs://XX.XXX.XXX.XX:8080/sessions/data/events/1234/media/20190828/*/*

我不知道为什么这个加法会改变time的值。

下面是我的spark提交命令:

  

nohup spark-submit --master yarn --deploy-mode client --num-executors   20 --executor-cores 6 --driver-memory 10g --executor-memory 10g   --classmetrics.MasterAggregateTable-文件application.properties --driver-java-options -Dconfig.file = application.properties --driver-java-options -DDate_read_write =`date +%Y%m%d` --jars com.datastax.spark_spark-cassandra-connector_2.11-2.3.0.jar   UserMetrics.jar&

2 个答案:

答案 0 :(得分:3)

您可以通过系统属性application.properties中的override all the settings

java -DDate_read_write=`date +%Y%m%d` -jar yourapp.jar
  

在该库的默认使用中,完全匹配系统属性已覆盖相应的配置属性。

这不需要对jar内的配置文件进行任何更改。

答案 1 :(得分:2)

您可以考虑为此使用环境变量。 只需在您的application.properties文件中添加环境变量替换:

date = ${DATE}

然后,在运行应用程序时,只需设置DATE变量:

 DATE=`date +%Y%m%d` java -jar yourapp.ja