【问题标题】:lightbend config : pass dynamic values in application.properties filelightbend config : 在 application.properties 文件中传递动态值
【发布时间】:2020-01-01 15:04:59
【问题描述】:

我在我的 scala 代码中使用 lightbend,以便我的 application.properties 文件远离我的 jar。我需要在application.properties 文件中传递当前日期。

Date_read_write = 20190828 

如何让它动态拾取,如果是 shell 脚本我可以提及

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'`

对于我的 spark 提交命令,我的 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 --class metrics.MasterAggregateTable --files 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 &

【问题讨论】:

    标签: scala apache-spark config typesafe-config


    【解决方案1】:

    您可以通过系统属性在application.propertiesoverride all the settings

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

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

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

    【讨论】:

    • 这行得通,但我还有其他问题,因为它使我的下一个参数为*,而不是从配置文件中获取一个。我正在从配置文件生成一个hdfs url,所以我的下一个参数是time,所以在使用上面的代码之前它曾经是20190829/00,现在它变成了20190829/*,知道为什么会这样吗?我添加到 spark 提交命令的所有内容是 --driver-java-options -DDate_read_write=`date +%Y%m%d`
    • @toofrellik 请更新您的问题以包括您如何定义time
    • 能否也展示读取配置以生成 URL 的代码?
    • 我厌倦了使用各种选项,甚至尝试创建一个 bash 变量并将其发送到 spark 提交命令,但是当作业运行时它仍然将 time 设为 * no知道为什么!
    • 这可能是别的东西/愚蠢的。您是否在某处重新定义了time?尝试将名称更改为更长的名称,例如 Time_read_write。还可以尝试将 *_W 放在双引号中。
    【解决方案2】:

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

    date = ${DATE}
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2021-12-23
      相关资源
      最近更新 更多