最近想把以前所单独做的模块都整合到一个小案例里面去,这样的话就可以方便以后的复用。昨天在加事务的时候,遇到了一点问题,然后今天解决了,然后就来记录一下有关事务的简单代码。
1.首先就是jar包的问题,因为是在之前maven项目的基础之上加的模块,所以没有考虑到做事务的时候有jar包缺失的问题。以下是pom.xml配置文件中有关aop操作的jar包。
<!-- aop start-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<!-- aop end-->
2.还有一个比较隐蔽的错误就是:因为考虑到以后配置文件会比较多,所以这次我尝试将各个层在spring中的配置文件进行了部分的分类,我不知道这样分合不合理,还有也不知道名字取得是否合理,暂且不管这个
一开始的时候我将配置aop的代码直接配置在applicationContext-service.xml中,后来事务是配置好了,但是经过我的测试发现事务根本就没有生效。于是去百度才发现,要将aop的配置放在springmvc的配置文件中(此处是applicationContext-web.xml),这样才能生效!
首先,在applicationContext-service.xml中配置JDBC事务管理器的bean
<!--
第一步:配置JDBC事务管理器
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"/>
</bean>
然后,在springmvc的配置文件中:
<!--
注意!!!事务的配置要放在springmvc的配置文件中,否则无效!
第二步:(如果是使用注解方式,则可跳过以下步骤)
配置事务增强
-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<!-- 做事务的操作 -->
<tx:attributes>
<!-- 设置事务操作的方法匹配规则 -->
<tx:method name="insert*"/>
</tx:attributes>
</tx:advice>
<!--
第三步:
配置切面
-->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.lin.service.impl..*(..))" id="pointcut1"/>
<!-- 切面 -->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
<!--
第二步:(如果是使用注解方式,则当配置完事务管理器之后,就可以直接配置这一步即可,然后在需要用事务控制的方法或类上使用@Transactional注解即可。)
启用支持annotation注解方式事务管理
-->
<tx:annotation-driven transaction-manager="transactionManager" />
小结:对于maven的使用,真的需要很明确的知道自己需要什么包才行,要不然动不动就是会报找不到jar包的错误。对了,在找jar包的时候我还遇到的问题就是jar包的版本也有一定的关系,版本高不一定就是最好的,可能跟别的jar不兼容而导致出错。。总而言之,还是多多百度吧……