SimpleMappingExceptionResolver는 HandlerExceptionResolver의 구현체로서 예외가 발생하였을때
그 종류에 따라 에러 페이지를 표시한다던지, 혹은 다른 Controller를 호출하여 후속 작업을
가능하도록 하게 하여 준다. 단, view layer에서 발생하는 예외는 이름 그대로 HandlerException
Resolver이기 때문에 처리 할 수 없다.

<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="EXCEPTION 종류 class">view/error</prop>
</props>
</property>
</bean>

만약, 해당 에러 페이지로 이동하기 전 log를 남기고 싶다면 warnLogCategory property를 이용하여
남길 수 있다. 

<property name="warnLogCategory" value="abcd"/>



또 다른 방법으로는,
@Controller 가 명시된 Controller에서 @ExceptionHandler(Exception.class)을 표시한 메서드를 구현하면
실질적으로 그 컨트롤러 안에 예외가 발생하였을 경우 해당 메서드가 실행되게 된다.

    @ExceptionHandler(Exception.class)
    public void testException(Exception ex) {
        // ...
    }
    
뿐만 아니라 @ResponseStatus 태그도 같이 사용할 수 있어 Response Status Code를 전달할 수도 있다.

    @ExceptionHandler(Exception.class)
    @ResponseStatus(value=HttpStatus.NOT_FOUND)
    public void testException(Exception ex) {
        // ...
신고

'09.Framework' 카테고리의 다른 글

JUnit4 테스트 Datasource Rollback  (0) 2011.12.06
Spring Framework / ReloadableResourceBundleMessageSource  (0) 2011.08.16
Spring MVC SimpleMappingExceptionResolver  (0) 2011.08.16
Spring 3.0 에서 Quartz 설정  (0) 2011.08.09
iBatis 동적 SQL 작성  (0) 2009.10.25
WebWork in Action  (0) 2009.10.07
Posted by Stewie
TAG Spring
특정 파일이나 디렉토리를 필터링 할 필요가 있을 때 사용하는
interface FileFilter와 FilenameFilter

File class는 

- public String[] list( FilenameFilter filter );
- public File[] listFiles( FileFilter filter );
- public File[] listFiles( FilenameFilter filter );

와 같은 3개의 메서드를 가지고 있는데 여기서는 FilenameFilter를 이용한 예제를 보면

File file = new File( "c:/temp" );
File[] fileList = file.listFiles( new FilenameFilter() {
  public boolean accept( File dir, String name ) {
  return name.endsWith( ".dat" );
  }
} );

와 같이 accept 메서드를 구현하여 filter결과를 boolean 형식으로 리턴하면 된다.
신고

'01.Java' 카테고리의 다른 글

Exception Handling vs. Error Logging  (0) 2012.02.14
JUnit Test. 그리고 Stub, Mock  (0) 2011.12.27
java.io.FilenameFilter 활용  (0) 2011.08.09
[예시] byte단위로 잘라서 String 만들기  (0) 2010.11.25
Method Class  (0) 2010.06.07
Aspect Oriented Programming (AOP)  (0) 2010.01.21
Posted by Stewie

Spring 3.0 에서 제공하는 TaskExecutor와 TaskScheduler도 있지만 Quartz를 사용하는 경우도 있다.

필수 dependency
               
                <!-- Quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
</dependency> 

가장 큰 설정은 trigger와 listener

1. Trigger

org.springframework.scheduling.quartz.CronTriggerBean
org.springframework.scheduling.quartz.SimpleTriggerBean

2종류가 있는데 cronjob스럽게 돌리려면 CronTrigger를 그렇지 않고 인터벌 및 간단한 설정으로
스케쥴러를 구동시키려면 SimpleTrigger를 사용하는 것이 좋다.
 
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="testJob"/>
<property name="cronExpression" value="0/1 * * * * ?"/>
</bean>

 다음과 같이 등록하고

<bean id="testJob" class="org.springframework.scheduling.quartz.JobDetailBean"
     p:jobClass="com.test.testDaemon">
<property name="jobDataAsMap">
 <map>
   <entry key="test1Service">
    <ref bean="test1Service"/>
   </entry>
   <entry key="test2Service">
    <ref bean="test2Service"/>
   </entry>
 </map>
</property>
</bean> 

다음과 같이 설정하면 된다. testDaemon 에서 쓰이는 bean들은 map형태로 프로퍼티를 등록하면 된다. (setter구현 必)


  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="testTrigger"/>
</list>
</property>
<property name="quartzProperties">
<props>
    <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
    <prop key="org.quartz.threadPool.threadCount">3</prop>
    <prop key="org.quartz.threadPool.threadPriority">4</prop>
    <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
    <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
</props>
</property>
</bean>


SchedulerFactoryBean에 다음과 같이 tiggers를 등록한다. quartzProperties에는 thread의 갯수 등의 각종 설정변수 들이 있다.

 
2. Listener 
Quartz에서 제공하는 TriggerListener를 구현하면 각  fire->execute-> complete 혹은 misfire되는 시점에 로깅을 남길 수 있다. 다음은 Anyframe 사이트에 있는 TriggerListener 구현체 중 하나이다.

 public class GlobalTriggerListener implements TriggerListener {
    Log logger = LogFactory.getLog(GlobalTriggerListener.class);
    String listenerType = "Non global";

    public void setListenerType(String listenerType) {
        this.listenerType = listenerType;
    }

    public void triggerFired(Trigger trigger, JobExecutionContext ctx) {
        logger.info("Scheduled " + trigger.getJobName() + " Fired!!");
    }

    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext ctx) {
        logger.info("Scheduled " + trigger.getJobName() + " Executed!!");
        return false;
    }

    public void triggerComplete(Trigger trigger, JobExecutionContext ctx, int arg) {
        logger.info("Scheduled " + trigger.getJobName() + " Completed!!");
    }

    public void triggerMisfired(Trigger trigger) {
        logger.error("Scheduled " + trigger.getJobName() + " Misfired!!");
    }

    public String getName() {
        return "GlobalTriggerListener";
    }
}

SchedulerFactoryBean 설정에서 다음과 같이 Listener를 등록할 수 있다.

  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggerListeners" ref="triggerListener"/> <property name="globalTriggerListeners" ref="globalTriggerListener"/>
<property name="quartzProperties">
<props>
    <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
     <prop key="org.quartz.threadPool.threadCount">3</prop>
     <prop key="org.quartz.threadPool.threadPriority">4</prop>
     <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
     <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
</props>
</property>
</bean> 
신고

'09.Framework' 카테고리의 다른 글

Spring Framework / ReloadableResourceBundleMessageSource  (0) 2011.08.16
Spring MVC SimpleMappingExceptionResolver  (0) 2011.08.16
Spring 3.0 에서 Quartz 설정  (0) 2011.08.09
iBatis 동적 SQL 작성  (0) 2009.10.25
WebWork in Action  (0) 2009.10.07
Hibernate VS iBatis  (0) 2009.09.23
Posted by Stewie


티스토리 툴바