spring

반응형
@Componenet, @Configuration 차이에 대한 정리

@Componenet

  • 개발자가 직접 작성한 클래스를 Bean으로 등록하고자 할 경우 사용
  • @Controller, @Service, @Repository 등의 어노테이션에서 상속
// 다른 클래스에서 Bean으로 불러 사용이 가능함
@Component
public class SpringComponent{
  // do something
}

@Configuration

  • 외부 라이브러리 또는 내장 클래스를 Bean으로 등록하고자 할 경우 사용(개발자가 직접 제어가 불가능한 클래스)
  • 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration을 사용한다. 즉, 해당 클래스에서 한 개 이상의 Bean을 생성하고 있을 때 선언해 주어야 함
@Configuration
public class FeignRetryConfiguration {
​
  @Bean
  public FeignRetryAspect FeignRetryService() {
    return new FeignRetryAspect();
  }
}
반응형
반응형

Spring InterCeptor 를 이용한 Session Login Check

InterCeptor에서 제공하는 3가지 메소드가 각각 실행되는 시점.

  • preHandle: Controller 실행 요청 전
  • postHandle: view(jsp)로 forward 되기 전에
  • afterCompletion: 요청이 끝난 뒤

session check 시점은 dispatcher -> controller 로 요청이 오기 전에 실행..되야 하므로 preHandle 메소드 시점에 처리.

  • CommonInterceptor.java
public class CommonInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        log.debug("===============================preHandler===============================");
        if (SessionUtils.getSessionVO() == null) {
            //14.11.25 jp add.. 
            //session validation check order & mypage * method type : submit, ajax
            if ((request.getRequestURI().indexOf("/biz/ord/order/") > -1) || (request.getRequestURI().indexOf("/biz/mpg/") > -1)) {
                String ajaxCall = (String) request.getHeader("AJAX");

                if ("true".equals(ajaxCall)) {
                    response.sendError(901);
                } else {
                    response.sendRedirect(Globals.PROTOCOL_HTTPS + Globals.DOMAIN + "/base/login/loginForm.do");
                    response.flushBuffer();
                }
                return false;
            }
        }
        return true;
    }
}
  • Sevlet-interceptor.xml

submit에 경우는 sendRedirect 로 리다이렉트가 가능하지만, ajax Call에 경우는 sendRedirect가 호출 되더라도 Callback 처리 되기때문에 추가해줘야 한다.

ajax 공통 함수에 jqXHR.status = 901로 리턴 될 경우 로그인 페이지로 핸들링 처리를 추가해준다.

  • ajax 호출시 beforeSend 에 ajax 호출을 Header에 기록.
$.ajax({ 
    beforeSend: function (xmlHttpRequest) { 
        xmlHttpRequest.setRequestHeader("AJAX", "true"); 
    } 
});
반응형

mybatis cache 설정

2014. 5. 14. 12:28
반응형
Mybatis cache 적용해 보기
  • 테스트 개발 환경
    • spring3.2.8
    • maven
    • mybatis 3.2.6
        

특별한 설정은 없는거 같다.

mybatisConfig.xml 파일에 setting cacheEnabled true 설정

  • MybatisConfig.xml
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"></setting>
        <setting name="defaultExecutorType" value="REUSE"></setting>
    </settings>
</configuration>

userMapper.xml 파일에 캐시 사용을 위한 태그 작성하고 태그 속성을 추가한다.

  • UserMapper.xml
<mapper namespace="userDao"> 
	<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> 
    <select id="getUser" parametertype="java.util.Map" usecache="true" resulttype="String"> 
    	SELECT * FROM MEMBER WHERE ID = #{id} 
    </select>
</mapper>
  • eviction: 캐시 알고리즘 속성으로 기본은 LRU(사용빈도가 낮은것)이고 그 외에 3가지가 있음. FIFO(선입선출)
  • flushInterval: 캐시 유지 설정1분 뒤 캐시 비움.(단, 특정 시각을 정하지는 못함)
  • size: 디폴트 값은 1024이며, 메모리 여부를 확인 후 사용해야 할 듯.
  • readOnly: 캐시 데이터를 읽기만 가능하게 할지 설정. (읽기/쓰기 모두 가능한 경우에는 반환된 캐시 데이터에 대한 변경이 가능하며, 캐시 복사본을 반환한다고 함)
  • 캐시를 적용할 쿼리 속성에 userCache="true" 를 선언하면 정상적으로 작동

설정은 간단하게 마무리 됐고, 서버를 재기동 하고 로그를 확인하면 아래와 같은 로그를 확인할 수 있다.

주황색 라인에 캐시 적중률(cache Hit Ratio)을 보면 최초 0.0 에서 2번째 호출시 0.5로 올라가고 결과는 동일한 값이 노출된다. 

mybatis cache는 잘 사용을 안하는거 같고, 이외에도 Ehcache, OScache 등 좋은 오픈소스가 존재하는거 같다. 

 [참고]
http://mybatis.github.io/mybatis-3/ko/sqlmap-xml.html#cache

 

MyBatis – 마이바티스 3 | 매퍼 XML 파일

Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면

mybatis.org

 

반응형
반응형

Mybatis DOCTYPE 선언문

Mybatis 설정시에 다음과 같은 오류에 직면한 적이 있다..

개발 프레임워크 설정은 자주 안하다 보니 메모..

DTD 내에 'mapper' 요소 (Element) 내에 'configuration' 라는 속성이 없다는 말이다.

DOCTYPE을 확인해 보니 mapper용 선언문을 이용해서 오류가 발생한 것...이런..

-mapper DOCTYPE

-Configuration DOCTYPE

DOCTYPE 선언시 참고..

반응형
반응형
DataSourceTransactionManager Bean Error

org.springframework.jdbc.datasource.DataSourceTransactionManager를 bean으로 만들 때, 찾을 수 없다고 오류가 나는 경우가 있습니다.
그 경우 pom.xml에 다음과 같이 추가하면 Bean 생성이 정상적으로 동작합니다.

<dependencies>
    <!-- 다음 두 의존성을 추가해야 함 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>{org.springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>{org.springframework.version}</version>
    </dependency>
</dependencies>
반응형

+ Recent posts

반응형