首先,您使用的是最新的 Spring/BlazeDS 集成吗?如果没有,我强烈建议在这里查看。它可以大大简化为推送消息设置消息目的地。如果您愿意,它还将允许您使用 JMS 和 Spring Integration 消息目标以及集成 Spring Security。
现在回答你的问题。您的数据推送服务的生命周期要求是什么?您是否希望能够从其他类控制此数据推送的参数(即启动和停止、频率等)?使用 Spring 创建此服务将允许您根据需要将其注入其他 bean 以进行控制。
我目前有一个类似的用例,我使用 BlazeDS 消息目标将遥测数据“推送”到客户端浏览器。我设置了一个由 Spring 实例化为单例实例的“服务”类。
如果您不需要对此单例进行外部控制,那么我建议您使用带注释的@PostConstruct 或“init”方法来创建线程并使用代表主循环的匿名 Runnable 启动它。如果您的服务需要以预定义的频率推送数据,您可以考虑使用 java.util.concurrent.ScheduledExecutorService。
无论哪种方式,您还需要设置一个带注释的@PreDestory 或“destroy”方法,该方法将在单例实例被销毁之前执行。这将允许您插入代码以安全地停止循环 Thread 或 ScheduledFuture 并在 Spring 容器关闭之前清理任何必要的资源。
如果您希望与您的服务进行进一步的交互,您可以使用服务接口从其他类(例如 Web 控制器等)对其进行操作。让您的类实现此接口并使用此接口将您的类注入其他类。对于更大胆的解决方案,您可以考虑使用 dm Server 或其他 OSGi 容器并创建 OSGi 服务。
如果您需要有关此过程的进一步帮助,或者是否有我可以进一步说明的具体细节,请告诉我。