Visão geral das ferramentas de desenvolvimento Spring-Boot
1. Introdução
O Spring Boot nos dá a capacidade de configurar e executar serviços rapidamente.
Para aprimorar ainda mais a experiência de desenvolvimento, o Spring lançou a ferramenta spring-boot-devtools - como parte do Spring Boot-1.3. Este artigo tentará cobrir os benefícios que podemos obter usando a nova funcionalidade.
Abordaremos os seguintes tópicos:
-
Padrões de propriedade
-
Reinício automático
-
Recarga ao vivo
-
Configurações globais
-
Aplicações remotas
1.1. Adicionar Spring-Boot-Devtools em um projeto
Adicionarspring-boot-devtools em um projeto é tão simples quanto adicionar qualquer outro módulo de inicialização rápida. Em um projeto existente de inicialização por mola, adicione a seguinte dependência:
org.springframework.boot
spring-boot-devtools
2. Padrões de propriedade
O Spring-boot faz muitas configurações automáticas, incluindo a habilitação do cache por padrão para melhorar o desempenho. Um exemplo é o armazenamento em cache de modelos usados pelos mecanismos de modelo, por exemplo thymeleaf. Mas durante o desenvolvimento, é mais importante ver as mudanças o mais rápido possível.
O comportamento padrão de armazenamento em cache pode ser desabilitado parathymeleaf usando a propriedadespring.thymeleaf.cache=false no arquivoapplication.properties. Não precisamos fazer isso manualmente, a introdução despring-boot-devtools faz isso automaticamente para nós.
3. Reinício automático
Em um ambiente de desenvolvimento de aplicativo típico, um desenvolvedor faria algumas alterações, construiria o projeto e implantar / iniciaria o aplicativo para que as novas alterações entrassem em vigor ou então tentaria aproveitarJRebel, etc.
Usandospring-boot-devtools,, este processo também é automatizado. Sempre que os arquivos forem alterados no caminho de classe, os aplicativos que usamspring-boot-devtools farão com que o aplicativo seja reiniciado. O benefício desse recurso é o tempo necessário para verificar se as alterações feitas são consideravelmente reduzidas:
19:45:44.804 ... - Included patterns for restart : []
19:45:44.809 ... - Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/]
19:45:44.810 ... - Matching URLs for reloading : [file:/.../target/test-classes/, file:/.../target/classes/]
:: Spring Boot :: (v1.5.2.RELEASE)
2017-03-12 19:45:45.174 ...: Starting Application on machine with PID 7724 (\target\classes started by user in )
2017-03-12 19:45:45.175 ...: No active profile set, falling back to default profiles: default
2017-03-12 19:45:45.510 ...: Refreshing org.springframework.boot[email protected]385c3ca3: startup date [Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy
Conforme visto nos logs, o encadeamento que gerou o aplicativo não é um encadeamentomain, em vez de um encadeamentorestartedMain. Quaisquer alterações feitas no projeto, seja uma alteração do arquivo java, causarão uma reinicialização automática do projeto:
2017-03-12 19:53:46.204 ...: Closing org.springframework.boot[email protected]385c3ca3: startup date [Sun Mar 12 19:45:45 IST 2017]; root of context hierarchy
2017-03-12 19:53:46.208 ...: Unregistering JMX-exposed beans on shutdown
:: Spring Boot :: (v1.5.2.RELEASE)
2017-03-12 19:53:46.587 ...: Starting Application on machine with PID 7724 (\target\classes started by user in )
2017-03-12 19:53:46.588 ...: No active profile set, falling back to default profiles: default
2017-03-12 19:53:46.591 ...: Refreshing org.springframework.boot[email protected]acaf4a1: startup date [Sun Mar 12 19:53:46 IST 2017]; root of context hierarchy
4. Recarga ao vivo
O módulospring-boot-devtools inclui um servidor LiveReload integrado que é usado para acionar uma atualização do navegador quando um recurso é alterado.
Para que isso aconteça no navegador, precisamos instalar o plugin LiveReload, uma dessas implementações éRemote Live Reload para o Chrome.
5. Configurações globais
spring-boot-devtools fornece uma maneira de definir as configurações globais que não estão associadas a nenhum aplicativo. Este arquivo é nomeado como.spring-boot-devtools.properties e está localizado em $ HOME.
6. Aplicativos Remotos
6.1. Depuração remota via HTTP (túnel de depuração remota)
spring-boot-devtools fornece recursos de depuração remota prontos para uso via HTTP; para ter esse recurso, é necessário quespring-boot-devtools seja empacotado como parte do aplicativo. Isso pode ser alcançado desabilitando a configuração deexcludeDevtools no plugin do maven.
Aqui está um exemplo rápido:
org.springframework.boot
spring-boot-maven-plugin
false
Agora, para que a depuração remota via HTTP funcione, é necessário executar as seguintes etapas:
-
Um aplicativo que está sendo implantado e iniciado no servidor deve ser iniciado com a Depuração Remota ativada:
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n
Como podemos ver, a porta de depuração remota não é mencionada aqui. Portanto, o java escolherá uma porta aleatória
-
Para o mesmo projeto, abraLaunch configurations, escolha as seguintes opções: Selecione a classe principal:org.springframework.boot.devtools.RemoteSpringApplication Nos argumentos do programa, adicione a URL do aplicativo, por exemplo, http://localhost:8080
-
A porta padrão para o depurador via aplicativo de inicialização por mola é 8000 e pode ser substituída por:
spring.devtools.remote.debug.local-port=8010
-
Agora crie uma configuração de depuração remota, configurando a porta como8010 conforme configurado por meio de propriedades ou8000, se seguir os padrões
Esta é a aparência do registro:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: (v1.5.2.RELEASE)
2017-03-12 22:24:11.089 ...: Starting RemoteSpringApplication v1.5.2.RELEASE on machine with PID 10476 (..\org\springframework\boot\spring-boot-devtools\1.5.2.RELEASE\spring-boot-devtools-1.5.2.RELEASE.jar started by user in project)
2017-03-12 22:24:11.097 ...: No active profile set, falling back to default profiles: default
2017-03-12 22:24:11.357 ...: Refreshing org.spring[email protected]11e21d0e: startup date [Sun Mar 12 22:24:11 IST 2017]; root of context hierarchy
2017-03-12 22:24:11.869 ...: The connection to http://localhost:8080 is insecure. You should use a URL starting with 'https://'.
2017-03-12 22:24:11.949 ...: LiveReload server is running on port 35729
2017-03-12 22:24:11.983 ...: Started RemoteSpringApplication in 1.24 seconds (JVM running for 1.802)
2017-03-12 22:24:34.324 ...: Remote debug connection opened
6.2. Atualização Remota
O cliente remoto monitora o caminho de classe do aplicativo em busca de alterações, como é feito no recurso de reinicialização remota. Qualquer alteração no caminho de classe faz com que o recurso atualizado seja enviado ao aplicativo remoto e uma reinicialização é acionada.
As alterações são enviadas quando o cliente remoto está ativo e em execução, pois o monitoramento de arquivos alterados só é possível.
Aqui está o que parece nos registros:
2017-03-12 22:33:11.613 INFO 1484 ...: Remote debug connection opened
2017-03-12 22:33:21.869 INFO 1484 ...: Uploaded 1 class resource
7. Conclusão
Com este artigo rápido, acabamos de demonstrar como podemos alavancar o módulospring-boot-devtools para tornar a experiência do desenvolvedor melhor e reduzir o tempo de desenvolvimento automatizando muitas atividades.