Search

'Spring/Base'에 해당되는 글 2건

  1. 2012.04.18 Task, Scheduler 등록
  2. 2012.04.18 Spring Event

Task, Scheduler 등록

Spring/Base 2012. 4. 18. 13:17 Posted by 퓨어레드

xml 설정

 <!-- Task 등록 -->
 <task:executor id="g2Executor" pool-size="5-10" queue-capacity="255" />
 
 <!-- Scheduler 등록 -->
 <task:scheduler id="g2Scheduler" pool-size="3" />
 
 <!-- 어노테이션 Task, Scheduler 등록.. -->
 <task:annotation-driven executor="g2Executor" scheduler="g2Scheduler"  />

 

java 코드

@Scheduled(cron="* 1 * * * *")
private void licenseReload ()
{
  ...
}

@Async
private void work ()
{
   ...
}

 

다만 비동기식 테스크의 경우 외부에서 바로 work 를 호출해야 되며 클래스 내부에서 호출되면 비동기로 동작하지 않는다 ㅠㅠ 방법을 찾아보자!!

 

'Spring > Base' 카테고리의 다른 글

Spring Event  (0) 2012.04.18

Spring Event

Spring/Base 2012. 4. 18. 11:32 Posted by 퓨어레드

Spring Event

-       개발팀 남한희

1.     이벤트 란 무엇일까!!?

A.     이벤트란 사건! 한 객체를 기준으로 데이터가 변경되거나 상황이 변경 되었을 때 사건을 발생시켜 다른 클래스에서 이를 알도록 해주는 방식이다.

B.      윈도우는 이벤트 방식의 프로그래밍을 한다. 버튼이 클릭되었다, 화면이 지워졌다, 마우스가 움직인다 등의 이벤트가 정의 되어 있고, 이 이벤트를 잡아서 프로그래밍을 진행한다.


2.     이벤트의 구현

A.     이벤트 구현은 언어 단에서 지원을 해주는 부분이 있고, 자체적으로 구현을 해야 하는 경우가 있다.

B.      언어 레벨에서 지원을 해주는 언어는 C#! 델리게이터 라는 구분이 있어서 이벤트를 추가하거나 삭제 할수 있다.

C.      자바는 언어 레벨에서의 이벤트를 지원하지 않는다. 그렇기 때문에 이벤트 중심의 프로그래밍을 할 경우 이벤트 처리 엔진이 있어야 한다. 보통의 이벤트 처리 엔진은 디자인 패턴중 옵져버 패턴으로 구성된다. (옵저버 패턴은 따로 알아보기 바람)


3.     Spring Level Event

A.     Spring 에서는 ApplicationContext 에서 이벤트를 사용 할 수 있도록 지원해준다.

B.      Event 를 사용하기 위해선 3가지 구성 요소가 필요하다.

                         i.         이벤트 발생 Bean (옵저버 패턴중 Subject)

                        ii.         이벤트

                       iii.         이벤트 처리 Bean

 

 

 

4.     Spring Level Event 사용 절차

A.     Bean 이 이벤트를 발생시킬지 유무를 결정한다.

B.      발생시킴을 결정하면 발생시킬 이벤트 객체를 만든다.

                         i.         이 객체는 ApplicationEvent 를 상속 받는다. (org.springframework..context.ApplicationEvent)

                        ii.         만약 Event 처리에 추가 데이터가 있다면 추가 데이터를 만들어준다.

public class G2ApplicationEvent extends ApplicationEvent
{
	protected G2EventType eventType;
	protected Object eventData;

	// .. getter/setter 구현, 생성자 구현
}



C.      이벤트 발생 Bean 에서 이벤트 발생 타이밍에서 이벤트를 발생시킨다.

                         i.         이벤트 발생 Bean 에선 먼저 ApplicationContext 를 주입받는다.
@Autowired ApplicationContext applicationContext;
(
주의 : WebApplicationContext 를 주입받아도 되지만 JUnit 테스트에 문제가 있음)

                        ii.         이벤트 발생은 ApplicationContext publishEvent 를 이용한다.
applicationContext.publishEvent (new MyEvent (this, data);

D.     이벤트 처리 Bean 에서 처리할 이벤트를 구현함

                         i.         ApplicationListener implements 한다.

                        ii.         ApplicationListener 은 제너릭 타입이기 때문에 수신 할 이벤트를 적어준다.
implements ApplicationListener<MyEvent>

                       iii.         ApplicationListerner onApplicationEvent(<T> arg0) 을 구현한다.

@Override
public void onApplicationEvent (MyEvent myEvent)
{
// 해당 이벤트 처리를 해준다.
}

                       iv.         만약 여러 이벤트를 처리 할 경우 해당 이벤트로 ApplicationListener 을 추가 구현한다.

                        v.         추가 구현시 당연히 onApplicationEvent 역시 추가되어야 한다.

                       vi.         이벤트를 구분하는 데이터는 onApplicationEvent 의 아규먼트 클래스 타입으로 구분한다. 또한 같은 인터페이스를 제너릭으로 달리 여러 번 구현하기 때문에 주석을 잘 달아주어 해당 이벤트 핸들러가 하는 일을 정확히 명시하도록 한다.!

 

'Spring > Base' 카테고리의 다른 글

Task, Scheduler 등록  (0) 2012.04.18