How to set the Transaction isolationlevel using Spring with MyBatis -
i set isolationlevel self, using transactionmanager spring framework combined mybatis. trying lot of tutorial, nothing worked.
my application build mvc pattern, means have views, models, interfaces used dependency-injection mybatis , controller class.
i hope can give me advice new in mybatis , spring. whole application running take on controll on isolationlevels.
this spring-configuration.xml file <!--<mybatis-spring:scan base-package="de.hrw.model.**"/> --> <mybatis-spring:scan base-package="de.hrw.*" /> <context:component-scan base-package="de.hrw.*" /> <bean id="datasource" class="com.zaxxer.hikari.hikaridatasource"> <property name="jdbcurl" value="jdbc:mysql://127.0.0.1:3306/carrental"> </property> <property name="username" value="root"></property> <property name="password" value="root"></property> <property name="driverclassname" value="com.mysql.jdbc.driver"></property> <property name="autocommit" value="false"></property> <property name="registermbeans" value="true"></property> <property name="transactionisolation" value="transaction_serializable"> </property> </bean> <bean id="sqlsessionfactorybean" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="datasource" ref="datasource"></property> <property name="configlocation" value="classpath:mybatis-config.xml"> </property> </bean> <bean id="carcontroller" class="de.hrw.controller.carcontroller"> <property name="transactionmanager" ref="transactionmanager" /> </bean> <bean id="carsearchview" class="de.hrw.view.carsearchview"> </bean> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> <tx:annotation-driven transaction-manager="transactionmanager"/> i using dependecy-injection of mybatis data , database
example of iterface package de.hrw.mgmtdao;
import java.util.list;
import de.hrw.model.carmodel; public interface icarmgmt { public carmodel selectcarbyid(final int carid); public list<carmodel> selectallcars(); } this main-class include view (frame)
public class carrental_main { public static void main(string[] args) { // todo auto-generated method stub applicationcontext context = new classpathxmlapplicationcontext("spring-config.xml"); carcontroller carcontroller = (carcontroller) context.getbean("carcontroller"); carcontroller.opensearchview(); carcontroller.getcarsearchview().setvisible(true); } } this controller. here try set isolation level serializable set default (-1)
@transactional(propagation=propagation.requires_new , isolation = isolation.serializable) public class carcontroller { @autowired private icarmgmt carmgmt; private carsearchview carsearchview; private applicationcontext applicationcontext; @autowired private platformtransactionmanager transactionmanager; private transactionstatus transactionstatus; private transactiondefinition defaulttransactiondefinition; private datasource datasource; public void opensearchview() { this.setapplicationcontext(); this.setdefaulttransactiondefinition(); this.settransactionstatus(); this.carsearchview = (carsearchview) applicationcontext .getbean("carsearchview"); try { list<carmodel> carlist = carmgmt.selectallcars(); // this.carsearchview.setresultlist(carlist); this.carsearchview.setlabellist(carlist); this.carsearchview.createtextfieldlist(); this.carsearchview.createlabelfieldlist(); transactionmanager.commit(transactionstatus); } catch (dataaccessexception e) { system.out.println("error in creating record, rolling back"); transactionmanager.rollback(transactionstatus); throw e; } } public void setdatasource(datasource datasource) { this.datasource = datasource; } public void setdefaulttransactiondefinition() { this.defaulttransactiondefinition = new defaulttransactiondefinition(); } public void setapplicationcontext() { applicationcontext = new classpathxmlapplicationcontext( "spring-config.xml"); } public void settransactionmanager( platformtransactionmanager transactionmanager) { this.transactionmanager = transactionmanager; } public void settransactionstatus() { this.transactionstatus = transactionmanager.gettransaction(defaulttransactiondefinition); }
you can apply transaction shown below in mapper interface(though recommended apply transaction annotation class, in mybatis, transaction defined in interface applied proxy class)
import java.util.list; import de.hrw.model.carmodel; @transactional public interface icarmgmt { @transactional(isolation = isolation.serializable) public carmodel selectcarbyid(final int carid); public list<carmodel> selectallcars(); }
Comments
Post a Comment