O release do Spring Boot 2.0.0 M4 traz a infraestrutura do actuator endpoint aperfeiçoado. As mudanças mais significativas incluem:
- Suporte à Jersey RESTful web services;
- Suporte a apps reativas web para o WebFlux;
- Novo mapeamento de endpoint;
- Criação simplificada de endpoints definidos por usuário;
- Endpoint de segurança aperfeiçoado.
Os actuator endpoints do Spring Boot permitem monitoramento e interação como aplicações web. Anteriormente, estes endpoints eram suportados somente no Spring MVC e para criar endpoints definidos pelo usuário era necessário uma quantidade significante de código adicional e configuração.
Mapeamento de Endpoint
Endpoints pré definidos como /beans, /health, etc. Por padrão agora são mapeados para o context raiz /application. Isso significa, por exemplo, que /beans nas versões anteriores do Spring Boot agora são acessados via /application/beans.
Criando endpoints definidos pelo usuário
A nova anotação @Enpoint simplificou o processo da criação de endpoints definidos pelo usuário. O exemplo abaixo cria um endpoint chamado person. (O exemplo completo pode ser encontrado no GitHub.)
@Endpoint(id = "person") @Component public class PersonEndpoint { private final Map people = new HashMap<>(); PersonEndpoint() { this.people.put("mike", new Person("Michael Redlich")); this.people.put("rowena", new Person("Rowena Redlich")); this.people.put("barry", new Person("Barry Burd")); } @ReadOperation public List getAll() { return new ArrayList<>(this.people.values()); } @ReadOperation public Person getPerson(@Selector String person) { return this.people.get(person); } @WriteOperation public void updatePerson(@Selector String name, String person) { this.people.put(name, new Person(person)); } public static class Person { private String name; Person(String name) { this.name = name; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } } }
Esse endpoint expõe os três métodos definidos com as anotações @ReadOperation e @WriteOperation. Nenhum código adicional é necessário e o endpoint é acessado via /application/person e /application/person/{name}. Este endpoint também é automaticamente publicado como um JMX MBean e pode ser acessado por um JMX-client como o JConsole.
Melhorias na segurança de endpoints
O Spring Boot 2.0 tem uma abordagem um pouco diferente para assegurar que os web endpoints são seguros por padrão. Web endpoints agora estão desabilitados por padrão e a propriedade management.security.enabled foi removida. Endpoints individuais podem ser habilitados através do arquivo application.properties. Por exemplo:
endpoints.info.enabled=true endpoints.beans.enabled=true
Isso é possível, entretanto, para expor todos os endpoints do actuator e definidos pelo usuário através de configurações a propriedade endpoints.default.web.enabled property deve ser igual a true.
Stéphane Nicoll, engenheiro de software na Pivotal, conversou com o InfoQ sobre os actuator endpoints.
InfoQ: Como você descreveria a experiência em atualizar os actuator endpoints para suportar o Jersey e WebFlux?
Nicoll: Suportar tantos ambientes baseados em servlet como apps web reativas é um desafio, especialmente ao lidar com conjuntos extensivos de funcionalidades.
InfoQ: O Spring é famoso pelo fornecimento de uma API concisa e bem pensada. Como foi tratada essa refatoração?
Nicoll: Tivemos várias iniciativas na equipe do framework com o "spring-webmvc" e o "spring-webflux" compartilhando uma grande quantidade de funcionalidades do "spring-web". Construir abstrações que funcionam é difícil e eu estou feliz que estamos fazendo isso novamente em outro nível.
InfoQ: Quais foram as diretivas utilizadas para a arquitetura?
Nicoll: O Spring Boot 2.0 é principalmente orientado à criação de fundações firmes e uma base sólida para construir: acreditamos que a nova infraestrutura de endpoint está no caminho certo para produção e estamos ansiosos pelo feedback da comunidade.
InfoQ: Quando teremos a versão antecipada do Spring Boot 2.0 GA?
Nicoll: As coisas ainda estão acontecendo, mas nosso plano atual é lançar o Spring Boot 2.0 GA no final deste ano.
Recursos
- Getting Started: Building an Application with Spring Boot;
- Spring Boot 2.0.0-BUILD-SNAPSHOT documentation;
- Stéphane Nicoll's repositório de rascunhos;
- Stéphane Nicoll's repositório de demonstração.