当前位置: 首页 > 知识库问答 >
问题:

向Spring Boot应用程序添加初始化代码的正确方法是什么?

樊运乾
2023-03-14

TLDR:我希望我的Spring Boot应用程序在启动时运行一些初始化代码。代码需要访问Spring bean和值。

我正在编写一个Spring Boot应用程序,它将同时使用来自队列的多条消息。为了做到这一点,它需要实例化多个消费者对象。Spring是否有一个好的方法来实例化相同类的可配置的实例数?

我考虑了下面的方法,但我觉得不对。这似乎是对@component注释的滥用,因为initializer实例在构造后没有使用。有什么更好的方法做这件事?

@Component
public class Initializer {

    public Initializer(ConsumerRegistry registry, @Value("${consumerCount}") int consumerCount) {
        for (int i = 0; i < consumerCount; i++) {
            // Each registered consumer results in a thread that consumes messages.
            // Incoming messages will be delivered to any consumer thread that's not busy.
            registry.registerConsumer(new Consumer());
        }
    }

}

共有1个答案

太叔正文
2023-03-14

ApplicationListener可以满足您的需要。它在注册的事件上得到通知,例如当ApplicationContext就绪时。您将拥有对所有bean和injection的完全访问权。

@Component
public class StartupApplicationListener implements ApplicationListener<ApplicationReadyEvent> {

    @Inject
    private ConsumerRegistry registry;

    @Inject
    @Value("${consumerCount}")
    private int consumerCount;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        //do your logic
        for (int i = 0; i < consumerCount; i++) {
            // Each registered consumer results in a thread that consumes messages.
            // Incoming messages will be delivered to any consumer thread that's not busy.
            registry.registerConsumer(new Consumer());
        }
    }
}
 类似资料:
  • 问题内容: 用RefluxJS异步初始化数据的正确方法是什么?是否有类似于AngularJS的解决方案,或者Flux的实现与此无关(路由器应该处理此职责)? 问题答案: 在应用程序的顶级组件中,使用方法(docs)触发获取数据的操作。最初渲染组件时将调用此方法。 例如:

  • 我有以下配置类: 我希望能够从应用程序的主方法加载bean。像这样的东西: schedulerService类具有一个

  • 问题内容: 要声明一个具有固定大小的空切片,最好这样做: 要么: 只想知道哪种方法是正确的。 问题答案: 您提供的两个选择在语义上是相同的,但是使用会导致内部调用 runtime.makeslice (Go 1.14)。 您还可以选择保留其值: 如Golang.org博客中所述: nil切片在功能上等效于零长度切片,即使它没有指向任何内容。它的长度为零,可以附加分配。 甲片段将然而入而空片将编组成

  • 要声明大小不固定的空切片,最好执行以下操作: 或: 只是想知道哪一个是正确的方法。

  • 本文向大家介绍详解SpringBoot程序启动时执行初始化代码,包括了详解SpringBoot程序启动时执行初始化代码的使用技巧和注意事项,需要的朋友参考一下 因项目集成了Redis缓存部分数据,需要在程序启动时将数据加载到Redis中,即初始化数据到Redis。 在SpringBoot项目下,即在容器初始化完毕后执行我们自己的初始化代码。 第一步:创建实现ApplicationListener接

  • 我有一个jhipster项目,项目中定义了一个sonarqube任务。我们在/src/main/UI/src/目录下构建了一个react UI...和/src/main/ui/src/test/...sonarqube的资产如下: 目前,sonar只接收标准/src/main/java下的java。我尝试添加属性“sonar.sources”、“src/main/ui/src/*.js”、属性“s