我的Spring Boot应用程序需要在应用程序启动时从数据库作为缓存将一些数据从数据库加载到Bean的字段中,而我所做的就是代码打击

@Component
public class FooCache {

  private FooRepository repository;
  private static List<Foo> foos;

  public FooCache(FooRepository repository) {
    this.repository = repository;
  }

  @EventListener
  public void onApplicationEvent(ContextRefreshedEvent event) {
    foos = repository.findAll();
  }
}


问题是


是否可以保证在调用onApplicationEvent之前正确初始化了数据库连接池?
是否可以保证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);
    };
}


}

09-10 01:17
查看更多