No anterior dois Nas postagens, vimos como começar a usar o Dados do Spring Couchbase. Agora é hora de ficar um pouco mais sofisticado (lembre-se de que sofisticado ou avançado não significa mais complicado). Vamos dar uma olhada em algumas das coisas excelentes que você pode fazer, como armazenamento em cache, validação de documentos e exposição do seu repositório por meio de uma API REST.
Armazenamento em cache
O módulo principal do Spring oferece um recurso muito bom abstração de cache com suporte para JSR-107 (JCache). Vamos ver um exemplo. Para garantir que o resultado de um método seja armazenado em cache, posso simplesmente usar a seguinte anotação:
1 2 3 4 5 |
@Armazenável em cache(valor = "myCache", chave = "'cache:'+#param") público Objeto useALotOfCPUCycles(Cordas param){ ....
} |
Aqui, "myCache" é o nome de uma instância de cache existente que eu configurei. A chave do documento será resolvida usando a regex de chave "'cache:'+#param", em que #param é o parâmetro do método denominado 'param'. Isso garantirá que, para o mesmo parâmetro, o método seja executado apenas uma vez. Quando for chamado no futuro, o resultado será obtido do cache. Ou seja, do Couchbase, se eu tiver configurado meu aplicativo adequadamente. Para definir uma instância de cache, adicione o seguinte à sua configuração:
1 2 3 4 5 6 7 |
@Feijão
CouchbaseCacheManager gerenciador de cache(Cliente Couchbase cliente couchbase) lançamentos Exceção {
HashMap<Cordas, Cliente Couchbase> instâncias = novo HashMap<>();
instâncias.colocar("myCache", cliente couchbase);
retorno novo CouchbaseCacheManager(instâncias);
} |
e o @EnableCaching em sua classe de configuração.
Se você já estiver usando o sistema de cache do Spring, é muito fácil substituir o armazenamento atual pelo Couchbase. Apenas certifique-se de que o cacheManager que você está usando seja uma implementação do CouchbaseCacheManager.
Validação de documentos
A validação de campo é uma tarefa comum ao lidar com objetos de negócios. Um exemplo seria garantir que um campo especificado não seja nulo antes de armazená-lo no Couchbase, ou que um campo não tenha mais de 140 caracteres. E a boa notícia é que isso é realmente muito fácil. Posso usar a validação do Hibernate. A primeira coisa a fazer é adicionar a dependência necessária ao meu pom:
1 2 3 4 5 |
org.hibernar hibernar-validador |
A próxima etapa é adicionar um bean ValidationListener que lançará uma ConstraintViolationException quando o objeto a ser armazenado não atender ao requisito de validação:
1 2 3 4 |
@Feijão
LocalValidatorFactoryBean validador() {
retorno novo LocalValidatorFactoryBean();
} |
@Bean ValidatingCouchbaseEventListener validationEventListener() { return new ValidatingCouchbaseEventListener(validator()); }
Agora que a configuração obrigatória está concluída, posso adicionar qualquer anotação de validação do Hibernate ao meu objeto POJO desta forma:
1 2 3 |
@Campo @Não nulo privado Cordas thisFieldShouldNotBeNull; |
Agora, toda vez que meu aplicativo tentar salvar um objeto em que essa propriedade específica estiver definida como nula, receberei uma ConstraintViolationException.
É claro que há muitas outras anotações além de @NotNull. Você pode encontrá-las na seção Documentação do Spring.
Expor o repositório com uma API REST
Ter um repositório disponível em tão pouco tempo é ótimo, mas o que é ainda melhor é o fato de que você pode expô-lo por trás de uma API REST apenas adicionando uma dependência. Isso requer o uso do spring-data-rest-webmvc. Portanto, eu o adiciono às minhas dependências desta forma:
1 2 3 4 5 |
org.estrutura de mola.dados mola-dados-descanso-webmvc |
E voilà (sinto-me no direito de escrever voilà, sabe, por causa da minha origem francesa). Todos os objetos desse repositório estão expostos HATEOAS estilo:
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$ enrolar -v http://localhost:8080/twitterUpdates { "_embedded" : { "twitterUpdates" : [ { "createdAt" : 1421929099417, "tipo" : "twitterUpdate", "conta" : "Couchbase", "seguidores" : 90323, "favoritos" : 619, "amigos" : 541, "status" : 6155, "_links" : { "autônomo" : { "href" : "http://localhost:8080/twitterUpdates/tw-couchbase–1421929099417” } } }, { "createdAt" : 1422314903175, "tipo" : "twitterUpdate", "conta" : "Couchbase", "seguidores" : 90285, "favoritos" : 619, "amigos" : 542, "status" : 6207, "_links" : { "autônomo" : { "href" : "http://localhost:8080/twitterUpdates/tw-Couchbase–1422314903175” } } } ] } |
Só não se esqueça de adicionar getters, como eu fiz, se quiser ver algumas propriedades em seus documentos JSON...
Isso é tudo para esta série de postagens de blog sobre o Spring Data Couchbase. Comente e compartilhe, diga-nos se deseja mais recursos do Spring e do Couchbase, diga-nos se você usa ou deseja usar.
Você tem o link para o código-fonte desse projeto? Estou tendo alguns problemas para fazer com que a dependência do Spring-data-rest-webmvc exponha meu repositório