Java 应用程序启动后初始化Springbean字段

Java 应用程序启动后初始化Springbean字段,java,spring-boot,caching,Java,Spring Boot,Caching,当应用程序启动时,我的spring boot应用程序需要将一些数据作为缓存从数据库加载到bean的字段中,我所做的是作为代码执行 @组件 公共类FooCache{ 私有存储库; 私有静态列表foos; 公共FooCache(FooRepository存储库){ this.repository=存储库; } @事件监听器 ApplicationEvent(ContextRefreshedEvent事件)上的公共无效{ foos=repository.findAll(); } } 问题是 是否保

当应用程序启动时,我的spring boot应用程序需要将一些数据作为缓存从数据库加载到bean的字段中,我所做的是作为代码执行

@组件
公共类FooCache{
私有存储库;
私有静态列表foos;
公共FooCache(FooRepository存储库){
this.repository=存储库;
}
@事件监听器
ApplicationEvent(ContextRefreshedEvent事件)上的公共无效{
foos=repository.findAll();
}
}
问题是

  • 是否保证在调用应用程序事件之前正确初始化数据库连接池
  • 是否保证在应用程序处理用户请求之前初始化
    foos
  • 这是设置应用程序缓存的正确方式吗?是否有其他最佳实践可以实现这一点?(我的意思是在应用程序上缓存数据库中的数据)

我不确定是否使用连接数据库,但我使用@Bean ApplicationRunner init在我的应用程序运行时初始化了我的对象,但您可以对其进行测试,也许可以帮助您

@SpringBootApplication
公共类CarServiceApplication{

public static void main(String[] args) {
    SpringApplication.run(CarServiceApplication.class, args);
}

@Bean
ApplicationRunner init(CarRepository repository) {
    return args -> {
        Stream.of("Ferrari", "Jaguar", "Porsche", "Lamborghini", "Bugatti",
                "AMC Gremlin", "Triumph Stag", "Ford Pinto", "Yugo GV").forEach(name -> {
            repository.save(new Car(name));
        });
        repository.findAll().forEach(System.out::println);
    };
}

}

第二个保证对Meth也很重要。该方法可以帮助您在应用程序开始时初始化对象