티스토리 뷰
전자정부프레임워크에서 스케쥴러 사용이 필요해 1번방법으로 구현했다가, 스케쥴러 시간 설정을 설정파일로 빼달라는 요청이 있어서 2번 방법으로 다시 구현했다. 사실 이 요청은 시간을 Globals.properties로 빼달라는 것인것 같았지만..
1번 방법에서 단순히 값을 가져와서 넣는건 "attribute value must be constant"오류가 났다. 뭔가 해결하는 방법이 있겠지만, 시간이 없어서 2번방식으로 했다! (단순히 static final을 붙여주는건 안됐다 ㅠㅠ)
1. @Scheduled 어노테이션 방식
어노테이션 방식은 아주 간단하다.
1️⃣ 설정파일 (context-scheduler.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<task:annotation-driven />
</beans>
2️⃣ 스케쥴러로 실행 할 메서드
2-1. @Component 어노테이션으로 bean 등록
2-2. 실행 할 메서드 위에 @Scheduled 어노테이션 붙여주기
package scheduler;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component //@Component 어노테이션으로 bean등록
public class LoginScheduler {
@Scheduled(cron = "* * * * *") //스케쥴러 시간 설정
public void test () {
System.out.println("스케쥴러 테스트");
//스케쥴러 로직 작성
}
}
2. 설정파일에서 스케쥴러 설정
1️⃣ maven dependency 추가
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.7</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>
2️⃣ 스케쥴러를 실행할 메서드
- 클래스를 @Service 어노테이션을 사용하여 testScheduler라는 이름으로 bean에 등록해준다.
- 스케쥴러로 실행할 메서드 작성
package scheduler;
import org.springframework.stereotype.Service;
@Service("🌱testScheduler🌱")
public class TestScheduler {
public void 💕test💕() {
System.out.println("스케쥴러 테스트");
//스케쥴러 실행 로직
}
}
3️⃣ 설정파일 (context-scheduler.xml)
3-1. 스케쥴러를 돌릴 서비스와 메서드를 설정해준다.(2️⃣에서 등록한 bean이름과 method명을 기입한다)
(맨 처음 참고자료를 대충봐서 ref를 value로 보고 왜 안돼...라고 시간을 허비했다...🥲 )
3-2. 스케쥴러 시간 등록 (3-1에서 설정한 bean를 참조한다)
3-3. 스케쥴러 등록(3-2에서 작성한 bean 아이디를 참조하여 등록해준다)
* 스케쥴러를 여러개 등록하기 하려면 1번과 2번을 각각 다른 아이디로 작성해 준후 3번에 등록해주면 된다!
<?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-4.0.xsd">
<!-- 1️⃣ 스케쥴러를 돌릴 서비스와 메서드 설정-->
<bean id="✨schedulerEvent✨" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="🌱testScheduler🌱"/>
<property name="targetMethod" value="💕test💕"/>
<property name="concurrent" value="false"/> <!--동시에 실행되지 않도록 false-->
</bean>
<!-- 2️⃣ 스케쥴러 시간 설정-->
<bean id="💙schedulerEventTrigger💙" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="✨schedulerEvent✨" />
<property name="cronExpression" value="0/10 * * * * ?" /> <!--10초마다 -->
</bean>
<!-- 3️⃣ 스케쥴러 등록-->
<bean id="Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="💙schedulerEventTrigger💙" />
</list>
</property>
</bean>
</beans>
4️⃣ Globals.properties에 시간 빼기
4-1. 시간 작성
Globals.scheduler.time=0 00 3 ? * *
4-2. 3-2의 시간을 변수로 정해주면 된다.
<property name="cronExpression" value="${Globals.scheduler.time}" />
'백엔드 > spring' 카테고리의 다른 글
properties의 값 List<Integer>로 가져오기 (0) | 2022.08.10 |
---|---|
전자정부프레임워크에서 다중디비 연결하기(mariaDB, oracle) (0) | 2022.05.02 |
[springboot+react+jwt] jwt 인증 후 react에서 headers에 인증값이 없는 경우 해결 방법 (0) | 2022.04.11 |
JSP에서 properties 값 사용하기 (0) | 2022.03.28 |
@Controller 와 @RestController의 차이 (0) | 2022.03.24 |
- Total
- Today
- Yesterday
- 코테
- Kubernetes
- javascript
- tomcat
- 리액트
- 현대코테
- 도커
- 자바코테
- 코딩테스트
- 자바
- Spring
- 전자정부프레임워크
- 아파치카프카
- 자바스크립트
- Linux
- java
- 현대오토에버
- 톰캣
- 스프링
- centos
- Docker
- springboot
- softeer java
- 오토에버코테
- softeer
- react
- java 코테
- mysql
- 현대
- 쿠버네티스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |