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

Spring Boot-无限循环服务

崔博延
2023-03-14

我想构建一个无头应用程序,它将在无限循环中查询数据库,并在某些条件下执行一些操作(例如,获取具有特定值的记录,当发现时,为每个消息启动电子邮件发送过程)。

我想使用Spring Boot作为基础(特别是因为Actuator允许公开健康检查),但现在我使用Spring Boot构建REST Web服务。

在构建无限循环应用程序时,是否有任何最佳实践或模式可遵循?有没有人试图基于Spring Boot构建它,并可以与我分享他在这个案例中的架构?

最好的问候。

共有1个答案

殳俊
2023-03-14

有几种选择。我的方法是在ApplicationReadyEvent上启动一个循环,并将循环逻辑抽象到一个可注入服务中。在我的例子中,这是一个游戏循环,但这种模式也应该适用于您。

package com.ryanp102694.gameserver;

import com.ryanp102694.gameserver.service.GameProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class GameLauncher implements ApplicationListener<ApplicationReadyEvent> {
    private static Logger logger = LoggerFactory.getLogger(GameLauncher.class);

    private GameProcessor gameProcessor;

    @Autowired
    public GameLauncher(GameProcessor gameProcessor){
        this.gameProcessor = gameProcessor;
    }

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        logger.info("Starting game process.");
        gameProcessor.start();
        while(gameProcessor.isRunning()){
            logger.debug("Collecting user input.");
            gameProcessor.collectInput();
            logger.debug("Calculating next game state.");
            gameProcessor.nextGameState();
            logger.debug("Updating clients.");
            gameProcessor.updateClients();
        }
        logger.info("Stopping game process.");
        gameProcessor.stop();
    }
}

 类似资料:
  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类

  • 基本上,findNode()搜索其数据等于作为参数插入的字符串的节点,但当我调用outputList()方法(该方法返回屏幕上当前节点的字符串表示)时,它将继续无限循环。 outputList方法是: 如有任何帮助,我们将不胜感激。提前道谢。

  • 我有一个带感应帽的覆盆子皮。我制作了一个二进制时钟,我想在Sense hat的显示器上显示并保持更新。然而,我想要的能力,开关时钟与操纵杆中间。一切都很好,除了我的时钟的更新循环阻止任何新的输入一旦启动。 我一直在考虑如何解决这个问题。如何允许脚本/时钟保持运行,并且仍然接受来自操纵杆的新操作。但是一旦while循环开始,我就卡住了。我不知道该用谷歌搜索什么。我已经开始研究async/await,

  • 问题内容: 为什么我在递归方法中遇到无限循环,而没有机会输入任何符号来破坏它? 如果您尝试创建错误(将字符串值输入键,然后尝试向其添加数字),则您将在控制台中获得无限的“错误”文本,而不是在第一次错误后,程序应再次询问该数字和然后才决定要做什么。 问题答案: 如果失败,则抛出异常,但不使用无效数据。从文档中: 当扫描程序抛出时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌

  • 我一直在玩React 16.7-alpha中的新钩子系统,当我处理的状态是一个对象或数组时,我陷入了useEffect中的无限循环中。 首先,我使用useState并用一个像这样的空对象启动它: 然后,在useffect中,我使用setObj再次将其设置为空对象。作为第二个参数,我正在传递[obj],希望如果对象的内容没有改变,它不会更新。但它一直在更新。我猜是因为无论内容是什么,它们总是不同的对