在Spring应用程序启动时,我想在Redis中查找一个值,并根据该值关闭或保留消息侦听器。
完全不初始化这些bean也是可以的,但是我也找不到方法。
目前,我正在尝试使用Spring的Application ationReadyEvents
关闭容器:
@Component
public class ApplicationStartup implements ApplicationListener<ApplicationReadyEvent> {
private @Autowired @Qualifier("completedOrderContainer") SimpleMessageListenerContainer container;
private @Autowired RedisManagerImpl redis;
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
if (!Boolean.valueOf(redis.isRabbitListenerActive())) container.shutdown();
}
}
容器
@Bean
@Conditional(RabbitCondition.class)
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses(rabbitHost + ":" + rabbitPort);
connectionFactory.setUsername(rabbitUsername);
connectionFactory.setPassword(rabbitPassword);
return connectionFactory;
}
@Bean
@Conditional(RabbitCondition.class)
Queue completedOrderQueue() {
return new Queue(completedOrderQueueName, true);
}
@Bean
@Conditional(RabbitCondition.class)
TopicExchange completedOrderExchange() {
return new TopicExchange(completedOrderExchangeName);
}
@Bean
@Conditional(RabbitCondition.class)
Binding binding(Queue completedOrderQueue, TopicExchange completedOrderExchange) {
return BindingBuilder.bind(completedOrderQueue).to(completedOrderExchange).with(completedOrderQueueName);
}
@Bean
@Conditional(RabbitCondition.class)
SimpleMessageListenerContainer completedOrderContainer(ConnectionFactory connectionFactory, MessageListenerAdapter completedOrderListenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(completedOrderQueueName);
container.setMessageListener(completedOrderListenerAdapter);
return container;
}
@Bean
@Conditional(RabbitCondition.class)
MessageListenerAdapter completedOrderListenerAdapter(CompletedOrderMessageReceiver receiver) {
return new MessageListenerAdapter(receiver, "completedOrder");
}
消息侦听器:
@Component
public class CompletedOrderMessageReceiver {
public void completedOrder(Object asyncTask) throws Exception {
//impl
}
}
问题是,如果我用已经在队列中的消息启动应用程序,消息侦听器将在执行container.shutdown()
之前拾取消息。
有办法实现我的目标吗?即使采用不同的方法
在侦听器容器上将autoStartup
设置为false
。然后根据需要执行start()
和stop()
操作。
问题内容: 有一种简单的方法可以在调用之前和之后调用JavaScript动作,例如,我想在后备bean中调用 之前 和 之后 调用JavaScript动作: 添加多个元素似乎不起作用(也许应该吗?!),例如 仅被调用。 问题答案: 使用属性。它必须指向一个回调函数引用(所以不要包括括号!): 实际的回调函数如下所示(JSF会自己提供参数):
我们有web服务(jaxws),它正在调用另一个web服务(aslo jaxws)。Jaxws客户端配置如下所示-- 正如您所看到的,我们有两个拦截器和一个故障侦听器。我们希望在这些拦截器、故障侦听器和web服务代码之间进行通信。正如SO线程中所述,我们使用cxf交换对象在web服务和拦截器之间进行通信。 我们的inFaultInterceptor代码如下所示-- } Web服务代码如下所示- 但
问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。
我正在使用Realex Payments的HPP API开发一个卡支付页面,其中包含一个iFrame,用于托管Realex页面。在Realex请求表单上,我将字段HPP_POST_维度和HPP_POST_响应设置为我的URL,如下所示: 付款页: www.example.com/account/payment.html 隐藏字段值用于在HPP页面大小更改和事务完成时,使用事件侦听器将数据从Real
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。例如: <div id="watch-example"> <p> Ask a yes/no question: <input v-model="question">
1. 前言 本节介绍侦听器 watch 的使用方法。包括什么是侦听器,侦听器的特点,以及如何对不同类型的数据进行监听。其中重点掌握对不同类型的数据如何使用侦听器,了解它之后,在才能在之后的日常开发中熟练运用。 2. 慕课解释 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。 — 官方定义 侦听器 watch 是 Vue 提供的一种用来观察和响应 Vue 实例上的数据