전문가가되자
149
2019-06-23 15:23:53 작성 2019-06-23 15:41:43 수정됨
6
302

Quartz 종료 질문있습니다 선배님들 (오류관련)


안녕하세요 선배님들 제가 quartz scheduler를 공부 하고있습니다.

근대 문제가 하나 발생해서 찾아도 오류를 잡을수 없어 여쭤봅니다.

제가 Quratz Scheduler 를 2개를 돌릴려고 해서 2개를 만들었습니다.


코드:


SchedulerFactory schedulerFactory  = new StdSchedulerFactory();
        
        Scheduler scheduler = schedulerFactory.getScheduler();
        Scheduler scheduler2 = schedulerFactory.getScheduler();
        
        JobDetail jobDetail = newJob(Job1.class)
                .withIdentity("job1", "group1")
                .build();
        
        JobDetail jobDetail2 = newJob(Job2.class)
                .withIdentity("Job2", "group2")
                .build();
        
        Trigger trigger1 = newTrigger()
                .withIdentity("trigger1", "group3")
                .withSchedule(cronSchedule("*/30 * * * * ?"))
                .build();
        
         Trigger trigger2 = newTrigger()
               .withIdentity("trigger2", "group4")
               .withSchedule(cronSchedule("*/20 * * * * ?"))
               .build();
        
         scheduler.scheduleJob(jobDetail, trigger1);
         scheduler2.scheduleJob(jobDetail2, trigger2);
        
         scheduler.start();
         scheduler2.start();


이렇게 만들엇는대


제가 Job2번을 끌려고 코드를

public void stopJob2() {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();

        try {
            Scheduler scheduler2 = schedulerFactory.getScheduler();
        
            JobDetail jobDetail2 = newJob(Job2.class)
                    .withIdentity("Job2", "group2")
                    .build();
            Trigger trigger2 = newTrigger()
                   .withIdentity("trigger2", "group4")
                   .withSchedule(cronSchedule("*/20 * * * * ?"))
                   .build();
            
            scheduler2.scheduleJob(jobDetail2, trigger2);
            scheduler2.shutdown(true);


            //scheduler2.shutdown();


        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


이렇게 짯는데 안되네요...

오류내용은

org.quartz.ObjectAlreadyExistsException: Unable to store Job : 'group2.Job2', because one already exists with this identification.

이러합니다.

인터넷을 뒤지고 적용해봐도 잘안되던대 혹시 아시는 선배님들 계실까요?


0
0
  • 답변 6

  • mrjq
    112
    2019-06-23 20:01:15 작성 2019-06-23 20:01:33 수정됨

    JobDetail jobDetail2 = newJob(Job2.class)
                        .withIdentity("Job2", "group2")
                        .build();


    이 job2 생성 코드가 2번 있잔아요. 이미 위에서 생성한 상태인데, 밑에 메소드에서 다시 생성하려니 오류가 발생합니다. job1도 마잔가지니 같은 오류가 발생할거에요.


    0
  • 전문가가되자
    149
    2019-06-23 23:00:31

     

    @ mrjq 맞습니다....job1도 똑같습니다...
    0
  • lloydkwon
    2k
    2019-06-24 13:58:55

    scheduler는 대개 하나만 생성해서 처리해요...

    job이 여러개 라고 해서 scheduler를 여러개 만들 필요는 없구요. 하나의 scheduler에 모두 등록해서 처리가능해요...


    그리고 해당 job만 멈추게 하는 기능이 scheduler에 있으니 참고하세요.

    scheduler.deleteJob(jobKey("job1", "group1"));

    아래는 특정 trigger를 멈추게 합니다..

    scheduler.unscheduleJob(triggerKey("trigger1", "group1"));


    scheduler를 멈추는 것은 어플리케이션을 종료할 때 외에는 딱히 종료시킬 필요는 없구요.



    0
  • 전문가가되자
    149
    2019-06-24 21:53:22

    @lloydkwon  감사합니다.

    deleteJob 을 쓰니깐 멈추네요


    unschedulerjob도 써보겟습니다!




    @mrjq , @lloydkwon 두선배님들 답변주셔서 감사합니다. 더 공부많이해서 저도 도움이되도록할께요

    신입20일차라 많이 부족합니다. ㅠㅠ

    0
  • lloydkwon
    2k
    2019-06-26 13:25:52

    신입이라고 뭐 크게 다를 건 없겠지만서두...

    이른 시긴에 quartz를 다루네요...

    처음에는 어렵지만 사용하다 보면 익숙해져요.

    대신 관련 자료를 여러번 정독하면 익히는데 도움이 될 겁니다..


    0
  • 전문가가되자
    149
    2019-06-29 22:27:02
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.