近日,遇到一个问题,@PostConstruct方法会莫名执行多次,单看代码看不出问题,印象中也只会在bean初始化的时候执行一次而已。
然后问AI,问百度,没找到原因。
后面自己猜测(现在都是面向猜测编程),发现是nacos配置变更导致的,nacos配置每次变更之后都会调用@PostConstruct,后来换成afterPropertiesSet也是一样。
所以使用@PostConstruct或者afterPropertiesSet一定要保证幂等性。
不过只有配置类(包括@ConfigurationProperties注解的才会重复调用,其它没验证过)。
原理是配置类刷新了之后会调用@PostConstruct,我已经替大家把几种情况都试出来了。
如果使用@ConfigurationProperties注解,不需要@RefreshScope注解就会刷新。
如果使用@Value注解,需要@RefreshScope注解才会刷新。
如果使用@ConfigurationProperties注解,配置一变更,@PostConstruct方法就会执行。
如果使用@Value注解搭配@RefreshScope注解,则需要用到配置类的时候@PostConstruct方法才会执行。有个懒加载的机制。