应用程序启动后初始化spring bean字段

时间:2019-11-18 13:21:36

标签: java spring-boot caching

我的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在应用程序处理用户请求之前进行了初始化?
  • 这是设置应用程序缓存的正确方法吗,还有其他实现此目的的最佳实践吗? (我的意思是在专门初始化的应用程序上从数据库缓存数据)

1 个答案:

答案 0 :(得分:0)

我不确定连接数据库,但是我使用@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);
    };
}

}