nobodj
No SG 운동

나도 스프링 잡 스케쥴러 February 12, 2017

나도 스프링 잡 스케쥴러.

PL/SQL에서 처음 접한 스케쥴러를 스프링에서 구현해본다. 내가 삽질을 해서 그렇지, 정말 초간단하게 사용할 수 있었다.

모든 페이지에서 접근하는 정보(하루에 한번만 갱신하면 되는 data를 페이지 접속시마다 db에 쿼리를 날리는 것은 비효율적일 것이다. 물론 매페이지에 접근하는 메소드마다 이를 기술하는 것은 도저히 용납할 수 없다.

1. spring job scheduler 를 bean객체로 만들라

web.xml 에 기술한 DispacherServlet 클라스를 찾아서

conf/mvc/common-servlet.xml에 기술할 component-scan 체크(여기에 등록이 되야 bean으로 만들어 준다는 구만)

<context:component-scan base-package=”com.kh”/>

 

task관련은 다른 xml에 쓰기로 하자. task관련 클라스(?)를 import하면 따로 task태그를 기술할 필요가 없었다. 뭐지…

2. @Scheduled 어노테이션으로 실행할 메소드 만들기

@Service
public class KHScheduler {

@Resource(name = "com.kh.main.MainService")
private IMainService        mainService;

@PostConstruct
public void init() throws Exception{
getCurrBeginningInfo();
}

/** 
*  매일 새벽3시에 개강일 정보를 갱신하는 job 생성.
* 매니져 클라스에 데이터를 저장하고, view단에서 참조하게 한다.
* @throws Exception
 */
@Scheduled(cron="0 0 3 * * *")
public void getCurrBeginningInfo() throws Exception{
Map<String, Object>   model           = new HashMap<String, Object>();
List<Map<String, String>> currList      = null;

long time = System.currentTimeMillis(); 
SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String str = dayTime.format(new Date(time));
System.out.println(str);

long start = System.currentTimeMillis() ; 

/* 개강일list */
currList = mainService.selectCurrBeginning();
KHCurrManager.getInstance().setCurrList(currList);

System.out.println(">>currList@KHScheduler = "+currList);

long end = System.currentTimeMillis(); 

System.out.println((end-start)/1000 +" 초 걸림");
}
}

3. Manager 클라스 singleton 객체로 만들기

매번 새로운 객체를 생성하지 않는 singleton객체를 만들어서 모든 세션에서 동일한 객체를 참조해서 data를 가져가기를 원한다.

  • 생성자에 db에 data를 가져오는 걸 기술해도 될 거 같은디.

4. 톰캣서버 실행시 한번, 그리고 스케쥴러에서 설정한 시간마다 실행되길 원한다.

1. @PostConstruct annotion 사용하기

@Component
public class Test { 
@PostConstruct
public void init(){
// 시스템 시작시 해야할 것
}
}

생성할 스프링의 Bean 안에 기술. 당연 이 Bean은 Compoent-scan이 되어야한다.

2. 물론 위에 자동으로 안하려면, @Component 어노테이션 뺀다. xml에 기술.

<bean class="패키지.Test"/>

3. @PostConstruct 어노테이션을 못쓸 환경이면

<bean class="패키지.Test" init-method="init"/>

 

No Comments on 나도 스프링 잡 스케쥴러
Tags:
Categories: Coding Spring Framework