Вычисление выражения Spring SpEL для свойства yml приложения

#spring #spring-boot #spring-el

#spring #spring-boot #spring-el

Вопрос:

Я пытаюсь получить значение для свойства в моем приложении.файл конфигурации yml, использующий выражение Spring SpEL, но, похоже, выражение не вычисляется. Вот мое приложение.фрагмент yml:

 spring:
  profiles: local
  cloud.client.hostname: abc.pqr.xyz.lmn.westus.env.company.com
  boot:
    admin:
      client:
        instance:
            metadata.tags.environment: local
            metadata.tags.dc: "#{'${spring.cloud.client.hostname}'.split('.')[4]}"
        url: http://localhost:8079
  

Во время выполнения свойство spring.boot.admin.client.instance.metadata.tags.dc оценивается до abc.pqr.xyz.lmn.westus.env.company.com.split('.')[4] , и ожидается, что оно будет оценено до westus .

Чего я не понимаю?

Комментарии:

1. обычно в Java split() в качестве входных данных используется регулярное выражение, а не отдельный символ. возможно, '.' требуется экранирование. попробуйте с .split('\.')

Ответ №1:

SpEL не поддерживается в application.yml .

Вместо этого используйте @Value("#{'${spring.cloud.client.hostname}'.split('\.')[4]}" ) String property в коде.