在Springboot中从MessageListener调用时数据无法持久存储到mysql

时间:2019-03-07 12:41:54

标签: java spring-boot jpa spring-data-redis message-listener

我有一项更新MySQL中单元格的服务。当从控制器调用该服务时,它运行良好。

但是,从 MessageListener 调用时,同一服务无法保留数据。我的听众如下

    public class KeySpaceNotificationMessageListener implements MessageListener
{
     @Autowired
     ServiceImpl service;

     @Override
    public void onMessage(Message message, byte[] pattern) 
    {
          if( (data = createPublishData(new String(message.getBody()), new String(message.getChannel()))) != null)
        {
            LOG.info("publishing data to deepstream channel with payload = {}", data);

    }

   private String createPublishData(String messageBody, String messageChannel)
    {
         //find id from message channel
         service.unAssign(id);
         return someString;
    }
}

ServiceImpl取消分配方法

@Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
    public ResponseEntity<String> unAssign(Long Id) 
    {
        Optional<Image> Image = ImageRepository.findById(Id);

        if(!Image.isPresent())
            throw new ResourceNotFoundException("could not find image with id = " + Id);

        Image.get().setAssignedTo(null);

        return new ResponseEntity<String>("Unassign successfull", HttpStatus.OK);
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

除非Image类中发生任何魔术,否则您需要在调用ImageRepository.save(Image.get())之后再调用Image.get().setAssignedTo(null)。假设ImageRepositoryorg.springframework.data.repository.CRUDRepository的实现。