记一次在Servcie中使用@Value无效问题

记一次在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的执行顺序有关,奈何技术力不够,只能换个方法先跑通再说了,希望路过的大佬能指点一下,谢谢了😣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值