Spring整合Ibatis典型的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql:///test?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="10000" />
<property name="defaultAutoCommit" value="false" /> <!--设置自动提交 -->
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:sqlMap-config.xml</value>
</property>
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务通知 要注明rollback-for类型,并不是所有的异常都回滚的 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="mod*" propagation="REQUIRED" rollback-for="Throwable"/>
<!--除了上面标识的方法,其他方法全是只读方法-->
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 日志Bean -->
<bean id="logService" class="com.ksfzhaohui.load.LogService"></bean>
<!-- Spring AOP config -->
<aop:config>
<!-- 配置哪些类的方法需要进行事务管理 -->
<aop:pointcut id="newServicesPointcut"
expression="execution(* com.ksfzhaohui.service.impl.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="newServicesPointcut" />
<!-- 日志管理 -->
<aop:aspect id="myAspect" ref="logService">
<aop:pointcut expression="execution(* com.ksfzhaohui.service.impl.*.*(..))"
id="logPointCut" />
<aop:before method="before" pointcut-ref="logPointCut" />
<aop:after method="after" pointcut-ref="logPointCut" />
</aop:aspect>
</aop:config>
</beans>
1.Spring的事务配置
Spring使用 <tx:advice>和 <aop:config> 用来配置事务,具体如何配置你可以参考Spring文档
关于这里的expression="execution(* com.ksfzhaohui.service.impl.*.*(..))"分析
第一个*,表示任何返回值类型
第二个*,表示com.ksfzhaohui.service.impl包下的任何类
第三个*,表示com.ksfzhaohui.service.impl包下的任何类下的任意方法
最后的(..),表示方法可以有0个或多个参数
<tx:advice>中的相关属性
属性 |
是否需要 |
默认值 |
描述 |
name |
是 |
|
与事务属性关联的方法名。 |
propagation |
不是 |
REQUIRED |
事务传播行为 |
isolation |
不是 |
DEFAULT |
事务隔离级别 |
timeout |
不是 |
-1 |
事务超时的时间(以秒为单位) |
read-only |
不是 |
false |
事务是否只读 |
rollback-for |
不是 |
|
将被触发进行回滚的 Exception(s)以逗号分开。 |
no-rollback-for |
不是 |
|
不被触发进行回滚的 Exception(s)以逗号分开。 |
2.日志配置
<aop:before>,<aop:after>分别表示在方法执行之前和之后要执行的内容
典型案例
public class LogService {
static final Log log = LogFactory.getLog(LogService.class);
public void before(JoinPoint joinPoint) {
StringBuffer sb=new StringBuffer();
sb.append("logInfo--调用类" + joinPoint.getTarget().getClass().getName()+"--方法" + joinPoint.getSignature().getName());
Object args[] = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
sb.append("--参数" + i + ":" + args[i]);
}
log.info(sb);
}
public void after(JoinPoint joinPoint) {
log.info("结束方法:" + joinPoint.getSignature().getName());
}
}
分享到:
相关推荐
- **配置事务管理器**:接下来,需要配置一个事务管理器(如`DataSourceTransactionManager`),它负责管理事务的开始、提交和回滚。 - **配置事务规则**:最后,需要配置事务规则,指定哪些方法需要在事务中执行。 ...
在深入探讨Spring事务代理配置之前,我们先简要回顾一下Spring...通过以上步骤,我们就可以在Spring中成功配置事务代理,使得应用程序中的业务方法能够自动进行事务管理,极大地提高了代码的可维护性和事务的一致性。
它支持多种事务传播行为(如 PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW 等),可以根据不同的业务场景灵活配置事务的范围。此外,Spring 还提供了事务回滚规则,允许基于异常类型或异常实例来决定是否回滚...
在构建大型分布式系统时,确保数据的一致性和完整性至关重要,这就是分布式事务的用武之地。Spring框架提供了多种实现分布式...同时,良好的日志和监控机制也是必不可少的,以便在出现问题时能够快速定位和解决问题。
3. **解决方案:正确配置事务切面的顺序** - 在Spring中,事务管理器本身也可以被看作是一种切面,它负责在合适的时候开启和提交事务。因此,当有多个切面需要被应用到同一个方法上时,切面的执行顺序就显得尤为...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
在Spring框架中,事务管理是实现业务逻辑时不可或缺的一部分,它确保了数据的一致性和完整性。本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理...
- 一个Spring配置文件,定义了bean、AOP切面、数据源和事务管理器。 - 使用了@Autowired注解自动装配Bean的Java类,展示了依赖注入。 - 针对AOP的切面类,定义了通知(advice)并指定了切入点(pointcut)。 - 使用...
Spring框架的核心功能包括一个容器、一个用于配置和组织组件的框架,以及一系列内置于框架中的服务,如事务管理、持久化支持和Web用户界面服务。作为一个轻量级的J2EE框架,Spring为构建和组织J2EE应用程序提供了一...
关于日志,Spring框架本身并不直接提供日志功能,但它支持多种日志框架,如Log4j、Java Util Logging和SLF4J。在使用Spring时,你需要添加对应日志框架的jar包,例如`log4j.jar`或`slf4j-api.jar`以及相应的实现库,...
7. `spring-aop.xml`: 用于配置Spring的AOP(面向切面编程)相关设置,如定义切面、通知类型等,使得我们可以进行横切关注点的处理,如日志记录、事务管理等。 8. `log4j.xml`: 该文件是Log4j的日志配置,定义了...
1. **定义事务配置**:在Spring配置文件中,我们需要配置事务管理器。通常,对于Spring JDBC或者Hibernate,我们会使用PlatformTransactionManager,如DataSourceTransactionManager。 ```xml ...
要启用声明式事务管理,我们需要在Spring配置文件中定义事务管理器,并启用基于注解的事务处理。 在Spring_day3_tx这个压缩包中,可能包含了一些关于Spring事务管理的示例代码或者教程资料,包括如何配置事务管理器...
在企业级Java应用开发中,Spring框架以其强大的功能和易用性成为了不可或...然而,使用时也要注意合理配置事务属性,避免不必要的事务范围扩大,以及对事务边界和异常处理的合理设计,以确保系统的稳定性和数据一致性。
总结来说,Spring框架是一个强大的工具,通过合理配置和使用其提供的jar包,可以有效地管理项目中的依赖,实现灵活的事务管理,创建高效、解耦的代码结构。深入学习Spring4的jar包和配置文件,将使你更好地驾驭Java...
`spring-beans.jar`提供了Bean定义和配置的相关支持,包括XML和注解配置的处理。日志会展示配置信息如何被读取并转化为Bean实例。 `spring-test.jar`提供了测试支持,让我们能够方便地进行单元测试和集成测试。在...
2. **声明式事务管理**:这是Spring最常用的事务管理方式,通过配置元数据(XML或注解)来定义事务边界。例如,使用`@Transactional`注解在方法上,Spring会自动处理事务的开启、提交、回滚。这种做法简单易用,且...
AOP允许我们在程序运行时动态地将代码插入到其他对象中,它主要用来处理那些具有横切关注点的问题,如日志、异常处理和事务管理。在Spring中,AOP通过代理机制实现,可以创建两种类型的代理:JDK动态代理和CGLIB代理...
在Spring配置文件中配置事务管理器需要引入名称空间tx,并开启事务注解支持。使用注解声明式事务管理,需要在service类上添加@Transactional注解,该注解可以配置事务相关参数,包括事务的传播行为(propagation)、...