新聞中心
Spring boot默認(rèn)使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager來實現(xiàn)緩存。但是要切換到其他緩存實現(xiàn)也很簡單
創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項目涵蓋了網(wǎng)頁視覺設(shè)計、VI標(biāo)志設(shè)計、營銷型網(wǎng)站建設(shè)、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式網(wǎng)站建設(shè)公司、成都做手機(jī)網(wǎng)站、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計、SEO優(yōu)化排名。設(shè)計、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為成都房屋鑒定行業(yè)客戶提供了網(wǎng)站推廣服務(wù)。
pom文件
在pom中引入相應(yīng)的jar包
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa MySQL mysql-connector-java org.apache.commons commons-dbcp2 org.springframework.boot spring-boot-starter-cache net.sf.ehcache ehcache
配置文件
EhCache所需要的配置文件,只需要放到類路徑下,Spring Boot會自動掃描。
<?xml version="1.0" encoding="UTF-8"?>
也可以通過在application.properties文件中,通過配置來指定EhCache配置文件的位置,如:
spring.cache.ehcache.config= # ehcache配置文件地址
Spring Boot會自動為我們配置EhCacheCacheMannager的Bean。
關(guān)鍵Service
package com.xiaolyuh.service.impl; import com.xiaolyuh.entity.Person; import com.xiaolyuh.repository.PersonRepository; import com.xiaolyuh.service.PersonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class PersonServiceImpl implements PersonService { @Autowired PersonRepository personRepository; @Override @CachePut(value = "people", key = "#person.id") public Person save(Person person) { Person p = personRepository.save(person); System.out.println("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); return p; } @Override @CacheEvict(value = "people")//2 public void remove(Long id) { System.out.println("刪除了id、key為" + id + "的數(shù)據(jù)緩存"); //這里不做實際刪除操作 } @Override @Cacheable(value = "people", key = "#person.id")//3 public Person findOne(Person person) { Person p = personRepository.findOne(person.getId()); System.out.println("為id、key為:" + p.getId() + "數(shù)據(jù)做了緩存"); return p; } }
Controller
package com.xiaolyuh.controller; import com.xiaolyuh.entity.Person; import com.xiaolyuh.service.PersonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.CacheManager; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class CacheController { @Autowired PersonService personService; @Autowired CacheManager cacheManager; @RequestMapping("/put") public long put(@RequestBody Person person) { Person p = personService.save(person); return p.getId(); } @RequestMapping("/able") public Person cacheable(Person person) { System.out.println(cacheManager.toString()); return personService.findOne(person); } @RequestMapping("/evit") public String evit(Long id) { personService.remove(id); return "ok"; } }
啟動類
@SpringBootApplication @EnableCaching// 開啟緩存,需要顯示的指定 public class SpringBootStudentCacheApplication { public static void main(String[] args) { SpringApplication.run(SpringBootStudentCacheApplication.class, args); } }
測試類
package com.xiaolyuh; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import net.minidev.json.JSONObject; @RunWith(SpringRunner.class) @SpringBootTest public class SpringBootStudentCacheApplicationTests { @Test public void contextLoads() { } private MockMvc mockMvc; // 模擬MVC對象,通過MockMvcBuilders.webAppContextSetup(this.wac).build()初始化。 @Autowired private WebApplicationContext wac; // 注入WebApplicationContext // @Autowired // private MockHttpSession session;// 注入模擬的http session // // @Autowired // private MockHttpServletRequest request;// 注入模擬的http request\ @Before // 在測試開始前初始化工作 public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); } @Test public void testAble() throws Exception { for (int i = 0; i < 2; i++) { MvcResult result = mockMvc.perform(post("/able").param("id", "2")) .andExpect(status().isOk())// 模擬向testRest發(fā)送get請求 .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))// 預(yù)期返回值的媒體類型text/plain; // charset=UTF-8 .andReturn();// 返回執(zhí)行請求的結(jié)果 System.out.println(result.getResponse().getContentAsString()); } } }
打印日志
從上面可以看出第一次走的是數(shù)據(jù)庫,第二次走的是緩存
源碼:https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
文章標(biāo)題:SpringBoot緩存實戰(zhàn)EhCache示例
分享URL:http://www.dlmjj.cn/article/ggoshe.html