博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(十六)SpringBoot之使用 Caching- - EhCache
阅读量:6760 次
发布时间:2019-06-26

本文共 5548 字,大约阅读时间需要 18 分钟。

一、案例

  1.1  引入maven依赖

org.springframework.boot
spring-boot-starter-cache
net.sf.ehcache
ehcache

 

  1.2  配置application.properties

#echache缓存spring.cache.type=ehcachespring.cache.ehcache.config=classpath:config/ehcache.xml

 

  1.3  配置config/ehcache.xml

 

 

 

 

  1.4  启用@EnableCaching 注解支持

 

@EnableCaching@SpringBootApplicationpublic class Springboot01Application {        public static void main(String[] args) {        SpringApplication.run(Springboot01Application.class, args);    }}

 

 

 

  1.5  编写实体类

  • 如下代码,写完后运行Springboot01Application.java会自动在数据库生成表结构
package com.shyroke.entity;import java.io.Serializable;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;@Entity@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })  @Table(name="user")public class UserBean  {    @Id    @GeneratedValue    private Integer id;    @Column    private Date createTime;    @Column    private String userName;    @Column    private String userIp;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public Date getCreateTime() {        return createTime;    }    public void setCreateTime(Date createTime) {        this.createTime = createTime;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getUserIp() {        return userIp;    }    public void setUserIp(String userIp) {        this.userIp = userIp;    }    @Override    public String toString() {        return "RoncooUserLog [id=" + id + ", createTime=" + createTime + ", userName=" + userName + ", userIp=" + userIp + "]";    }}

 

  1.6  编写控制器

package com.shyroke.controller;import java.util.Date;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Pageable;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.shyroke.dao.UserMapper;import com.shyroke.entity.UserBean;import com.shyroke.service.CacheUserService;@Controller@RequestMapping(value = "/")public class IndexController {    @Autowired    private CacheUserService cacheUserService;        @RequestMapping(value = "/select")    @ResponseBody    public UserBean get() {        return cacheUserService.getUserById(1);    }    @RequestMapping(value = "/update")    @ResponseBody    public UserBean update() {        UserBean bean = cacheUserService.getUserById(1);        bean.setUserName("测试");        bean.setCreateTime(new Date());        cacheUserService.update(bean);        return bean;    }    @RequestMapping(value = "/del")    @ResponseBody    public String del() {        return cacheUserService.deleteById(1);    }}

 

  1.7  编写服务接口和实现类

package com.shyroke.service;import com.shyroke.entity.UserBean;public interface CacheUserService {    /**     * 查询     *      * @param id     * @return     */    public UserBean getUserById(int id);    /**     * 更新     *      * @param user     * @return     */    public UserBean update(UserBean user);    /**     * 删除     *      * @param id     * @return     */    public String deleteById(int id);}
package com.shyroke.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cache.annotation.CacheConfig;import org.springframework.cache.annotation.CacheEvict;import org.springframework.cache.annotation.CachePut;import org.springframework.cache.annotation.Cacheable;import org.springframework.stereotype.Repository;import org.springframework.stereotype.Service;import com.shyroke.dao.UserMapper;import com.shyroke.entity.UserBean;import com.shyroke.service.CacheUserService;@CacheConfig(cacheNames = "roncooCache")@Servicepublic class CacheUserServiceImpl implements CacheUserService{    @Autowired    private UserMapper userMapper;        @Cacheable(key = "#p0")    @Override    public UserBean getUserById(int id) {        System.out.println("查询功能,缓存找不到,直接读库, id=" + id);        return userMapper.getOne(id);    }    @CachePut(key = "#p0")    @Override    public UserBean update(UserBean user) {        System.out.println("更新功能,更新缓存,直接写库, id=" + user);        return userMapper.save(user);    }    @CacheEvict(key = "#p0")    @Override    public String deleteById(int id) {        System.out.println("删除功能,删除缓存,直接写库, id=" + id);         userMapper.delete(id);         return "删除成功";    }}

 

  1.8  编写userMapper.java

package com.shyroke.dao;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.stereotype.Repository;import com.shyroke.entity.UserBean;public interface UserMapper extends JpaRepository
{}

 

 

  1.9  结果

  • 现在数据库中插入一条数据


 

  • 第一次访问,所以没有缓存,故发出一条sql语句查询。
  •  然后在访问“http://localhost:8888/select” 结果如下:

没有发出sql语句,说明是从缓存中读取的数据。



  • 测试更新结果

 

  • 更新完毕之后,返回更新后的数据,然后在返回“http://localhost:8888/select”

  • 没有发出查询语句,而且查询的结果的更新世间与执行“http://localhost:8888/update”更新操作后的时间一致,说明查询的是最新的更新后的数据,所以表示“http://localhost:8888/update”更新操作会先更新缓存。

 

转载于:https://www.cnblogs.com/shyroke/p/8025604.html

你可能感兴趣的文章
Linux——搭建PHP开发环境第三步:mysql
查看>>
Vue.nextTick和Vue.$nextTick
查看>>
经典算法-链表(golang)
查看>>
leetcode — search-a-2d-matrix
查看>>
魔板 bfs() 预处理,记录每种状态。然后状态置换,(重点要用到全排列的hash记录状态)...
查看>>
构建之法课后作业第一次作业(15个题选一个)
查看>>
操作redis方法
查看>>
C语言函数
查看>>
Python3-异常处理
查看>>
Python-简单打印进度条
查看>>
【02】天气查询应用(第二课)
查看>>
监听微信返回按钮
查看>>
第二次实验报告
查看>>
HDU ACM 3790 最短路径问题
查看>>
python生成器
查看>>
linux 安装 ftp
查看>>
python 监控FTP目录下的文件个数
查看>>
MapInfo格式转arggis格式
查看>>
Network - SSL/TLS的基本概念
查看>>
python学习之老男孩python全栈第九期_day012知识点总结
查看>>