【发布时间】:2016-09-09 12:44:44
【问题描述】:
我有以下代码:
控制器:
eventNotifier.saveMessage(buildMessage(message, room, sender));
事件通知器:
public void saveMessage(Message message){
r.notify(EventConsumer.NEW_MESSAGE, Event.wrap(message));
}
事件消费者:
@PostConstruct
public void onStartUp() {
r.on(Selectors.R(MESSAGE_SAVED), createEventAndPush());
r.on(Selectors.R(NEW_MESSAGE), saveMessage());
r.on(Selectors.R(EVENT), pushToMixpanel());
}
public Consumer<Event<Message>> saveMessage(){
System.err.println("Calling save async");
return event -> messageRepo.save(event.getData());
}
原来saveMessage 方法从未被调用过。我看到它在启动服务器过程中被调用过一次。
我不确定这是反应堆相关还是弹簧相关。
编辑:我将保存过程移至服务,没有任何改变
edit2:我记录了服务操作以查看发生了什么:
@Service
@Slf4j
public class MessageService {
@Autowired MessageRepository messageRepo;
@Transactional
public void save(Message m){
try{
log.info("Saving...");
messageRepo.save(m);
log.info("Saved");
}catch(Exception e){
e.printStackTrace();
}
}
控制台的输出是:
2016-09-09 16:24:42.152 INFO 45041 --- [ wa-chub-2] com.inkdrop.app.services.MessageService : Saving...
2016-09-09 16:24:42.154 INFO 45041 --- [ wa-chub-2] com.inkdrop.app.services.MessageService : Saved
没有来自 JPA 的日志,什么都没有!
【问题讨论】:
-
如果
EventConsumer是一个spring bean,它说明onStartup()方法在创建bean 时只被调用一次。 -
是的,
EventConsumer是弹簧豆
标签: spring spring-boot reactor project-reactor spring-async