2.1.1.RELEASE中SpringBoot中的@Value

时间:2019-01-08 15:55:17

标签: java spring spring-boot spring-mvc

我在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);
    }
}

但为空

2 个答案:

答案 0 :(得分:5)

TdkDateUtils是一个实用工具类,而afterYesterday2是一个静态方法。它完全存在于您的应用程序Spring上下文之外,@Value之类的注释将不在此处处理。

要使@Value工作,您必须使TdkDateUtils一个bean,因为PropertyPlaceholderConfigurer仅处理Spring bean。另外,您也可以自己在TdkDateUtils静态初始化块中读取和设置属性,但这违反了Spring依赖注入的原理。

答案 1 :(得分:2)

Spring不允许将值注入静态变量。创建一个非静态的setter方法来注入值。

private static String tdkDateFormat;

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