본문 바로가기
Error

[Error] Property 'cronExpression' threw exception; nested exception is java.text.ParseException: Support for specifying both a day-of-week AND a day-of-month parameter is not implemented. 해결 방법

by GoodDayDeveloper 2024. 3. 28.
반응형

 

 

Spring quartz를 설정하다가 에러가 발생하였습니다.

 

 

 

Property 'cronExpression' threw exception; nested exception is java.text.ParseException: Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.

 

 

 

 

'cronExpression' 속성에서 예외가 발생했습니다. 중첩된 예외는 java.text.ParseException입니다. 요일과 날짜 매개변수를 모두 지정하는 지원은 구현되지 않습니다.

 

 

 

에러 원인은 번역한대로 Spring quartz의 cronExpression 속성의 값을 설정할때 에러가 발생하였던 겁니다.

 

 

 

 

 

제가 사용한 코드입니다.

 

cronExpression 속성에 value값이 0 */1 * * * * 으로 되어 있습니다.

 

이 부분이 잘못표기되어 에러가 되었는데 어떤 부분이 에러가 되었는지 확인해보겠습니다.

 

 

 

 

[Error] Property 'cronExpression' threw exception; nested exception is java.text.ParseException: Support for specifying both a day-of-week AND a day-of-month parameter is not implemented. 해결 방법

 

 

 

 

초 / 분  / 시  / 일  / 월  / 요일  (년옵션)

 

cronExpression 속성에 value값 모두 6자리로 구성되어 있습니다.

 

 

옵션값 내용
* 모든 값
? 특정 값 없음
- 범위 지정
, 여러 값 지정 구분에 사용
/ 초기값과 증가치 설정에 사용
L 지정할 수 있는 범위의 마지막 값
W 월~금요일 또는 가장 가까운 월/금요일
# 몇 번째 무슨 요일 2#1 => 첫 번째 월요일

 

 

그리고 위처럼  6자리에 다양한 옵션을 적용할 수 있습니다.

 

 

 

여기서 제가 설정값은 0 */1 * * * * 였는데

 

네번째 자리와 여섯번째 자리인 일과 요일은 같이 지정할 수 없습니다.

 

 

0 */1 * ? * *         or            0 */1 * * * ? 

 

 

그래서 옵션중 특정값이 없는 ? 항목을 일과 요일에 넣어줘야 에러가 발생되지 않습니다.

 

 

 

 

이런식으로 말이죠

 

 

쿼츠 예시 내용
"0 0 12 * * ?" 매일 정오 12시에 실행
"0 15 10 ? * *" 매일 오전 10시 15분에 실행
"0 15 10 * * ?" 매일 오전 10시 15분에 실행
"0 15 10 * * ? *" 매일 오전 10시 15분에 실행
"0 15 10 * * ? 2005" 2005년 동안 매일 오전 10시 15분에 실행
"0 * 14 * * ?" 매일 오후 2시부터 시작하여 오후 2시 59분까지 실행
"0 0/5 14 * * ?" 매일 오후 2시부터 2시 55분까지 5분 간격으로 실행
"0 0/5 14,18 * * ?"     매일 오후 2시부터 2시 55분까지, 오후 6시부터 6시 55분까지 5분 간격으로 실행
"0 0-5 14 * * ?" 매일 오후 2시부터 2시 05분까지 분 단위로 실행
"0 10,44 14 ? 3 WED" 3월의 매주 수요일 오후 2시 10분과 2시 44분에 실행
"0 15 10 ? * MON-FRI" 매주 월요일부터 금요일까지 오전 10시 15분에 실행
"0 15 10 15 * ?" 매달 15일 오전 10시 15분에 실행
"0 15 10 L * ?" 매달 마지막 날 오전 10시 15분에 실행
"0 15 10 ? * 6L" 매월 마지막 금요일 오전 10시 15분에 실행
"0 15 10 ? * 6#3" 매월 세번째 금요일 오전 10시 15분에 실행

 

 

다양한 Spring quartz 예시를 볼 수 있습니다.

 

반응형

 

Spring quartz  사용법

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <!-- Cron설정 -->
    <bean id="goEmailScheduler2"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger2" />
            </list>
        </property>
    </bean>
    
    <bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">  
         <property name="jobDetail" ref="DDailyStock2" />  
          <property name="cronExpression" value="0 */1 * * * ?" />
    </bean>
    
    <bean id="DDailyStock2"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="Service" />
        <property name="targetMethod" value="getTestData" />
        <property name="concurrent" value="false" />
    </bean>
     
</beans>
 
cs

 

XML에서 Bean을 선언한 후에 Bean에 다양한 속성에 맞추어 값을 넣어주기만 하면 됩니다.

 

그리고 targetObject에 선언된 Service에서는

 

@Service("Service")

 

서비스 어노테이션으로 빈으로 설정 후  선언된 값의 페이지에서 메서드를 선언 후 작업을 해주시면 됩니다.

 

 

반응형

댓글