Ficando ainda mais produtivo com o Spring Boot

Já escrevi aqui no blog sobre o Spring Boot e comentei que achava uma ótima ferramenta e que torcia para que ela influenciasse outros projetos Java mundo a fora. Um dos starters que mais gosto é o Dev Tools, pois diminui bastante o tempo que devemos ficar esperando para cada alteração que fazemos no nosso projeto.

Isso por si só já seria suficiente, mas aí é que entra a parte que você quer tirar o máximo de proveito do seu ambiente. Caso você rode o seu projeto em modo de debug, a própria máquina virtual consegue aplicar as alterações que você faz dentro de seus métodos sem precisar reiniciar nada. Só que habilitando o Dev Tools você acaba perdendo isso, já que o Spring Boot vai recarregar sempre que alguma classe foi alterada. Para resolver isso, podemos adicionar uma propriedade no arquivo application.properties chamada spring.devtools.restart.trigger-file. A ideia é que você crie um arquivo que, quando alterado, faz o Spring Boot reiniciar. Abaixo temos um exemplo:

  spring.devtools.restart.trigger-file=.reloadtrigger

Apenas lembrando que você deve criar esse arquivo dentro, por exemplo, da pasta src/main/resources, apenas para ficar no classpath e ser monitorado. Isso, pelo menos na minha opinião, já ajuda. Você só precisa atualizar o arquivo quando alterar alguma coisa da estrutura do seu projeto em si, alguns exemplos:

  1. Criação de novos controllers;
  2. Adição de novas propriedades no application.properties
  3. Criação de novas configurações;
  4. Criação de novas classes ou interfaces;

Nesse momento já temos um cenário onde tiramos o melhor, entre as nossas possibilidades. Usamos o modo debug para que nossas alterações dentro de métodos sejam refletidas imediatamente na aplicação e usamos o Dev Tools para refletir as outras mudanças.

A partir daqui é apenas um relato de alguém que queria ir mais além e economizar alguns segundos a mais. Sempre que era necessário reiniciar a aplicação eu tinha que fazer um ctrl+shift+r, digitar o nome do arquivo e ainda alterá-lo, para que o Spring Boot percebesse a alteração e fizesse o trabalho dele. Sem contar que para cada projeto novo eu teria que criar o arquivo e tudo mais.

O primeiro passo é criar o arquivo uma vez só. Para fazer isso eu criei uma pasta chamada .spring-boot e criei lá dentro um arquivo chamado restart.txt. Agora é necessário fazer o Spring Boot também considerar esse endereço quando for levantar a aplicação. Para fazer isso basta adicionar a propriedade spring.devtools.restart.additional-paths apontando para o caminho da pasta que você acabou de criar. Outra opção é criar um arquivo chamado .spring-boot-devtools.properties na sua home, por exemplo no mac seria em /Users/seuUsuario. Toda vez que o Spring Boot é iniciado ele vai ler este arquivo também, caso ele exista.

O ponto a ser resolvido agora é como atualizar o arquivo de maneira rápida. Aqui vai variar de ambiente para ambiente. No mac eu usei o aplicativo chamado Keyboard Maestro e criei o atalho cmd+shift+b para que sempre que for necessário, eu altero a data de atualização do arquivo, forçando o Spring Boot a recarregar minha aplicação. No Windows você pode usar o AutoHotKey ou qualquer outro que você conheça. No Linux(Ubuntu pelo menos), você pode customizar um atalho para que ele fique alterando o arquivo para você.

Agora eu fiquei com um ambiente de desenvolvimento o mais próximo possível do que eu experimentei quando usei Ruby. Faço muitas alterações sem reiniciar nada e, quando é necessário, espero uns 2 segundos e tudo está pronto para ser usado.  Mesmo que você que não queira ir para o modo de debug, eu ainda prefiro usar o Spring Boot com o trigger file, já que várias vezes apertamos ctrl+s desesperadamente.

Advertisements

4 thoughts on “Ficando ainda mais produtivo com o Spring Boot

  1. Muito boa dica, Alberto!

    Dicas como estas economizam boas horas de desenvolvimento durante o mês do desenvolvedor. Agora uma dúvida, não como “ensinar” o Eclipse a atualizar o arquivo sempre que um determinado evento (ou comando do teclado) acontecer? Assim ficaria transparente pro desenvolvedor!

    Um abraço!

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s