@Value в SpringBoot в 2.1.1.RELEASE

У меня это значение определено в файле application.properties

tdk.date.format=yyyy-MM-dd'T'HH:mm:ss'.000Z'

что я использую в этом классе:

public class TdkDateUtils {


    private static final Logger LOG = LoggerFactory.getLogger(CryptoDateUtils.class);


    @Value("${tdk.date.format}")
    private static String tdkDateFormat;

    public static boolean afterYesterday2(String strDate) throws ParseException {

        LOG.debug("tdkDateFormat -> {} ", tdkDateFormat);

        SimpleDateFormat format = new SimpleDateFormat(tdkDateFormat);  
        Date yesterdayDate = Date.from(Instant.now().minus(1, ChronoUnit.DAYS));
        return format.parse(strDate).after(yesterdayDate);
    }
}

но это ноль

Является ли TdkDateUtils компонентом типа component или service ?? Я не вижу на нем аннотации. Spring не сможет вводить в него значения, если Spring не сможет просканировать класс и сгенерировать из него bean-компонент.

Acewin 08.01.2019 16:57

Я не думаю, что ваша проблема связана с версией Spring Boot.

Acewin 08.01.2019 16:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

TdkDateUtils - это служебный класс, а afterYesterday2 - статический метод. Он существует полностью вне контекста Spring вашего приложения, аннотации вроде @Value здесь обрабатываться не будут.

Чтобы @Value работал, вам нужно сделать TdkDateUtils bean-компонентом, поскольку только компоненты Spring будут обрабатываться PropertyPlaceholderConfigurer. В качестве альтернативы можно было бы прочитать и установить свойство самостоятельно в блоке статической инициализации TdkDateUtils, но это противоречит философии Spring внедрения зависимостей.

Spring не позволяет вводить значения в статические переменные. Создайте нестатический метод установки для ввода значения.

private static String tdkDateFormat;

@Value("${tdk.date.format}")
public void setDateFormat(String s){
   tdkDateFormat = s;
}

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