Spring中使用ApplicationRunner为项目设置常量

最近开发的一个项目中有许多常量。为了优化代码,项目将这些常量的值存储在数据库中,希望能在程序启动后从数据库查出。

由于没有经验,一开始我就这样写:

@Component
public class CustomConstants {
    @Autowired
    private propertyService propertyService;

    public static String CONSTANT_1 = propertyService.get("CONSTANT_1");
}

我以为可以在spring启动后注入propertyService,然后CONSTANT_1自动查询。

随后发现启动不了。这很可能表明声明成static的CONSTANT_1的初始化先于spring,导致还未注入propertyService时就进行查询,导致错误。

 

我的目标是在spring启动后就立刻进行CONSTANT_1的初始化。

经过一番搜索和询问,我找到了ApplicationRunner接口。它可以实现上述目标。

现在代码改成这样:

@Component
public class CustomConstants implements ApplicationRunner {
    @Autowired
    private propertyService propertyService;

    public static String CONSTANT_1 = null;
  
  @Override
  public void run(ApplicationArguments args){
     CONSTANT_1 = propertyService.get("CONSTANT_1");
  }
}

实现ApplicationRunner接口的类,其run方法会在spring启动后被调用。这样,就可以成功查询到了。

如果有多个ApplicationRunner,担心它们的启动顺序不对的话,可以在类上使用@Order(1)注解,数字填写启动的顺序即可。

posted @ 2021-07-21 14:37  lpjworkroom  阅读(383)  评论(0编辑  收藏  举报