QueryDsl 사용 시 date 시작/종료 구간 검색

 

JPAQuery 부분 
query.where(qOrder.createdDate.between(dto.getSearchStartDate(), dto.getSearchEndDate()));


dto 부분
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime searchStartDate;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime searchEndDate;

 

LocalDateTime 을 사용할때에는 DateTimeFormat 을 입력해줘야 param 에 2021-02-01 09:52:53 같은 date time을 변환하여 받을 수 있다

개발 중 insert, update 쿼리 중 Exception 이 발생 하였지만 쿼리 요청이 rollback 되지않는 현상 정리

 

1. 액션

 - insert 혹은 update 문이 false 로 떨어질 경우 throw new Exception 을 처리 함

if(!dao.updateBl("updateQuery", dto)){
	throw new BaseException(SystemException.DB_NOT_UPDATE_ACTION);
}

 

2. 기대동작

 - RuntimeException 을 상속 받은 Exception 처리를 했으니 @Transactional 에 의해 rollback 처리를 기대함

 

3. 증상

 - DB update 가 rollback 되지 않고 정상적으로 업데이트가 됨

 

4. 원인 정리

 - update 문을 감싸는 try-catch 문을 신경쓰지 않았으며, catch 문에 처리되는 Exception 이 throw new Exception(e.getMessage()) 만 타고 있었음

 - Exception() 의 경우 checked exception 이므로 rollback 처리가 안됨

 

5. 해결방안

- 첫번째 방법 : try-catch 문의 Exception을 다음과 같이 변경 (RuntimeException 상속받은 클래스)

} catch (Exception e) {
	throw new BaseException(e.getMessage());
}

 - 두번째 방법 : throw new Exception() 으로 처리하고 @Transactional 의 옵션값을 보완함

@Transactional(rollbackFor = {RuntimeException.class, Exception.class})

 

현재 첫번째 방법으로 처리 했습니다.

 

 

참고 : cheese10yun.github.io/checked-exception/

springboot 에서 jsp-config include 사용


spring의 web.xml에 설정되어 있는 전역 사용 jspf파일을 springboot java 코드로 변환하는 방법

기존코드

<jsp-config>
    <jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<include-prelude>/WEB-INF/views/common/layout/taglib/comTaglibs.jspf</include-prelude>
</jsp-property-group>
</jsp-config>


변경코드

import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.Context;
import org.apache.tomcat.util.descriptor.web.JspConfigDescriptorImpl;
import org.apache.tomcat.util.descriptor.web.JspPropertyGroup;
import org.apache.tomcat.util.descriptor.web.JspPropertyGroupDescriptorImpl;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.util.Collections;

@Component
@Slf4j
public class ServletInitailizer extends SpringBootServletInitializer {

@Bean
public ConfigurableServletWebServerFactory configurableServletWebServerFactory ( ) {
return new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
super.postProcessContext(context);
JspPropertyGroup jspPropertyGroup = new JspPropertyGroup();
jspPropertyGroup.addUrlPattern("*.jsp");
jspPropertyGroup.addUrlPattern("*.jspf");
jspPropertyGroup.setPageEncoding("UTF-8");
jspPropertyGroup.setScriptingInvalid("true");
jspPropertyGroup.addIncludePrelude("/WEB-INF/views/common/layout/taglib/comTaglibs.jspf");
jspPropertyGroup.setTrimWhitespace("true");
jspPropertyGroup.setDefaultContentType("text/html");
JspPropertyGroupDescriptorImpl jspPropertyGroupDescriptor = new JspPropertyGroupDescriptorImpl(jspPropertyGroup);
context.setJspConfigDescriptor(new JspConfigDescriptorImpl(Collections.singletonList(jspPropertyGroupDescriptor), Collections.emptyList()));
}
};
}
}


+ Recent posts