我在使用token的时候,将密钥和token的生效时间放在了配置文件中,但是当我使用@Value()去获取的时候,发现总是获取不到,而且我发现其他的配置项都是绿色的,只有我的token配置项是白色的,然后经过我的细心检查,发现属性和值之间少了一个空格,添加上这个空格之后,就变成绿色了,然后也能够正常使用@Value去获取值了。
还有一个点就是我们使用@Value()从配置文件中获取配置项时,默认都是String类型,如果我们接收的类型不是,则会自动帮我们进行类型的转换,如果配置中需要long类型的数据,我们不需要添加L结尾。
当我在使用test来测试接收数据时,无法自动进行类型的转化,于是我写了以下语句:
@Value("${token.refreshTime}") private String refreshTimeString; long refreshTime = Long.parseLong(refreshTimeString);
但是我收到的错误是:refreshTimeString为null,经过查阅,告诉我是long refreshTime = Long.parseLong(refreshTimeString)先于注入执行,所以refreshTimeString为null,所以如果我们想这么做,需要这样写:
@Value("${token.refreshTime}") private String refreshTimeString; @PostConstruct public void init(){ long refreshTime = Long.parseLong(refreshTimeString); }
重点是这个注解:@PostConstruct,该注解标记的方法会在依赖注入完成后(即 bean 实例化并设置了所有注入属性之后),在调用该 bean 的任何方法之前被调用。这样我们就可以完成手动的类型转换了。
然后我在使用log.info()时系统总是提示我不存在这个东西,但是我的依赖也加上上了,后来发现是我的类没有加上@Slf4j,需要加上这个,才能在类中使用那个。