TimeTask scheduling Tasks in Java

3

I'm trying to set up some task cycles in TimeTask so that it happens every day at a particular time, could someone give me a tutorial or some example that employs this question? What happens is that it works, but only once, if by chance I try to do another task, I can not. Thank you in advance.

Here is the class I use the 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);            
            }  

        }  

    }

}
    
asked by anonymous 11.09.2014 / 15:52

1 answer

3

To run Timer once a day, the third parameter of the method method must be the value in milliseconds for a day.

The method you are using takes three parameters:

  • The task to be performed
  • The time interval ( ms ) from now until the first run
  • The time interval (% w / w%) between runs
  • 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 ( ms ) with the desired time in the second parameter. This date would be that of the first run and the other runs would always be at 24 hour intervals thereafter.

        
    11.09.2014 / 23:05