为了账号安全,请及时绑定邮箱和手机立即绑定

如何在启动Spring应用程序之前初始化数据结构?

如何在启动Spring应用程序之前初始化数据结构?

收到一只叮咚 2023-09-27 14:23:18
我有一个用于初始化它的数据结构,我需要向数据库发出请求,然后调用将为数据结构准备数据的对象,然后才对其进行初始化。在启动 spring-mvc 应用程序之前我该怎么做?我正在尝试使用 @PostConstruct 和 @EventListener(ApplicationReadyEvent.class) 等注释,但它们是随 spring 应用程序启动的,目前数据结构尚未初始化。有代码示例:public class DataStructure{    Collection data = new Collection();//some kind of collection    @PostConstruct    public void initDS(){        DataFromDataBase data = ...;        SomeObjectThatPrepareData obj = new SomeObjectThatPrepareData(data);        Collection preparedData = obj.prepareData();        preparedData.forEach(DataStructure::addData);    }    private void addData(Data data){ ... }    ...}public class ClassThatUseDataStucture{     private static DataStructure readyData;     static{         readyData = new DataStructure();         readyData.initDS();     }    ...}
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

如果您想在 Spring boot 应用程序启动时设置/初始化某些内容,您应该使用ApplicationRunner或CommandLineRunner。


Spring boot 提供了一个ApplicationRunner带有回调 run() 方法的接口,可以在实例化 Spring 应用程序上下文后在应用程序启动时调用该方法。


例如


@Component

public class AppStartupRunner implements ApplicationRunner {


    @Override

    public void run(ApplicationArguments args) throws Exception {

        // Setup or initialization activities

    }

}

或者您可以按照 Aniket 在评论中的建议创建 Bean:


@Bean 

ApplicationRunner thisWillRunAutomatically() 

{

    return args -> { ... };

}

查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信