Pergunta

Precisamos executar uma função periodicamente no aplicativo da Web Java. Como chamar função de alguma classe periodicamente? Existe alguma maneira de a função de chamada quando algum evento ocorreu como alta carga no servidor e assim por diante. O que é Crontab? Isso é trabalho periodicamente?

Foi útil?

Solução

Para ligar para algo periodicamente, veja TimerTask

Outras dicas

Se você precisar de algo mais robusto, você pode usar Quartzo

Quanto a crontab é a ferramenta de agendamento nas máquinas Unix.

Para chamar métodos quando o servidor possui alta carga, você tem pelo menos duas abordagens possíveis. Seu servidor de aplicativos pode ter ganchos de gerenciamento que você permitiria monitorar seu comportamento e tomar medidas programáticas. Como alternativa, você tem algum recurso de monitoramento do sistema (por exemplo, Tivoli ou OpenView) e gera "eventos", não deve ser muito difícil entregar eventos como (por exemplo) mensagens JMS e fazer com que seu servidor as pegue.

No entanto, você pode querer explicar um pouco mais sobre o que deseja alcançar. Aplicativo adaptativo Beahviour pode ser bastante complicado de acertar.

Se você quiser executar algo periodicamente, não faça isso no servidor da web. Essa seria uma abordagem muito errada na IMO. É melhor usar cron Em vez disso, se você estiver em um sistema operacional semelhante ao UNIX. Os servidores Windows oferecem funcionalidade semelhante.

Precisamos executar uma função periodicamente no aplicativo da web java

(1) Portanto, olhe no seu descritor de implantação (web.xml) Defina um ouvinte para inicializar no horário de inicialização.

Como chamar função de alguma classe periodicamente?

(2) Crie um Cronômetro no ouvinte.

Existe alguma maneira de a função de chamada quando algum evento ocorreu como alta carga no servidor e assim por diante

(3) e execute alguns threads para verificar as condições do sistema que são acessíveis com Java, até execute o System Progs (tempo de atividade, etc.) e analise a saída.

Crontab pode ser uma maneira, mas a execução do Java iniciará outra JVM e essa é realmente a coisa quente nos contêineres de servlet: todas as corridas na mesma JVM.

Não se esqueça do java.util.Concurrent - ele tem muitas aulas para agendamento, por exemplo, ScheduledThreadPoolExecutor, se você precisar de mais do que um cronômetro simples.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

Há também um backport para Java 1.4: http://backport-jsr166.sourceforge.net.

Se você já usa a primavera, pode querer dar uma olhada na estrutura de execução de tarefas da Spring - usando @scheduled e @async para anotar métodos como tarefas e implementar a funcionalidade em um processador que delega o trabalho real a um trabalhador, conforme descrito em:

http://blog.springsource.com/2010/01/05/task-scheduling-simplificações

A vantagem é que você pode definir temporizadores usando uma sintaxe do tipo cron no seu contexto de primavera e não precisa de nada de especial para configurar tarefas, ela também é bem integrada aos aplicativos Java EE e deve ser executado com os servidores da Web (que personalizados Os tópicos tendem a não fazer sempre).

Como chamar função de alguma classe periodicamente?

Existem várias soluções: um Cronômetro, uma implementação de Java Cron como CRON4J, Quartzo, ou mesmo o API do Timer EJB. Escolher um ou outro depende muito do contexto: o tipo de aplicação, as tecnologias usadas, o número de empregos etc.

Existe alguma maneira de a função de chamada quando algum evento ocorreu como alta carga no servidor e assim por diante

Talvez você possa usar o JMX em seus trabalhos para acessar e monitorar informações e desencadear uma ação sob alguma condição específica. Mas este é mais um modo de tração, não baseado em eventos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top