Implantando um aplicativo de inicialização Spring no Cloud Foundry
1. Visão geral
A implantação de um aplicativo Spring Boot no Cloud Foundry é um exercício simples. Neste tutorial, mostraremos como fazer isso.
2. Dependências do Spring Cloud
Como este projeto exigirá novas dependências para o projeto Spring Cloud, adicionaremos o BOM de dependências do Spring Cloud:
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR1
pom
import
Podemos encontrar a versão mais recente da bibliotecaspring-cloud-dependencies emMaven Central.
Agora, queremos manter uma construção separada para o Cloud Foundry, então vamos criar um perfil chamadocloudfoundry no Mavenpom.xml.
Também adicionaremos exclusões de compilador e o plug-in Spring Boot para configurar o nome do pacote:
src/main/resources
**/logback.xml
org.springframework.boot
spring-boot-maven-plugin
${project.name}-cf
org.apache.maven.plugins
maven-compiler-plugin
**/cloud/config/*.java
Também queremos excluir os arquivos específicos da nuvem da compilação normal, para adicionar uma exclusão de perfil global ao plug-in do compilador Maven:
org.apache.maven.plugins
maven-compiler-plugin
**/cloud/*.java
Em seguida, precisamos adicionar as bibliotecas Spring Cloud Starter e Spring Cloud Connectors, que fornecem suporte para o Cloud Foundry:
org.springframework.cloud
spring-cloud-starter
org.springframework.boot
spring-boot-starter-cloud-connectors
3. Configuração de Cloud Foundry
Para seguir este tutorial, precisamos nos registrar para um testehere ou baixar o ambiente de desenvolvimento pré-configurado paraNative Linux ouVirtual Box.
Além disso, a CLI do Cloud Foundry precisa ser instalada. As instruções sãohere.
Após o registro com um provedor Cloud Foundry, a URL da API será disponibilizada (você pode voltar a ela seguindo a opçãoTools no lado esquerdo).
O contêiner de aplicativos nos permite vincular serviços a aplicativos. Em seguida, vamos fazer login no ambiente Cloud Foundry:
cf login -a
The Cloud Foundry Marketplace is a catalog of services como bancos de dados, mensagens, e-mail, monitoramento, registro e muito mais. A maioria dos serviços oferece um plano gratuito ou de avaliação.
Vamos pesquisar o Marketplace por “MySQL” e criar um serviço para nosso aplicativo:
cf marketplace | grep MySQL
>
cleardb spark, boost*, amp*, shock* Highly available MySQL for your Apps.
A saída lista os serviços com "MySQL" na descrição. No PCF, o serviço MySQL é denominadocleardbe planos não gratuitos são marcados com um asterisco.
Em seguida, listamos os detalhes de um serviço usando:
cf marketplace -s cleardb
>
service plan description free or paid
spark Great for getting started and developing your apps free
boost Best for light production or staging your applications paid
amp For apps with moderate data requirements paid
shock Designed for apps where you need real MySQL reliability, power and throughput paid
Agora criamos uma instância de serviço MySQL gratuita chamadaspring-bootstrap-db:
cf create-service cleardb spark spring-bootstrap-db
4. Configuração da Aplicação
Em seguida, adicionamos uma classe anotada@Configuration que estendeAbstractCloudConfig para criar umDataSource em o pacote denominadoorg.example.cloud.config:
@Configuration
@Profile("cloud")
public class CloudDataSourceConfig extends AbstractCloudConfig {
@Bean
public DataSource dataSource() {
return connectionFactory().dataSource();
}
}
Adicionar@Profile(“cloud”) garante que o Cloud Connector não esteja ativo quando fazemos testes locais. Também adicionamos@ActiveProfiles(profiles = \{“local”}) aos testes de integração.
Em seguida, crie o aplicativo com:
mvn clean install spring-boot:repackage -P cloudfoundry
Além disso, precisamos fornecer um arquivomanifest.yml, para vincular o serviço ao aplicativo.
Normalmente colocamos o arquivomanifest.yml na pasta do projeto, mas, neste caso, criaremos uma pastacloudfoundry, pois vamos demonstrar a implantação em vários provedores nativos da nuvem:
---
applications:
- name: spring-boot-bootstrap
memory: 768M
random-route: true
path: ../target/spring-boot-bootstrap-cf.jar
env:
SPRING_PROFILES_ACTIVE: cloud,mysql
services:
- spring-bootstrap-db
5. Desdobramento, desenvolvimento
A implantação do aplicativo agora é tão fácil quanto:
cd cloudfoundry
cf push
O Cloud Foundry usará o Java buildpack para implantar o aplicativo e criar uma rota aleatória para o aplicativo.
Podemos visualizar as últimas entradas no arquivo de log usando:
cf logs spring-boot-bootstrap --recent
Ou podemos personalizar o arquivo de log:
cf logs spring-boot-bootstrap
Por fim, precisamos do nome da rota para testar o aplicativo:
cf app spring-boot-bootstrap
>
name: spring-boot-bootstrap
requested state: started
routes: spring-boot-bootstrap-delightful-chimpanzee.cfapps.io
last uploaded: Thu 23 Aug 08:57:20 SAST 2018
stack: cflinuxfs2
buildpacks: java-buildpack=v4.15-offline-...
type: web
instances: 1/1
memory usage: 768M
state since cpu memory disk
#0 running 2018-08-23T06:57:57Z 0.5% 290.9M of 768M 164.7M of 1G
A execução do seguinte comando adicionará um novo livro:
curl -i --request POST \
--header "Content-Type: application/json" \
--data '{"title": "The Player of Games", "author": "Iain M. Banks"}' \
https:///api/books
#OR
http POST https:///api/books title="The Player of Games" author="Iain M. Banks"
E este comando listará todos os livros:
curl -i https:///api/books
#OR
http https:///api/books
>
HTTP/1.1 200 OK
[
{
"author": "Iain M. Banks",
"id": 1,
"title": "Player of Games"
},
{
"author": "J.R.R. Tolkien",
"id": 2,
"title": "The Hobbit"
}
]
6. Dimensionando o aplicativo
Por último, dimensionar um aplicativo no Cloud Foundry é tão simples quanto usar o comandoscale:
cf scale spring-cloud-bootstrap-cloudfoundry
Options:
-i
-m # Like 512M or 1G
-k # Like 1G or 2G
-f # Force restart without prompt
Lembre-se de excluir o aplicativo quando não precisar mais dele:
cf delete spring-cloud-bootstrap-cloudfoundry
7. Conclusão
Neste artigo, abordamos as bibliotecas do Spring Cloud que simplificam o desenvolvimento de um aplicativo nativo da nuvem usando o Spring Boot. A implantação com a CLI Cloud Foundry está bem documentadahere.
Plug-ins extras para a CLI estão disponíveis emplugin repository.
O código-fonte completo de nossos exemplos aqui é, como sempre,over on GitHub.