Hoje, a principal forma de entrega e uso de uma aplicação é por meio da nuvem. É por lá que as aplicações são armazenadas e acessadas. Sendo assim, é imprescindível que uma aplicação seja armazenada em algum servidor e disponível pela internet.
Pensando nisso, veremos neste artigo como realizar o Deploy de uma aplicação Spring Boot e disponibilizá-la no Heroku, serviço de armazenamento em nuvem de aplicações.
O que é o Heroku?
O Heroku é uma platform as a service (PaaS) que permite que desenvolvedores criem, executem e publiquem aplicações na nuvem, sendo que a sua versão mais básica é grátis. Mesmo nesta versão, ele fornece uma URL, o que permite testar a aplicação sem necessitar de um domínio.
O Heroku fornece suporte para as linguagens JavaScript (via Node.js), Ruby, Java, PHP, Python, Go, Scala e Clojure. É possível executar outras linguagens via Buildpacks, que são scripts criados pela comunidade.
Clonando o repositório da aplicação
Como exemplo, iremos utilizar a aplicação desenvolvida no curso “Spring Framework - Fundamentos” aqui da TreinaWeb. Apesar de ser uma aplicação simples, será um ótimo exemplo para testes.
Para realizar o clone do projeto, vamos utilizar o seguinte comando no terminal:
git clone https://github.com/treinaweb/treinaweb-spring-fundamentos.git
Feito isso, o projeto será baixado em seu computador e você terá todo o código fonte.
Curso Spring Framework - Fundamentos
Conhecer o cursoCriar conta no Heroku
Agora precisamos criar uma conta no Heroku, caso você já possua uma conta pode pular essa etapa e simplesmente realizar o login na plataforma.
O processo para criar a conta no Heroku é bem simples, basta preencher o formulário de cadastro através do link: https://signup.heroku.com/.
Criar app no Heroku
Agora que temos a nossa conta no Heroku e estamos logados, precisamos criar uma app para armazenar a nossa aplicação Spring Boot. Para isso, na página inicial basta clicar no botão “Create New App”, logo em seguida definimos o nome da aplicação que estamos criando e então clicar no botão “Create App”.
Com isso, seremos redirecionados para a página de configuração da aplicação. É nela que configuramos o servidor em que a aplicação será armazenada.
Aqui vale uma ressalva importante, o nome da app tem que ser único em toda a plataforma do Heroku, logo você não irá conseguir criar uma app com o nome “spring-treinaweb” pois esse nome já está sendo utilizado por mim, então você deve utilizar um outro nome para a sua app.
Instalar o Heroku CLI
Para que seja possível enviar o código-fonte do projeto para o servidor que acabamos de criar, precisamos instalar o CLI (Command Line Interface) do Heroku. É com ele que conseguiremos executar determinados comandos utilizando nosso computador para gerenciar o servidor da aplicação.
Para isso, há uma página que contém todas as informações necessárias para esse processo. Lembrando que o Heroku CLI é multiplataforma, ou seja, poderá ser utilizado em qualquer SO (Windows, macOS ou Linux).
Todo o processo de instalação está descrito na documentação do Heroku e é bastante simples.
Se você utiliza o macOS, você precisa digitar o seguinte comando em seu terminal:
brew tap heroku/brew && brew install heroku
Caso você utilize o Linux, o comando é o seguinte:
sudo snap install --classic heroku
Agora, caso você utilize o Windows, você precisará baixar e executar o instalador do Heroku CLI, também disponível na página citada acima.
Lembrando que, para qualquer SO, é necessário possuir o Git instalado. Mas, já que você fez o clone do repositório do projeto, isso já deve estar funcionando.
Logar no Heroku CLI
Depois de baixar e instalar o Heroku CLI, precisamos logar com nossa conta na ferramenta. Para isso, vamos até o terminal e iremos executar o seguinte comando:
heroku login
Uma mensagem no terminal será exibida e podemos pressionar em qualquer tecla do teclado. Neste momento, o navegador irá abrir uma página para realizarmos o login no Heroku. Após digitarmos nossos dados de acesso, basta clicar no botão “Login” e o processo será encerrado com sucesso.
Configurar a aplicação
Com todas as configurações do Heroku prontas, chegou a hora de configurarmos a aplicação que será armazenada no servidor.
Adicionar o driver de conexão com PostgreSQL
A nossa aplicação está utilizando o MySQL como banco de dados, porém o Heroku utiliza o PostgreSQL, logo, a primeira modificação que devemos fazer em nosso projeto é colocar o driver de conexão com MySQL como opcional, dessa maneira o mesmo só será instalado em ambiente de desenvolvimento e também precisamos instalar o driver do PostgreSQL.
Para isso, abra o arquivo pom.xml
e adicionar a opção true
na dependência do driver de conexão do MySQL.
Agora adicione a seguinte dependência na lista de dependências do projeto:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
Ao realizar essas duas alterações o nosso arquivo pom.xml
ficará dá seguinte maneira:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>br.com.treinaweb</groupId>
<artifactId>twclientes</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>twclientes</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>15</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Curso PostgreSQL - Desenvolvedor
Conhecer o cursoConfigurando o arquivo de propriedades
Agora que já temos as dependências do projeto devidamente configuradas, devemos atualizar as configurações no arquivo application.properties
, este arquivo possui as configurações do nosso projeto, inclusive a configuração de conexão com o banco de dados.
Então, vamos até o arquivo application.properties
que fica localizado em src/main/java/resources
e o modifique para que o mesmo fique da seguinte maneira:
spring.datasource.url=${DATABASE_URL}
spring.jpa.hibernate.ddl-auto=update
spring.thymeleaf.cache=true
Vamos entender o que está sendo feito nestas configurações, primeiramente estamos informando para o Spring que a string JDBC de conexão com o banco de dados irá ser obtida através de uma variável de ambiente chamada DATABASE_URL
, essa variável de ambiente é criada de forma automática pelo Heroku.
Em seguida estamos informando para o Hibernate, que é o JPA Provider padrão utilizado pelo Spring Data JPA, que ele deve sempre tentar atualizar as tabelas do banco de dados de acordo com o estado das nossas classes de modelo.
E por último estamos ativando a função de cache do Thymeleaf, dessa maneira iremos ter uma maior velocidade de carregamento das páginas de nossa aplicação.
Configurando a versão do Java
Nossa aplicação foi desenvolvida utilizando o Java 15, porém, o Heroku por padrão utiliza o Java 8, caso tentemos realizar o deploy dessa maneira irá acontecer um erro, pois o Heroku irá tentar compilar e compactar o projeto utilizando o Java 8, mas nossa aplicação foi desenvolvida utilizando o Java 15.
Para resolver esse problema é bem simples, basta criar uma arquivo chamado system.properties
na raiz do projeto e nesse arquivo colocar a configuração java.runtime.version=15
, dessa maneira estamos informando ao Heroku que ele deve utilizar o Java 15 e não o Java 8.
Realizar o Deploy
Finalmente, após todas as configurações, estamos prontos para subir nosso projeto para o Heroku.
Subindo a aplicação
Curso Git - Fundamentos
Conhecer o cursoPara isso, vamos até o terminal e digitaremos os seguintes comandos:
heroku git:remote -a spring-treinaweb
git add .
git commit -m "Deploy da aplicação"
git push -u heroku main
No comando heroku git:remote -a spring-treinaweb
substitua o termo “spring-treinaweb” pelo nome da app que você criou.
Depois disso, uma mensagem será exibida no terminal indicando que o deploy foi feito com sucesso.
Clicando no link indicado, somos redirecionados para a página da aplicação que acabou de ser armazenada. Neste momento, a página que será exibida terá o seguinte visual:
Agora a sua aplicação já está disponível para uso, você pode acessar a rota /cliente
para então visualizar os dados cadastros e realizar novos cadastro na aplicação.
Conclusão
Vimos nesse artigo como é simples realizar o deploy de uma aplicação Spring Boot no Heroku, o Heroku é uma ótima plataforma para realizar o deploy de nossas aplicações, principalmente pelo fato de seus recursos gratuitos suprirem a necessidade da maioria das aplicações, sendo assim uma ótima plataforma para disponibilizarmos aplicações para compor o seu portfólio.