Spring Boot緩衝實戰 EhCache

來源:互聯網
上載者:User

Spring boot預設使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager來實現緩衝。但是要切換到其他緩衝實現也很簡單 pom檔案

在pom中引入相應的jar包

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency></dependencies>
設定檔

EhCache所需要的設定檔,只需要放到類路徑下,Spring Boot會自動掃描。

<?xml version="1.0" encoding="UTF-8"?><ehcache>    <cache name="people" maxElementsInMemory="1000"/></ehcache>

也可以通過在application.properties檔案中,通過配置來指定EhCache設定檔的位置,如:

spring.cache.ehcache.config= #  ehcache設定檔地址

Spring Boot會自動為我們配置EhCacheCacheMannager的Bean。 關鍵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;@Servicepublic 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() + "資料做了緩衝");        return p;    }    @Override    @CacheEvict(value = "people")//2    public void remove(Long id) {        System.out.println("刪除了id、key為" + id + "的資料緩衝");        //這裡不做實際刪除操作    }    @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() + "資料做了緩衝");        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;@RestControllerpublic 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)@SpringBootTestpublic 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發送get請求                    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))// 預期傳回值的媒體類型text/plain;                    // charset=UTF-8                    .andReturn();// 返回執行請求的結果            System.out.println(result.getResponse().getContentAsString());        }    }}
列印日誌

從上面可以看出第一次走的是資料庫,第二次走的是緩衝

源碼: https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases

spring-boot-student-cache-ehcache 工程



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.