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.
– utluiz
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?
– utluiz
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.
– Wesley Costa