Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring @Cacheable无法更新_Spring_Hazelcast - Fatal编程技术网

Spring @Cacheable无法更新

Spring @Cacheable无法更新,spring,hazelcast,Spring,Hazelcast,在spring框架中,我们有@Cacheable来正确缓存数据。现在我的要求是使用Get方法检索数据库中的所有数据 控制器 @RequestMapping(value = "/getUploadData", method = RequestMethod.GET) public ResponseEntity<List<Ticket>> getUploadFileData() throws IOException { return new ResponseEntity

在spring框架中,我们有@Cacheable来正确缓存数据。现在我的要求是使用Get方法检索数据库中的所有数据

控制器

@RequestMapping(value = "/getUploadData", method = RequestMethod.GET)
public ResponseEntity<List<Ticket>> getUploadFileData() throws IOException {
    return new ResponseEntity<>(ticketBookingService.getFileUploadData(), HttpStatus.OK);
}
现在我将通过ticketid执行get和put操作

获取: 控制器:

    @GetMapping(value="/ticket/{ticketId}")
public Ticket getTicketById(@PathVariable("ticketId")Integer ticketId){
    return ticketBookingService.getTicketById(ticketId);
}
服务:

    @Cacheable(value="ticketsCache",key="#ticketId",unless="#result==null")
public Ticket getTicketById(Integer ticketId) {
    return ticketBookingDao.findOne(ticketId);
}
@CachePut(value="ticketsCache",key="#ticketId")
public Ticket updateTicket(Integer ticketId, String newEmail) {
    Ticket upadedTicket = null;
    Ticket ticketFromDb = ticketBookingDao.findOne(ticketId);
    if(ticketFromDb != null){
        ticketFromDb.setEmail(newEmail);
        upadedTicket = ticketBookingDao.save(ticketFromDb); 
    }
    return upadedTicket;
}

{“ticketId”:1,“passengerName”:“Sean”,“bookingDate”:150264900000,“sourceStation”:“Pune”,“destStation”:“孟买”,“email”:“Sean”。s2017@yahoo.com“}

现在,当我使用ticketid更新电子邮件时:

Put:控制器

    @PutMapping(value="/ticket/{ticketId}/{newEmail:.+}")
public Ticket updateTicket(@PathVariable("ticketId")Integer ticketId,@PathVariable("newEmail")String newEmail){
    return ticketBookingService.updateTicket(ticketId,newEmail);
}
服务:

    @Cacheable(value="ticketsCache",key="#ticketId",unless="#result==null")
public Ticket getTicketById(Integer ticketId) {
    return ticketBookingDao.findOne(ticketId);
}
@CachePut(value="ticketsCache",key="#ticketId")
public Ticket updateTicket(Integer ticketId, String newEmail) {
    Ticket upadedTicket = null;
    Ticket ticketFromDb = ticketBookingDao.findOne(ticketId);
    if(ticketFromDb != null){
        ticketFromDb.setEmail(newEmail);
        upadedTicket = ticketBookingDao.save(ticketFromDb); 
    }
    return upadedTicket;
}

}

现在,当使用ID获取数据时,更改正在更新

现在我的问题是,如果我尝试使用上面的第一个URL获取所有数据,我的更改不会反映出来

建议我如何重新解决此问题

您无法使用Spring批量更新缓存

请检查以下内容-已关闭,状态为已拒绝:

感谢您提出这个问题,但我不想给缓存抽象增加额外的复杂性。它并不意味着为您管理状态(如果我们允许,下一个逻辑步骤是我们必须使返回的列表与每个项目保持同步)。如果我们不这样做,我们就是不一致的,我们只是提供了一种使用注释与缓存对话的方法。那不是很有帮助

回到您的示例,这通常是二级缓存为您所做的。这不在缓存抽象的范围内


什么样的数据库?MySql?博士后?带有Hazelcast的Spring
@Cacheable
使用了一个,但是如何在后台更新它取决于数据库,为什么要这么做?你正在缓存不同的东西。第一个缓存所有票证的列表,第二个仅缓存一张票证。缓存机制将存储方法调用的结果,而不是其中的单个元素。如果您想要自动更新等,请将te缓存与持久性层集成,而不是这样做。
{
"ticketId": 1,
"passengerName": "Sean",
"bookingDate": 1502649000000,
"sourceStation": "Pune",
"destStation": "Mumbai",
"email": "abcd@yahoo.com"
{"ticketId":1,"passengerName":"Sean","bookingDate":1502649000000,"sourceStation":"Pune","destStation":"Mumbai","email":"abcd@yahoo.com"}
[{"ticketId":1,"passengerName":"Sean","bookingDate":1502649000000,"sourceStation":"Pune","destStation":"Mumbai","email":"sean.s2017@yahoo.com"},{"ticketId":2,"passengerName":"Raj","bookingDate":1502476200000,"sourceStation":"Chennai","destStation":"Mumbai","email":"raj.s2007@siffy.com"},{"ticketId":3,"passengerName":"Martin","bookingDate":1502735400000,"sourceStation":"Delhi","destStation":"Mumbai","email":"martin.s2001@xyz.com"},{"ticketId":4,"passengerName":"John","bookingDate":1503253800000,"sourceStation":"Chennai","destStation":"Mumbai","email":"john.s2011@yahoo.com"}]