<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource "> <property name="url" value="${jdbc.url}"></property> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入链接池对象 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务管理的模板:Spring为了简化事务管理的代码而提供的类 --> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager" ref="transactionManager"></property> </bean>
@Autowired private TransactionTemplate transactionTemplate; @Override public void xxx(...) { transactionTemplate.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus arg0) { //TODO 实现业务 } }); }
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource "> <property name="url" value="${jdbc.url}"></property> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入链接池对象 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置业务层的代理 --> <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 配置目标对象 --> <property name="target" ref="accountService"/> <!-- 注入事务管理器 --> <property name="transactionManager" ref="transactionManager"/> <!-- 注入事务属性 --> <property name="transactionAttributes"> <props> <!-- prop格式: * PROPAGATION :事务的传播行为。 * ISOLATION :事务的隔离级别。 * readOnly :只读。 * -Exception :发生哪些异常回滚事务。 * +Exception :发生哪些异常事务不会滚。 --> <prop key="transfer*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>
@Override public void xxx(...) { //TODO 实现业务 }
//使用代理 @Resource(name = "accountServiceProxy") private AccountService accountService;
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource "> <property name="url" value="${jdbc.url}"></property> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入链接池对象 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务的通知:(事务的加强) --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- propagation :事务传播行为 isolation :事务隔离级别 read-only :只读 rollback-for:发生哪些异常回滚 no-rollback-for:发生哪些异常不回滚 timeout :过时信息 --> <tx:method name="transfer*" propagation="REQUIRED"/> <tx:method name="add*" propagation="REQUIRED" isolation="READ_COMMITTED" rollback-for="java.lang.Exception"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <!-- 配置切入点 --> <!-- 第一个*:任意返回值,+:AccountService全部子类,*任意的方法,(..)任意的参数 --> <aop:pointcut id="pointcut1" expression="execution(* com.test.spring.demo3.AccountService+.*(..))" /> <aop:pointcut id="pcut" expression="execution(* com.*.service.*.*.*(..))"/> <!-- 切面 --> <!-- advisor只配置1个切点,aspect配置多切点 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pcut"/> </aop:config> <!-- 注解扫描 --> <context:component-scan base-package="com.test.spring"/>
@Override public void xxx(...) { //TODO 实现业务 }
@Autowired private AccountService accountService;
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource "> <property name="url" value="${jdbc.url}"></property> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入链接池对象 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 注解扫描 --> <context:component-scan base-package="com.test.spring.demo4"/> <!-- 开启注解事务 --> <tx:annotation-driven transaction-manager="transactionManager"/>
@Transactional(propagation = Propagation.REQUIRED) public class XxxServiceImpl implements XxxService { @Autowired private XxxDao xxxDao; @Override public void xxx(...) { //TODO 实现业务 } }
@Autowired private XxxService xxxtService;
gitee地址git