Страницы

Поиск по вопросам

четверг, 27 февраля 2020 г.

@value( ${} ) в spring не работает

#java #xml #spring


Пишу приложение на java с использованием Spring. Нужно передать значение ключа из
файла app.properties в поле класса. Передает null. Выскакивает NullPointerException,
уже не знаю что и делать, помогите кто чем может

конфигурация spring:






    



файл properties:

price=^[1-9][0-9.]{0,10}


в классе:

import org.springframework.beans.factory.annotation.Value;
....
@Value("${price}")
private String price;
private Pattern PRICE_REGEX = Pattern.compile(price);

    


Ответы

Ответ 1



@Value("${price}") в твоём случае работает. Другое дело, что ты вызываешь private Pattern PRICE_REGEX = Pattern.compile(price); до того, как отработает @Value. Тебе надо перенести логику инициализации PRICE_REGEX в post-конструктор. На выходе должно получиться примерно так: import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.regex.Pattern; @Component public class Question909652 implements InitializingBean { @Value("${price}") private String price; private Pattern PRICE_REGEX; @Override public void afterPropertiesSet() throws Exception { PRICE_REGEX = Pattern.compile(price); } } Ну или можно похитрить и использовать всю мощь SpEL import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.regex.Pattern; @Component public class Question909652 { @Value("#{T(java.util.regex.Pattern).compile('${price}')}") private Pattern PRICE_REGEX; } P.S. Как правильно заметил @Qwertiy, у тебя очень странное регулярное выражение для цены, быть может тебе больше подойдёт [0-9]*([.][0-9]{1,2})?

Ответ 2



Добавь аннотацию @PropertySource("classpath:app.properties").

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

Отправить комментарий