Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MSSQL
- xPlatform
- Express
- mapreduce
- IntelliJ
- mybatis
- es6
- R
- 보조정렬
- Kotlin
- Eclipse
- hadoop
- Android
- Sqoop
- Java
- GIT
- SPC
- SSL
- window
- plugin
- Spring
- 공정능력
- NPM
- tomcat
- SQL
- table
- react
- Python
- JavaScript
- vaadin
Archives
- Today
- Total
DBILITY
spring 3.1.1 spring + mybatis + log4jdbc-remix 사용시 transaction 관련 본문
java/spring
spring 3.1.1 spring + mybatis + log4jdbc-remix 사용시 transaction 관련
DBILITY 2021. 11. 22. 14:52반응형
이거 보고 광고 한번 안 누른 이는 삼대가 재수가 없을지어다!ㅋㅋ
프레임워크 설정을 새로 하는 경우가 아주 드물어서 인지 오래전 겪은 일들을 다시 겪게 되는 경우가 있다.
필요한 경우가 반드시 생기니 기록해 두자.
1.sqlSessionFactory와 transactionManager가 참조하는 dataSource가 동일해야 하고,
2.public interface를 구현한 method에 @Transactional이 rollback-for와 함께 선언이 되어 있어야 하는 것이 본 작업 프레임워크의 기본이다.(default proxy-target-class="false").물론 Annotation이 아닌 xml이나 java config로 선언적으로 할 수도 있다. 이 부분은 스프링 문서를 참고하자. 길다.
간혹 1의 경우에 둘 중 하나가 log4jdbc의 datasource를 참조할 경우 dbms default auto transaction이 적용된다.
개발할 때야 sql log가 필요하겠지만, 운영 시에는 대부분 필요하지 않으니 logDataSource를 제외하는 경우 변경이 필요하다. 번거로우니 pom에 profile을 적용하는 것이 좋겠다.
<!-- DataSource 설정 -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="defaultAutoCommit" value="false" />
<property name="initialSize" value="1" />
<property name="minIdle" value="2" />
<property name="maxIdle" value="5" />
<property name="maxActive" value="5" />
<property name="maxWait" value="600000" />
<property name="testOnBorrow" value="true" />
<property name="testWhileIdle" value="true" />
<property name="validationQuery" value="SELECT 1 FROM DUAL" />
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="300" />
<property name="logAbandoned" value="true" />
</bean>
<!-- logDataSource 설정 -->
<bean id="logDataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSource" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL:::" />
</bean>
</property>
</bean>
<!-- 트랜잭션을 처리 모듈 추가 : 어노테이션을 적용하여 처리 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="logDataSource" />
</bean>
<!-- SqlSession setup for myBATIS Database Layer -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="logDataSource" />
<property name="configLocation" value="classpath:/mapper/mybatis-config.xml" />
<!-- Core File관련 Table SQL MAP 설정 위치 -->
<property name="mapperLocations">
<list>
<value>classpath:/mapper/**/*_Oracle.xml</value>
</list>
</property>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
반응형
'java > spring' 카테고리의 다른 글
e-Government Standard Framework Center (0) | 2024.06.04 |
---|---|
apache log4j2 log4jdbc configuration summary (0) | 2022.07.04 |
spring upload missingServletRequestPartException required request part is not present (0) | 2021.09.13 |
tomcat spring dispatchOptionsRequest 보안 감사 시 불필요한 HTTP Method 제거 (2) | 2020.11.25 |
webjar 사용시 404 (0) | 2020.10.30 |
Comments