Spring中使用数据库事务
简单说一下,在Spring使用事务的两种方式,即xml方式和注解方式。
注解方式:
直接进入正题,我们知道要想还用数据库事务首先得有一个数据源,这里我们就使用DBCP的数据源,使用DBCP的数据源需要用到它的实现类BasicDataSource,我们可以在这个类中进行一些基本的配置,如下所示
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
我们可以根据需要换成自己电脑上的配置。有了数据源以后,需要注册一个平台事务管理器,这里我们使用的是DatasourceTransactionManager这个类,并将数据源注入这个类当中
<!-- 事务管理器配置数据源事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSource
TransactionManager">
<property name="datSource" ref="dataSource"/>
</bean>
这时我们就可以使用注解来定义事务了,如下面这段代码所示:
<!-- 使用注解定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
配置好了这些以后,就可以在service层当中使用@Transactional注解来使用事务了,我们可以在这个注解当中添加属性 propagation(传播行为)和Isolation(事务的隔离级别)在这里我就不介绍那么具体了,propagation属性可以设置为Propagation.REQUIRED,而isolation属性可以设置为isolation.READ_COMMITTED,这样就配置好事务了。
XML方式:
使用xml方式与注解方式不同的一点就是,这这种方式是在xml文件中进行配置的,比较容易理解。具体如下:
大体按照上面的配置,这里把 <tx:annotation-driven transaction-manager="transactionManager"/>这句话删掉,替换为如下代码:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="xxx" isolation="DEFAULT" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.aspectj..*.*(..))"/>
</aop:config>
其中xxx代表哪个方法要使用此事务,这种方式与注解方式效果一致。