我目前正在开发一个已实施mybatis的项目。 由于这是遗留代码,因此使用
完成实现Spring应用程序上下文文件
<bean id="sqlSessionFactory" class="com.ca.aa.ui.framework.common.mybatis.SqlSessionFactoryBeanWrapper">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:ibatis/*_mapper.xml" />
</bean>
还有另一个从应用程序上下文引用的xml文件
<bean class="org.mybatis.spring.mapper.MapperFactoryBean" name="tenantDAO">
<property name="mapperInterface" value="com.ca.ias.data.dao.TenantDAO" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
TenantDAO.java
public interface TenantDAO {
public List<something> somemethod1();
}
然后有一个服务层访问上面的java类adn然后持久化对象
<bean id="issuerService" class="com.ca.ias.admin.service.IssuerServiceImpl">
<property name="tenantDAO" ref="tenantDAO"/>
</bean>
有一个普通的java方法,它调用tenantDAO然后保留该对象。
IssuerServiceImpl.java
public void insert(){
try{
tenantDao.insert();
}catch(Exception e){
}finally{
}
如何在此处实施交易管理器,请帮忙?
答案 0 :(得分:0)
有很多方法可以做到这一点,特别是考虑到你已经配置了弹簧。基本上你需要配置两件事
交易管理员
您需要在弹簧上下文中定义transaction manager。根据{{1}}定义中提到的dataSource
的位置,它可能会有所不同。很可能你在项目中使用连接池,你有一些连接池的配置,如下所示:
sqlSessionFactory
如果是这种情况,那么您需要在弹簧上下文中添加这样的配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
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}" />
</bean>
交易边界
最简单的方法是使用annotation driven事务划分。
然后你需要先启用它:
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
使用此配置,您可以使用<tx:annotation-driven transaction-manager="txManager"/>
注释标记服务中的方法:
Transactional