A, @Caching은 복잡한 캐싱 규칙을 정의
1, 캐싱 인터페이스 출처 :
@Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) @Inherited @Documented 공개 @ 인터페이스 캐싱 { 캐시 가능 [] 캐시 () 기본 {}; CachePut [] 넣어 () 기본 {}; CacheEvict [] EVICT () 기본 {}; }
2, 캐싱 사용 사례 @
섹션의 기준이 lastName 직원에 쿼리 서비스 방법에있어서 추가
(@Caching 캐시 = { @Cacheable (값 = "EMP"키 = "#lastName" ) } 풋 = { @CachePut (값 = "EMP"키 = "#의 result.id을" ) @CachePut (값 = "EMP"키 = "#의 result.email") } ) //이 경우는 ID, 이메일, LASTNAME는 각각의 데이터 키로서 이후에로드 할 캐시 / *하지만있어서 캐시에서 촬영되지 각 쿼리에 대해 실행될 직원이 lastName 질의에 따른 때문에 @CachePut 그것은 구현되어야한다 CachePut 캐시로 상기 방법을 수행 한 결과이다* / 공용직원 getEmpByLastName (문자열이 lastName) { 직원 EMP=employeeMapper.getEmpByLastName (이 lastName); 반환 EMP; }
employeeMapper 적절한 매핑 SQL을 추가
@Select ( "SELECT * FROM EMPLOYEE 어디 LAST_NAME = # {이 lastName}" ) 공공 직원 getEmpByLastName (문자열과 lastName);
에는 EmployeeController 항에있어서,
@RestController 공공 클래스 에는 EmployeeController { @Autowired EmployeeService employeeService; (@GetMapping "/ EMP / {자료}" ) 공중 직원 GetEmployee라는 (@PathVariable ( "ID" ) 정수 ID) { 직원 EMP = employeeService.getEmp (ID); 반환 EMP; } @GetMapping ( "/ EMP" ) 공중 직원 updateEmployee (종업원의 종업원) { 직원 EMP = employeeService.updateEmp (사원); 반환 EMP; } @GetMapping ("/ delEmp" ) 공공 문자열 deleteEmployee (정수 ID) { employeeService.deleteEmp (ID); 반환 "성공" ; } @GetMapping ( "/ EMP / lastName이라는 / {}이 lastName" ) 공중 직원 getEmpByLastName (@PathVariable ( "이 lastName" ) 문자열이 lastName) { 직원 EMP = employeeService.getEmpByLastName (이 lastName); 반환 EMP; } }
시험 절차 :
접속이 lastName 쿼리에 브라우저에서 첫 번째 링크에 따라, 프로젝트를 다시 시작
(데이터 키가 캐시 후로드로, 각각이 때, 아이디, 이메일, LASTNAME을) SQL 쿼리가 전송
장에 따르면 다음 직원 ID를 조회 :( 그런 다음 콘솔은 문제의 SQL은 설명하지 않는 캐시에서 쿼리 )
그러나 우리는 다음 캐시에서하지 않는, 장 쿼리에 따라 성, 또는 SQL 쿼리를 발행, 때문에 @CachePut의 구성, CachePut가 캐시에 메소드의 구현의 결과이며 그것은 구현해야합니다
두, @ CacheConfig : 클래스 캐시 일반적인 구성을 지정, 구성은 방법이 아닙니다
@Target ({} ElementType.TYPE) @Retention (RetentionPolicy.RUNTIME) @Documented 공개 @ 인터페이스 CacheConfig { 문자열 [] cacheNames () 기본 {}; 문자열의 KeyGenerator () 기본 "" ; 문자열 cacheManager () 기본 "" ; 문자열 cacheResolver () 기본 "" ; }
의 클래스 구성 :