次のコードがあります。
コントローラ:
eventNotifier.saveMessage(buildMessage(message, room, sender));
EventNotifier:
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 からのログはありません。