Visão geral das ferramentas de desenvolvimento Spring-Boot

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

Faça uma construção limpa do projeto e agora você está integrado ao spring-boot-devtools. A versão mais recente pode ser obtida emheree todas as versões podem ser encontradas emhere.

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:

  1. 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

  2. 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

  3. 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
  4. 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.