Java Computação em nuvem

Deploy de uma aplicação Spring Boot no Heroku

Neste artigo veremos como podemos realizar o deploy de uma aplicação Spring Boot na nuvem com o Heroku.

cerca de 1 mês atrás

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.

Spring Framework - Fundamentos
Curso Spring Framework - Fundamentos
Conhecer o curso

Criar 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>

PostgreSQL - Desenvolvedor
Curso PostgreSQL - Desenvolvedor
Conhecer o curso

Configurando 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

Git - Fundamentos
Curso Git - Fundamentos
Conhecer o curso

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

Autor(a) do artigo

Cleyson Lima
Cleyson Lima

Professor, programador, fã de One Piece e finge saber cozinhar. Cleyson é graduando em Licenciatura em Informática pelo IFPI - Campus Teresina Zona Sul, nos anos de 2019 e 2020 esteve envolvido em vários projetos coordenados pela secretaria municipal de educação da cidade de Teresina, onde o foco era introduzir alunos da rede pública no mundo da programação e robótica. Hoje é instrutor dos cursos de Spring na TreinaWeb, mas diz que seu coração sempre pertencerá ao Python.

Todos os artigos

Artigos relacionados Ver todos