记一次在Servcie中使用@Value无效问题
前言
在使用@Value的前提就是属性不是静态的,final的,且类上需要有例如@Component的注解,把类交由spring管理,我出现的问题是在@Service类中使用@Value依然找不到配置属性(其实也不是找不到,是注入的太晚了,在其他属性使用前还没有注入配置)
一、错误的使用
本意是想通过配置来改缓存超时时间的
@Service
public class ServiceImpl implements Service {
@Value("${result.timeout}")
private Integer cacheTimeout;
private final Duration TIMEOUT = Duration.ofMinutes(cacheTimeout);
}
这里只是注入了一下
@RestController
@RequestMapping("/xxx")
public class Controller {
@Resource
private OcrService ocrService;
}
启动项目结果就是
private final Duration TIMEOUT = Duration.ofMinutes(cacheTimeout);
这里报错,cacheTimeout为null
二、更改为
@Service
public class ServiceImpl implements Service {
private Duration TIMEOUT;
@Value("${result.timeout:10}")
public void setTIMEOUT(String cacheTimeout) {
this.TIMEOUT = Duration.ofMinutes(Objects.equals(cacheTimeout,"")?10:Integer.parseInt(cacheTimeout));
}
}
这里使用了setter方法的@Value,添加了默认时间为10,这样启动项目就不会报错了,使用也能拿到值
总结
我觉得可能是controller注入service和@Value的执行顺序有关,奈何技术力不够,只能换个方法先跑通再说了,希望路过的大佬能指点一下,谢谢了😣