Как разделить значение свойства в application.properties

Я хочу разделить значение свойства, определенного application.properties, и использовать его как значение для другого свойства.

Ниже приведены мои свойства в файле application.properties.

test.product.release.version=2003.1
test.product.release.year=${test.product.release.version}.split('.')[0]

Я хочу стоимость недвижимости test.product.release.year как 2003

Я пробовал разделить с помощью ${test.product.release.version}.split('.')[0], но когда я получаю свойство в своем контроллере, я все равно получаю значение как 2003.1.split('.')[0]

Как я могу получить это только как 2003?

почему бы вам не загрузить его как массив?

Deadpool 30.07.2019 07:44

@Deadpool Я не хочу этого, потому что хочу снова использовать свойство test.product.release.year в качестве значения для другого свойства.

Sameer 30.07.2019 07:47

попробуйте мой ответ, я проверил его и работает

Deadpool 30.07.2019 08:22
3
3
1 297
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

С моей точки зрения, вы должны рассмотреть другую точку зрения:

test.product.release.version.year=2003
test.product.release.version.sub=1
test.product.release.version=${test.product.release.version.year}.${test.product.release.version.sub}

Я не могу использовать два свойства, потому что значение свойства test.product.release.version.year не контролируется установщиком, который я не хочу трогать.

Sameer 30.07.2019 08:12

Используйте следующее выражение. Это сработает.

@Value("#{\"${test.product.release.version}\".split(\"\\.\")}")
private String[] myValues;

// this will give you year part.
@Value("#{\"${test.product.release.version}\".split(\"\\.\")[0]}")
private String year;
Ответ принят как подходящий

Вы можете получить год в контроллере напрямую

@Value("#{'${test.product.release.version}'.split('[.]')[0]}")
private String year;

Так же и для версии

@Value("#{'${test.product.release.version}'.split('[.]')[1]}")
private String version;

Точно так же вы можете указать это выражение в файле свойств.

test.product.release.version=2003.1
test.product.release.year = "#{'${test.product.release.version}'.split('[.]')[0]}"
test.product.release.version = "#{'${test.product.release.version}'.split('[.]')[1]}"

А затем используйте @Value, чтобы прочитать test.product.release.year

@Value("${test.product.release.year}")
private String value;
test.product.release.version = "#{'${test.product.release.vers‌​ion}'.split('[.]')[1‌​]}" по-прежнему дает мне значение, так как "#{'V2003.1'.split('[.]')[0]}" я получаю его через АннотацияОкружающая среда #getProperty
Sameer 30.07.2019 08:36

почему ты не используешь @Value ?

Deadpool 30.07.2019 08:38

потому что вы упомянули в ответе Точно так же вы можете указать это выражение в файле свойств.

Sameer 30.07.2019 08:40

проверьте мой обновленный ответ, он работает для меня как в файле yml, так и в файле properties @Sameer

Deadpool 30.07.2019 08:42

а также я тестировал с помощью env.getProperty("test.product.release.year", это дает мне "#{'2003.1'.split('[.]')[0]}", поэтому просто используйте @Value вместо env

Deadpool 30.07.2019 08:45

А также вы можете задать другой вопрос, почему он возвращает выражение вместо значения при использовании Env извините, у меня нет этой информации @Sameer

Deadpool 30.07.2019 08:59

Поскольку вы собираетесь иметь одно свойство и получить другое из первого, было бы лучше сделать это, как показано ниже:

приложение.свойства

test.product.release.version=2003.1

Класс конфигурации

@Value("${test.product.release.version}")
private String version;
@Value("#{'${test.product.release.version}'.split('\\.')[0]}")
private String year;

Если версия не настроена, {'${test.product.release.version}'.split('\\.')[0]} сломается.

Jobin 30.07.2019 08:18

Определение @JobinJoseph test.product.release.version является обязательным условием как часть самого вопроса. Очевидно, что если он не определен и не используется с @Value, приложение вообще не запустится.

Madhu Bhat 30.07.2019 08:21

Так что лучше использовать @ConfigurationProperties см. здесь stackoverflow.com/a/47178928/2893693

Jobin 30.07.2019 08:24

@JobinJoseph @ConfigurationProperties — это просто еще один способ использования свойств, но суть вопроса не в этом.

Madhu Bhat 30.07.2019 08:28

Другие вопросы по теме

Автоматическое обновление кеша Springboot с помощью redis и apache ignite
Недопустимое исключение аргумента: недопустимый символ base64 3a при декодировании строкового значения с использованием Base64.getDecode()
Как включить фильтр для URL-адреса, содержащего определенное слово?
Spring Cloud Data Flow игнорирует источники данных, настроенные весенним пакетным приложением
Спящий режим, не очищайте сеанс после возникновения проблемы с исключением
Как создавать собственные датчики с помощью Spring Boot и Micrometer?
Выполнение операций записи в таблицы в двух отдельных базах данных из одного монолитного приложения Springboot
Фильтровать объект из списка на основе значения свойства Spring Boot
Как сохранить данные потока Twitter в базу данных Postgres с помощью Spring Cloud Dataflow?
Как заставить конечные точки принимать только uris с поддержкой @crossorigin в springboot при доступе с использованием шаблона resttemplate? Почему я не получаю ошибку cors?