gpt4 book ai didi

java - 如何编写不创建要在 spring 配置生命周期中运行的 bean 的启动逻辑?

转载 作者:行者123 更新时间:2023-11-29 04:59:08 25 4
gpt4 key购买 nike

除了使用@configuration 和@bean 配置的传统 bean 之外,我们的代码中还有一些必须在启动时完成的启动逻辑,例如在数据库上运行 liquibase,将配置数据从文件加载到数据库,以及执行一些理智测试。这些都与之后 Autowiring 的 Bean 没有真正关联,更改是通过数据库而不是 spring 持久化的。但是,还有很多工作要做。其中大部分还取决于已完成的早期步骤和/或 Autowiring 的服务。

在 spring 上下文中执行此操作的最佳方法是什么?我知道有一个 ApplicationContextAware 我们可以用来启动这个逻辑,但由于一些原因它似乎不合适

  1. 它会运行应用程序上下文刷新,而不仅仅是在启动时
  2. 这将允许只运行一个类,我更愿意能够像我们@configuration 那样编写逻辑,我可以在其中放入一个新组件并让它在适当的地方运行
  3. 至少在一种情况下,我们有一个 bean 在某些数据库配置完成之前无法正确配置,这意味着我们希望此配置逻辑在 spring 启动的中间运行,而不是在结束时运行。

目前我们采用的方法是一个没有@bean 方法的@Configuration 类,而是使用afterPropertiesSet() 来运行一个数据库配置文件,该文件在大型配置方法中按顺序经历每个数据库配置阶段。这确实工作得很好,但感觉它打破了 @configuration 的预期用途,明确用于为以后的 Autowiring 创建 @bean 定义。

spring 是否提供了一种更好的方法来将非 bean 配置添加到它的配置/ Autowiring 阶段的中间,或者这是可用的最佳方法?

要回答评论中的问题,这是一个使用 spring-mvc 的 Restful Web 应用程序。当网络服务器启动时, war 就开始了。

最佳答案

我有类似的要求,我想在我的服务器启动时从数据库中获取记录并将其放入我的缓存中,我通过在我的服务类中编写一个方法并将其注释为 @PostConstruct。将发生的情况是,一旦 Bean 创建完成,此方法就会执行,并且只会在 bean 创建后或服务器启动期间执行一次。

这非常简单,因为您无需编写单独的类,只需在您的 Controller /服务类中创建一个额外的方法即可。

关于java - 如何编写不创建要在 spring 配置生命周期中运行的 bean 的启动逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com