Timetask scheduling Java Tasks

Asked

Viewed 724 times

3

I’m trying to set up some task cycles in Timetask so that it happens every day at a certain time, could someone give me a tutorial or some example that employs this question ? What happens is it works, but only once, if I happen to try another task, I can’t. Thanks in advance.

Here the class I use Timertask.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//import java.sql.Statement;
import java.util.Timer;  
import java.util.TimerTask;  
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import br.com.email.mundial.Conexao;

public class DiaTeste {  

    public static final long TEMPO = ( 11 * 1440); 

    protected static final String Class = null;

    public static void main(String[] args) throws SQLException {  
        final Connection conexao = new Conexao().getConnection();
        PreparedStatement stmt = conexao.prepareStatement(
                "SELECT P.duplic, "
                        + "       P.dtemissao, "
                        + "       P.dtvenc, "
                        + "       P.valor, "
                        + "       C.cliente, "
                        + "       P.obs2, "
                        + "       c.email, "
                        + "       P.codcli, "
                        + "       C.telent, "
                        + "       Nvl(P.valordesc, 0) VLDESC, "
                        + "       P.codusur, "
                        + "       P.prest, "
                        + "       P.codcob, "
                        + "       C.ieent, "
                        + "       C.bloqueio, "
                        + "       P.duplic "
                        + "       || '-' "
                        + "       || P.prest          AS TITULO, "
                        + "       P.numtransvenda, "
                        + "       P.codfilial "
                        + "FROM   pcprest P, "
                        + "       pcclient C, "
                        + "       pccob B, "
                        + "       pcfilial F "
                        + "WHERE  P.codcob = B.codcob "
                        + "       AND P.codcli = C.codcli "
                        + "       AND P.codfilial = F.codigo "
                        + "       AND  F.CODIGO = 4 "
                        + "       AND p.codcob NOT IN ( 'DEVP', 'DEVT', 'BNF', 'BNFT', "
                        + "                             'BNFR', 'BNTR', 'BNRP', 'CRED', 'DESD' ) "
                        + "       AND P.dtpag IS NULL "
                        + "       AND p.dtvenc = To_date(SYSDATE)-1000");
        ResultSet rs = stmt.executeQuery();
        while (rs.next()){

            final String cliente = rs.getString("cliente");
            final String dtvenc = rs.getString("dtvenc");
            final String valor   = rs.getString("valor");
            final String EMAIL   = rs.getString("EMAIL");
            final String duplic   = rs.getString("duplic");

            Timer timer = null;  
            if (timer == null) {  
                timer = new Timer();  
                TimerTask tarefa = new TimerTask() {  
                    @SuppressWarnings("deprecation")

                    public void run() {   


                        try {  

                            MultiPartEmail emai = new MultiPartEmail(); //classe utilizada para permitir anexos no email  
                            emai.setDebug(true);  
                            emai.setHostName("120.0.0.0"); //servidor SMTP. Aqui usamos um do Gmail  
                            emai.setSmtpPort(25);
                            emai.setAuthentication("teste,teste.com.br", "sadsadsadsa"); // login e senha da conta Gmail  
                            emai.setSSL(false); //Autenticação de segurança SSL setada como True  
                            emai.addTo(EMAIL);
                            //  emai.addTo("dsadsadasdsa.com.br"); //nome do email que vai receber o bkp do banco de dados. Pode ser o seu para teste  
                            emai.setFrom("[email protected]"); //endereço de email do remetente  
                            emai.setSubject(" Cobrança de Divida Ativa "); //assunto  
                            emai.setMsg("Prezado( a ) Senhor( a ): " + cliente

                                    +"\n\n\n Após diversos contatos telefônicos, visando uma solução rápida e eficaz quanto à necessidade de imediata liquidação por parte de V.S   .a do "
                                    + "título de crédito infra-identificado e, considerando que os referidos contatos não contaram com a colaboração e providência de V.S.a, servimo-"
                                    + "nos da presente para Notifica-lo formalmente quanto a MORA existente. \n\n"
                                    + ""
                                    + " Assim, notifica-se V. As para que no prazo de 48 (quarenta e oito ) horas, contada  s do recebimento desta, proceda a liquidação do título em "
                                    + "questão, devidamente acrescido de juros, taxas de permanência e de   mais encargos, o que poderá ser feito através do boleto bancário que se "
                                    + "encontra em vosso poder ou, alternativamente por meio de depósito    bancário em favor da Notificante, através da conta bancária A SER "
                                    + "INDICADA, sob pena de não o fazendo serem adotadas medidas legais    de cobranças, tais como, inclusão em cadastro de inadimplentes, "
                                    + "remessa da cambial a cartório de protestos e, posterior envio de pendência do Dep. Jurídico. \n\n"
                                    + ""
                                    + " Ressaltamos que caso deseje V.S.a promover a liquidação da pendência  ora notificada por meio de depósito na conta bancária, deve ser"
                                    + "mantido contato com nosso departamento financeiro, através do tele   fone (0xx62) 265 1001, para obtenção do valor corrigido e acrescido dos "
                                    + "encargos devidos, bem como do código identificador de depósito, permitindo assim a baixa do título e sustação das medidas de cobrança "
                                    + "acima nominadas, COMO TAMBÉM DADOS DA CONTA BANCÁRIA. \n\n"
                                    + ""
                                    + " Na hipótese da dependência já se encontrar liquidada quando do recebimento da presente, favor desconsiderar o conteúdo. \n\n"
                                    + ""
                                    + " Informamos mais, que caso V.S. a promova o pagamento do título em cartório, arcará na ocasião com despesas e juros cartorias, ficando"
                                    + "pendente ainda os encargos moratórios de taxa de permanência, os quais deverão ser liquidados por meio de depósito identificado junto a "
                                    + "conta bancária indicada nesta Notificação.\n\n"
                                    + ""
                                    + " Certos do interesse e colaboração, desde já agradecemos  e  ficamos no aguardo da imediata solução da pendência ora apontada e noticiada.\n\n"
                                    + ""
                                    + "Duplic. Nº "+ duplic    +   "\n\nvalor da divida R$" +   valor + "\n\ncom data de vencimento para:" + dtvenc);

                            emai.send(); //envia o email  

                            try {
                                //Statement stmt = conexao.createStatement();
                                //preparando para inserir dados de LOG.
                                String sql = "insert into PCCLIENT" +
                                        " (LOGENVIO)" +
                                        " values (?)";
                                PreparedStatement stmt = conexao.prepareStatement(sql);
                                stmt.setString(1, "carta1");
                                stmt.execute();
                                stmt.close();
                            } catch (SQLException e) {
                                System.out.println("passei pelo insert");
                            }

                            //chamar metodo  
                        } catch (Exception e) {  
                            e.printStackTrace();  
                        }  
                    }  
                };  

                timer.scheduleAtFixedRate(tarefa, TEMPO, TEMPO);            
            }  

        }  

    }

}
  • Wesley, welcome to [en.so]! It would be interesting if you completed the code at least so as not to be an example in half.

  • Wesley, I did a brief analysis of the code just now and apparently it should work, that is, create a timer for each entry in the database and then run at the given time. When you say it works only once, what exactly happens? Does the program run once and shuts down completely? Or does it run with error the other times? What error?

  • good and that in fact it stays in Loop, never stops, wanted a shape that it looks as soon as it arrived in the last email sent and only do this process again the next day.

1 answer

3


To execute the Timer once per day, the third parameter of the method of the method shall be the value in milliseconds for a day.

The method you are using gets three parameters:

  1. The task to be executed
  2. The interval of time (ms) from now until the first execution
  3. The interval of time (ms) between the executions

So to run the routine once now and then once every day, use the following example:

//quantidade de dias em milissegundos
TEMPO = 24*60*60*1000;

//executa a primeira vez agora e depois uma vez por dia
timer.scheduleAtFixedRate(tarefa, 0, 24*60*60*1000);

If you want to run at a fixed time, pass a date (java.util.Date) with the desired time in the second parameter. That date would be the date of the first execution and the other executions would always be at 24-hour intervals from that date.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.