에서 이전 두 시작하기 위해 살펴본 게시물 Spring 데이터 카우치베이스. 이제 조금 더 정교해질 차례입니다(정교하거나 고급스럽다는 것이 더 복잡하다는 뜻이 아님을 명심하세요). 캐싱, 문서 유효성 검사, REST API를 통한 리포지토리 노출과 같은 몇 가지 훌륭한 기능을 살펴봅시다.
캐싱
Spring 코어 모듈은 매우 멋진 캐시 추상화 JSR-107(JCache)을 지원합니다. 예시를 살펴보겠습니다. 메서드의 결과가 캐시되도록 하려면 다음 어노테이션을 사용하면 됩니다:
|
1 2 3 4 5 |
@캐시 가능(값 = "myCache", 키 = "'캐시:'+#param") public 개체 사용ALotOfCPU주기(문자열 매개변수){ ....
} |
여기서 'myCache'는 제가 구성한 기존 캐시 인스턴스의 이름입니다. 문서의 키는 키 정규식 "'cache:'+#param"을 사용하여 확인되며, 여기서 #param은 'param'이라는 메서드 매개변수입니다. 이렇게 하면 동일한 매개변수에 대해 메서드가 한 번만 실행됩니다. 나중에 메서드가 호출되면 캐시에서 결과를 가져옵니다. 즉, 애플리케이션을 적절하게 구성한 경우 Couchbase에서 결과를 가져옵니다. 캐시 인스턴스를 정의하려면 구성에 다음을 추가합니다:
|
1 2 3 4 5 6 7 |
@Bean
CouchbaseCacheManager 캐시 관리자(카우치베이스클라이언트 카우치베이스클라이언트) 던지기 예외 {
해시맵<문자열, 카우치베이스클라이언트> 인스턴스 = new 해시맵<>();
인스턴스.put("myCache", 카우치베이스클라이언트);
반환 new CouchbaseCacheManager(인스턴스);
} |
및 @EnableCaching 어노테이션을 추가하세요.
이미 Spring의 캐싱 시스템을 사용 중이라면 현재 사용 중인 저장소를 Couchbase로 교체하는 것은 정말 쉽습니다. 사용 중인 cacheManager가 CouchbaseCacheManager 구현인지 확인하기만 하면 됩니다.
문서 유효성 검사
필드 유효성 검사는 비즈니스 객체를 다룰 때 흔히 하는 작업입니다. 예를 들어 지정된 필드를 Couchbase에 저장하기 전에 null이 아닌지 확인하거나 필드가 140자를 넘지 않는지 확인하는 것이 그 예입니다. 좋은 소식은 이 작업이 실제로 매우 쉽다는 것입니다. 최대 절전 모드 유효성 검사를 사용할 수 있습니다. 가장 먼저 해야 할 일은 필요한 종속성을 pom에 추가하는 것입니다:
|
1 2 3 4 5 |
org.최대 절전 모드 최대 절전 모드-유효성 검사기 |
다음 단계는 저장할 객체가 유효성 검사 요구 사항을 충족하지 않을 때 ConstraintViolationException을 던지는 ValidationListener 빈을 추가하는 것입니다:
|
1 2 3 4 |
@Bean
로컬 유효성 검사기 팩토리 빈 유효성 검사기() {
반환 new 로컬 유효성 검사기 팩토리 빈();
} |
@Bean ValidatingCouchbaseEventListener validationEventListener() { return new ValidatingCouchbaseEventListener(validator()); }
이제 필수 구성이 완료되었으므로 다음과 같이 POJO 객체에 Hibernate 유효성 검사 어노테이션을 추가할 수 있습니다:
|
1 2 3 |
@필드 @NotNull 비공개 문자열 thisFieldShouldNotBeNull; |
이제 내 애플리케이션에서 이 프로퍼티가 null로 설정된 객체를 저장하려고 할 때마다 ConstraintViolationException이 발생합니다.
물론 @NotNull 외에도 다양한 어노테이션이 있습니다. 이러한 주석은 스프링 문서.
REST API로 리포지토리 노출하기
이렇게 짧은 시간 내에 리포지토리를 사용할 수 있는 것도 좋지만, 더 좋은 점은 종속성을 추가하는 것만으로 REST API 뒤에 리포지토리를 노출할 수 있다는 사실입니다. 이를 위해서는 spring-data-rest-webmvc를 사용해야 합니다. 그래서 저는 이렇게 종속성에 추가합니다:
|
1 2 3 4 5 |
org.스프링 프레임워크.데이터 봄-데이터-rest-webmvc |
그리고 짜잔(저는 프랑스 출신이기 때문에 짜잔을 쓸 자격이 있다고 생각합니다). 이 리포지토리에 있는 모든 개체가 노출됩니다. HATEOAS 스타일:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
caolila:~ ldoguin$ curl -v http://localhost:8080/twitterUpdates { "_embedded" : { "트위터업데이트" : [ { "createdAt" : 1421929099417, "유형" : "트위터업데이트", "계정" : "카우치베이스", "팔로워" : 90323, "즐겨 찾기" : 619, "친구" : 541, "상태" : 6155, "_links" : { "self" : { "href" : "http://localhost:8080/twitterUpdates/tw-couchbase–1421929099417” } } }, { "createdAt" : 1422314903175, "유형" : "트위터업데이트", "계정" : "카우치베이스", "팔로워" : 90285, "즐겨 찾기" : 619, "친구" : 542, "상태" : 6207, "_links" : { "self" : { "href" : "http://localhost:8080/twitterUpdates/tw-Couchbase–1422314903175” } } } ] } |
JSON 문서에서 일부 속성을 보려면 저처럼 게터를 추가하는 것을 잊지 마세요...
여기까지 스프링 데이터 카우치베이스에 대한 블로그 포스트 시리즈입니다. 댓글을 달아 공유해 주시고, 더 많은 Spring 및 Couchbase 리소스를 원하시는지, 사용 중이거나 사용하고 싶은지 알려주세요.
이 프로젝트의 소스 코드에 대한 링크가 있나요? Spring-data-rest-webmvc 종속성이 내 리포지토리를 노출하는 데 문제가 있습니다.