Implantando um aplicativo de inicialização Spring no Cloud Foundry

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.