Como programar tarefas com o Cron para Java 8 (baseado no SDK do Cloud)

Com o Cron Service do App Engine, você configura tarefas programadas regularmente que operam em horários definidos ou em intervalos regulares. Essas tarefas são normalmente conhecidas como cron jobs. Eles são acionados automaticamente pelo Cron Service do App Engine. Por exemplo, use um cron job para enviar um relatório de e-mail diariamente, para atualizar dados armazenados em cache a cada 10 minutos ou para atualizar informações de resumo uma vez a cada hora.

Um cron job realiza uma solicitação GET de HTTP a um URL conforme programado. O gerenciador desse URL executa a lógica quando ele é chamado. Uma solicitação de cron job está sujeita aos mesmos limites das filas de tarefas push.

Antes de começar

Para implantar ou atualizar programações, sua conta requer uma das seguintes funções do IAM:

  • Proprietário
  • Editor

É possível configurar a permissão na página de IAM no Console do Google Cloud Platform.

Como criar um cron job

  1. Crie o arquivo cron.yaml no diretório raiz do aplicativo com o app.yaml.
  2. Adicione uma ou mais entradas <cron> ao arquivo e defina os elementos necessários ao job, incluindo os elementos <url> e <schedule> obrigatórios.

    Este é um exemplo da criação de um cron job básico executado diariamente:

    cron:
    - description: "daily summary job"
      url: /tasks/summary
      target: beta
      schedule: every 24 hours
    

    A especificação do destino é opcional e é o nome de um serviço/uma versão. Se estiver presente, o destino será precedido pelo nome do host do aplicativo, fazendo com que o job seja roteado para esse serviço/essa versão. Se nenhum destino for especificado, o job será executado nas versões do serviço default configuradas para o tráfego.

  3. Crie um gerenciador para o URL do cron job. O gerenciador precisa executar todas as tarefas agendadas. O gerenciador precisa responder com um código de status HTTP entre 200 e 299 (inclusive) para indicar o êxito. Outros códigos de status podem ser retornados e usados para a repetição do cron job.

O gerenciador pode ser simples, como um Servlet no aplicativo. O mapeamento de URL do servlet em web.xml precisa ser igual ao URL do cron job. Saiba mais sobre a sintaxe e as opções do cron.yaml.

Como testar cron jobs no servidor de desenvolvimento

O servidor de desenvolvimento local não executa automaticamente os cron jobs. Faça solicitações diretamente no URL do cron job para testar a funcionalidade. Use o cron local ou interface de tarefas programadas para acionar os URLs dos jobs com a ferramenta curl ou similar.

Como recuperar cron jobs com falha

Se o gerenciador da solicitação de um cron job retornar um código de status que não esteja no intervalo entre 200 e 299 (inclusive), o App Engine considerará que o job falhou. Por padrão, os jobs com falha não são repetidos a menos que um código de status 503 seja retornado. Nesse caso, ocorre uma nova tentativa a cada minuto até que a falha seja eliminada ou sejam retornados códigos de status entre 200 e 299.

Para definir que os jobs com falha sejam repetidos:

  1. Inclua um bloco retry_parameters no arquivo cron.yaml.
  2. Escolha e defina os parâmetros de novas tentativas no bloco retry_parameters.

    Por exemplo, este arquivo cron.yaml de amostra contém um único cron job que está configurado para ser repetido até cinco vezes (o padrão) com uma retirada inicial de 2,5 segundos, que é duplicado a cada vez.

    cron:
    - description: "retry demo"
      url: /retry
      schedule: every 10 mins
      retry_parameters:
        min_backoff_seconds: 2.5
        max_doublings: 5
    

Saiba mais sobre as opções de repetição do cron.

Como implantar cron jobs

Para implantar os cron jobs especificados no arquivo de configuração cron.yaml, execute o seguinte comando:

gcloud

gcloud app deploy cron.yaml

Maven

mvn appengine:deployCron cron.yaml

Gradle

gradle appengineDeployCron cron.yaml

Ambiente de desenvolvimento integrado

Para usar o IntelliJ ou o Eclipse, selecione os arquivos de configuração individuais a serem implantados por meio do formulário de implantação.

Como excluir todos os cron jobs

Para excluir todos os cron jobs:

  1. Edite o conteúdo do arquivo cron.yaml para:

    cron:
    
  2. Implante o arquivo cron.yaml no App Engine.

Como proteger URLs para cron

Um gerenciador de cron é apenas um gerenciador normal definido no app.yaml. Impeça que usuários acessem URLs usados por tarefas agendadas restringindo o acesso somente a contas de administrador. As tarefas agendadas podem acessar URLs somente de administrador. Restrinja um URL adicionando login: admin na configuração do gerenciador no app.yaml.

Veja a seguir um exemplo de como esse procedimento ficaria no app.yaml:

application: hello-cron
version: 1
runtime: java
api_version: 1

handlers:
- url: /report/weekly
  servlet: mysite.server.CronServlet
  login: admin

Para testar um cron job, faça login como administrador e acesse o URL do manipulador no navegador.

Solicitações do Cron Service também contêm um cabeçalho HTTP:

X-Appengine-Cron: true

O cabeçalho X-Appengine-Cron é configurado internamente pelo Google App Engine. Se o gerenciador de solicitação encontrar esse cabeçalho, ele terá certeza de que a solicitação vem do cron. Se o cabeçalho estiver presente em uma solicitação de usuário externo no aplicativo, ele será removido, exceto em solicitações de administradores registrados do aplicativo, que têm autorização para definir o cabeçalho para fins de teste.

O Google App Engine emite solicitações Cron usando o endereço IP 0.1.0.1.

Como chamar os Google Cloud Endpoints

Não é possível especificar um endpoint do Google Cloud no campo url de um cron job. Se você quiser que o cron job chame um Google Cloud Endpoint, envie uma solicitação para um destino que seja veiculada por um gerenciador no aplicativo e chame o método e a classe do endpoint a partir do código do gerenciador.

Visualizar cron jobs no Console do GCP

É possível verificar as tarefas cron programadas na página Cron jobs do Console do GCP.

Você também pode ver os registros para saber quando os cron jobs foram adicionados ou removidos.

Saiba mais

Para informações detalhadas sobre como definir cron jobs, consulte a referência do cron.yaml.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java 8