Конфигурация lightbend: передать динамические значения в файле application.properties

Я использую lightbend в своем коде scala, чтобы мой 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.

Ниже приведена моя команда отправки искры:

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 и


person toofrellik    schedule 28.08.2019    source источник


Ответы (2)


Вы можете переопределить все настройки в application.properties системой. характеристики.

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

При использовании библиотеки по умолчанию свойства системы с точным соответствием уже переопределяют соответствующие свойства конфигурации.

Это не требует никаких изменений в файле конфигурации внутри jar.

person Thilo    schedule 28.08.2019
comment
Это работает, но у меня есть другая проблема из-за этого, он делает мой следующий параметр как * вместо того, чтобы брать параметр из файла конфигурации. Я генерирую URL-адрес hdfs из файла конфигурации, поэтому мой следующий параметр - time, поэтому перед использованием вышеуказанного кода он был 20190829/00, а теперь стало 20190829/* любое представление, почему это происходит? все, что я добавил в команду Spark submit, это --driver-java-options -DDate_read_write=`date +%Y%m%d` - person toofrellik; 29.08.2019
comment
@toofrellik Обновите свой вопрос, указав, как вы определяете time. - person Thilo; 29.08.2019
comment
Можете ли вы также показать код, который считывает конфигурацию для создания URL-адреса? - person Thilo; 29.08.2019
comment
Я устал использовать всевозможные параметры, даже пытался создать переменную bash и отправить ее в команду отправки искры, но все же, когда задание запускается, оно делает time как *, не знаю почему! - person toofrellik; 29.08.2019
comment
Наверное, это что-то еще / глупое. Вы где-нибудь переопределяете time? Попробуйте изменить имя на более длинное, например Time_read_write. Также попробуйте заключить *_W в двойные кавычки. - person Thilo; 29.08.2019
comment
Вы также должны иметь возможность выполнять конкатенацию в файле конфигурации, а не в коде: target_hdfs_path = ${hdfs_link}/${mediaKey}/${eventName}. Таким образом, вы также можете отменить все это в крайнем случае. - person Thilo; 29.08.2019
comment
Получил, это сработало! это глупый промах, оператор -D<var name> должен быть перед командой --files, иначе он будет выбирать из локального application.properties файла. вот в чем проблема. - person toofrellik; 19.09.2019

Вы можете использовать для этого переменную среды. Просто добавьте подстановку переменной окружения в свой application.properties файл:

date = ${DATE}

Затем, пока вы запускаете приложение, просто установите переменную DATE:

 DATE=`date +%Y%m%d` java -jar yourapp.ja
person Krzysztof Atłasik    schedule 28.08.2019