Spring Boot - 非Web应用程序的长期运行应用程序

时间:2015-11-01 22:28:26

标签: java spring spring-boot

我有一个简单的Spring-Boot应用程序,只使用AMQP依赖项(仅'org.springframework.boot:spring-boot-starter-amqp' - 例如没有Web依赖项,因此JAR中不包含任何app服务器。)

我想要的只是让应用程序运行并收听队列并在收到消息时将一些信息记录到数据库 - 但是,由于没有应用程序服务器,一旦启动它就会再次关闭(因为没有做任何事)。是否有最好的方法可以在监听消息的同时保持此应用程序的运行?

代码中没有什么令人惊讶的,只有标准的应用程序配置,然后还有一个标有@RabbitListener的类

@SpringBootApplication
class PersistenceSeriveApplication {

    static void main(String[] args) {
        SpringApplication.run PersistenceSeriveApplication, args
    }
}

@Configuration
@EnableRabbit
class QueueConfiguration {

    @Bean public Queue applicationPersistenceQueue( @Value( '${amqp.queues.persistence}' ) String queueName ) {
        new Queue( queueName )
    }
}

(我考虑的一个选项就是调整预定的流程 - 只是一个心跳或其他东西,无论如何都可能很适合监控 - 但还有其他更好/标准的方法吗?)

1 个答案:

答案 0 :(得分:2)

您需要确保启动消息侦听器容器bean,如示例中所示:

 @Bean
 SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames(queueName);
    container.setMessageListener(listenerAdapter);
    return container;
}