[RESOLVIDO]Rodar sistema só durante a semana

4 respostas
snowblacksoul

Pessoa desenvolvi uma classe para chamar os outros programas que criei
Esses sistema de processamentos , devem ocorrer em dias já estabelecidos pelo financeiro
esses dias são: 7, 10, 13, 16, 19, 22, 25,28, 2 e 4.
Desenvolvimento para windows, ja coloquei scheduler para chamar sempre 3 dias depois, até ai tudo bem
mas… se um desses dias cair no final de semana nao irá fazer, pois o banco de dados não funciona no final de semana " não me pergunte porque rsrsrsr" pois tbem não sei.
fiz uma lógica aqui, mas eu gostaria da seguinte forma, quando for domingo ele entrar num Thread.sleep e ficar até segunda-feira
se cair no sabado ficar no sleep até segunda feira seria a melhor maneira que achei, no meu codigo não esta acontcendo, se alguém tiver outra ideia e poder me ajudar nisso
agradeço…

public class FirstDayofWeek {  
      
    public static void main(String[] args) throws InterruptedException {        
  
           Date d = new Date();    
            Calendar c = new GregorianCalendar();    
            c.setTime(d);    
            String nome = "";    
            int dia = c.get(c.DAY_OF_WEEK);    
            switch(dia){    
                case Calendar.SUNDAY:  
                 nome = "Domingo";  
                // JOptionPane.showMessageDialog(null, "Domingo o banco não funciona.....");  
                 while(nome == "Domingo"){  
                     System.out.println("Aguardando 5 segundos...");  
                Thread.sleep(5000);  
                 nome = ("Segunda");  
                 }  
                   
                System.exit(0);  
              break;    
          case Calendar.SATURDAY:   
              nome = "sábado";  
                JOptionPane.showMessageDialog(null, "Domingo o banco não funciona.....");  
                System.exit(0);  
              break;    
              default:  
                   String comando = "C:\\teste\\arquivo.zip";   
                try{   
                    Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando);   
                    }catch (IOException e){  
                        JOptionPane.showMessageDialog(null, "Domingo o banco não funciona.....");  
                    }  
                  break;  
               
        }    
  
    }  
}

4 Respostas

AMON-HA

Faça um polling (ideal de hora-em-hora, ou menos)…
Aí se cair num dia válido, libera… caso contrário, bloqueia…

Existe a possibilidade da pessoa iniciar o sistema na sexta e ir até o sábado…
Daí, quanto menor é o intervalo de tempo do seu polling maior é a eficiência do seu sistema…

nel

Oi,

se eu não me engano, é possível no Scheduler agendar tarefa, ou seja, você define quando quer que ele faça uma ação.
Você pode definir que quando for sábado ou domingo informar que ele deve aguardar até segunda-feira.

Dá uma olhada no Quartz-Scheduler e nesse tutorial de Scheduler.
Creio que serão bem úteis, principalmente o quartz que é bastante utilizado.

Abraços!

snowblacksoul

Valeu Nel, bem legal mesmo…

snowblacksoul

Fale pessoal, olha conseguir fazer do meu jeito, não sei se estpa tosco ou vai ter problemas com perfomance
gostaria que a galera dessa a opniao para que eu possa melhor meu codigo

public class TestDataSistema {
   
public static void main(String[] args) throws InterruptedException {
    
      
        Date d = new Date();  
        Calendar c = new GregorianCalendar();  
        c.setTime(d);  
        String nome = "";  
        int dia = c.get(c.DAY_OF_WEEK);  
        switch(dia){  
          case Calendar.SUNDAY://domingo
              nome = "Segunda";
              while(dia == 1){
                  System.out.println("Aguardando 5 segundos...");
                    Date a = new Date();  
                    Calendar b = new GregorianCalendar();  
                    b.setTime(a);  
                    dia = b.get(Calendar.DAY_OF_WEEK);  
                  Thread.sleep(5000);
                  
              }
              break;  
          case Calendar.SATURDAY: //sabado
              nome = "Segunda";
              while(dia == 7){
                    Date a = new Date();  
                    Calendar b = new GregorianCalendar();  
                    b.setTime(a);  
                    dia = b.get(Calendar.DAY_OF_WEEK);  
                  if(dia == 1){//quando sair do sabado e entrar no domingo
                   while(dia == 1){
                       Date e = new Date();  
                        Calendar f = new GregorianCalendar();  
                        System.out.println("Aguardando 5 segundos...");
                        f.setTime(e);  
                        dia = f.get(Calendar.DAY_OF_WEEK);  
                   Thread.sleep(5000);
                      }
                  }
              }
          break;  
              default:
                   String comando = "C:\\teste\\arquivo.zip"; 
                try 
                    { 
                    Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando); //executa o sistema
                    } catch (IOException e)
                    {
                        e.printStackTrace(); 
                    }
             
        }  
        System.out.println(nome); 
    }
}
Criado 22 de setembro de 2011
Ultima resposta 23 de set. de 2011
Respostas 4
Participantes 3