为了账号安全,请及时绑定邮箱和手机立即绑定
  • @新手推荐先使用XML配置方式(知道其中工作原理),高手推荐使用注解方式,使代码更佳清晰。
    查看全部
    0 采集 收起 来源:课程总结

    2016-09-04

  • Spring测试: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:xxx.xml") @Resource(name="") Spring事务:逻辑上的一组操作,要么全部成功,要么全部失败 Spring事务管理的一组API Spring的编程式事务管理(事务管理模板) 1.在实际运用中很少使用 2.通过TrasactionTemplate手动管理事务 1.在AccountService中使用TransactionTemplate 2.TransactionTemplate依赖DataSourceTransactionManager 3.DataSourceTransactionManager依赖DataSource构造 (事务管理器有了连接池才能获得链接进行事务管理) Spring的声明式事务管理(重点) 1.开发中推荐使用(代码入侵性最小) 2.Spring的声明式事务是(通过AOP实现的) 第一种:基于代理TransactionProxyFactoryBean; 注入:目标,事务管理器,事务属性: 1.PROPAGATION :事务的传播行为 2.ISOLATION :事务的隔离级别 3.readOnly :只读,(不可以进行修改,插入,删除) 4.-Exception :发生那些异常回滚事务 5.+Exception :发生那些异常事务不回滚 第二种:基于AspectJ的XML方式(aspectJ的话,就是分的更加的详细,切入点(类),切入面(方法)) 1.配置事务的通知<tx> 2.配置切面,切点<aop> 第三种:基于注解的方式 1.开启事务<tx:annotation-driven transaction-Manager="" /> 2.service类@Transactional(name=value)
    查看全部
    0 采集 收起 来源:课程总结

    2018-03-22

  • 使用注解配置声明式事物
    查看全部
    0 采集 收起 来源:课程总结

    2016-09-04

  • //相关代码(声明式 III——基于注解的方式)——(下): <!-- 配置业务层类 --> <bean id="accountService" class="cn.muke.spring.demo4.AccountServiceImpl"> <property name="accountDao" ref="accountDao"></property> </bean> <!-- 配置DAO层类 --> <bean id="accountDao" class="cn.muke.spring.demo4.AccountDaoImpl"> <!-- 注入连接池,会帮我们创建一个JDBC模版 --> <property name="dataSource" ref="dataSource" ></property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" ></property> </bean> <!-- 开启注解事务:只有开启这个注解事务,才可以使用注解 --> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation> </beans>
    查看全部
  • //相关代码(声明式 III——基于注解的方式)——(中): @SpringDemo4.java package cn.muke.spring.demo4; /** * Spring的声明式事务管理的方式三的测试类:基于注解的事务管理方式。 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext4.xml") public class SpringDemo4 { @Resource(name="accountService") private AccountService accountService; /** * 转账案例的测试类 */ @Test public void demo1(){ accountService.transfer("aaa", "bbb", 200d); } } @applicationContext4.xml <beans...> <!-- 引入外部的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"></context:property> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}" ></property> <property name="jdbcUrl" value="${jdbc.url}" ></property> <property name="user" value="${jdbc.username}" ></property> <property name="password" value="${jdbc.password}" ></property> </bean>
    查看全部
  • //相关代码(声明式 III——基于注解的方式)——(上): @AccountServiceImpl.java package cn.muke.spring.demo4; /** * 转账案例的业务层实现类 */ /** * propagation :事务的传播行为。 * isolation :事务的隔离级别,比如,Isolation.DEFAULT:数据库默认级别。 * readonly :只读(不可进行修改、插入、删除操作,否则报错)。 * rollback-for :发生哪些异常回滚事务。 * no-rollback-for :发生哪些异常事务不回滚,继续提交。 * timeout :过期信息。 */ @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED) public class AccountServiceImpl implements AccountService { // 注入转账的DAO的类 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } /** * @param out :转出账号 * @param in :转入账号 * @param money :转账金额 */ public void transfer(String out, String in, Double money) { accountDao.outMoney(out, money); int i=1/0;//这样一来,上面可以成功执行,下面就不会得到执行 accountDao.inMoney(in, money); } }
    查看全部
  • 基于TransactionProxyFactoryBean的声明式事务管理的方式。这种方式只是简单的使用到了aop的思想,对service对象进行了代理模式的增强,前一章在编程式事务管理器的时候需要在service中注入事务管理器的模板,而现在这种声明式的方法,配置了TransactionProxyFactoryBean,属性对象之一就是原先的service,这就是对目标对象进行代理,除了引用transactionManager之外还需要声明事务的属性,也就是隔离级别、传播行为、是否只读、异常处理等等。
    查看全部
  • 使用编程式事务管理,首先要在配置文件中配置事务管理器,jdbc和mybatis使用的是DataSourceTransactionManager,给其注入属性数据源,其二使用spring提供的事务管理的模板方便对事务的监控和操作,在配置文件中配置事务管理的模板,持有事务管理器的引用,所以注入事务管理器。因为在业务层中要使用事务管理器模板对事物回滚的操作,所以需要在业务逻辑中注入事务管理器的模板来管理事务。transcationTemplate.execute()中的参数是TransactionCallback类,具体对事务回滚操作的是其实现类TransactionCallbackWithoutResult,重写doInTransactionWithoutResult方法即可,完成对事物的操作。注意如果使用匿名内部类,需要将外部引用的变量用final进行修饰,否则无法访问到变量。
    查看全部
  • Spring 支持两种方式事务管理 (1)编程式的事务管理 1、在实际应用中很少使用 2、通过 TransatcionTemplate 手动管理 (2)使用 XML 配置声明式事务 1、开发中推荐使用(代码侵入性最小) 2、Spring 的声明式事务是通过AOP实现的
    查看全部
  • @补充: 第一类共同点:如果 A 方法中有事务,则调用 B 方法时就用该事务,即:A和B方法在同一个事务中。 PROPAGATION_REQUIRED:如果 A 方法中没有事务,则调用 B 方法时就创建一个新的事务,即:A和B方法在同一个事务中。 PROPAGATION_SUPPORTS:如果 A 方法中没有事务,则调用 B 方法时就不使用该事务。 PROPAGATION_MANDATORY:如果 A 方法中没有事务,则调用 B 方法时就抛出异常。 第二类共同点:A方法和B方法没有在同一个事务里面。 PROPAGATION_REQUIRES_NEW:如果 A 方法中有事务,则挂起并新建一个事务给 B 方法。 PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事务,则挂起。 PROPAGATION_NEVER:如果 A 方法中有事务,则报异常。 第三类:如果 A 方法有的事务执行完,设置一个保存点,如果 B 方法中事务执行失败,可以滚回保存点或初始状态。 @重点的三种:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED。
    查看全部
  • 相关代码(公共1): //package cn.muke.spring.demo1; @AccountDao.java /** * 转账案例的DAO层的接口 */ public interface AccountDao { /** * out :转出账号 * money:转出金额 */ public void outMoney(String out,Double money); /** * in :转入账号 * money:转入金额 */ public void inMoney(String in,Double money); } @AccountService.java /** * 转账案例的业务层接口 */ public interface AccountService { /** * out :转出账号 * in :转入账号 * money:转账金额 */ public void transfer(String out,String in,Double money); } @AccountDaoImpl.java /** * 转账案例的DAO层的实现类 */ public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao { /** * out :转出账号 * money:转出金额 */ public void outMoney(String out, Double money) { String sql="update account set money=money-? where name=?"; this.getJdbcTemplate().update(sql,money,out); } /** * in :转入账号 * money:转入金额 */ public void inMoney(String in, Double money) { String sql="update account set money=money+? where name=?"; this.getJdbcTemplate().update(sql,money,in); } }
    查看全部
  • TransactionDefinition定义事务隔离级别(001) 如果不考虑隔离性,会引发如下的安全问题: 1.脏读。 一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 2.不可重复读。 在同一个事务中,多次读取同一数据返回的结果有所不同。 3.幻读。 一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。 隔离级别的出现就是为了解决以上问题的。 数据库提供的事务的隔离级别(四种): 1.READ_UNCOMMITED; 允许你读取还未提交的改变了的数据,可能导致脏,幻,不可重复读。 2.READ_COMMINTED: 允许在并发事务已经提交后读取,可防止脏读,但幻读和不可重复读还是有可能发生。 3.REPEATABLE_READ: 对相同字段的多次读取是一致的,除非数据被事务本身改变,可防止脏读,不可重复读,但幻读仍有可能出现。 4.SERILIZABLE: 完全服从ACID的隔离级别,确保不发生脏读,幻读,不可重复读,这在所有的隔离级别中是最慢的,它是典型的完全通过锁定在事务中涉及的数据表来完成的。 除了以上的数据库提供的事务隔离级别,spring提供了Default隔离级别,该级别表示spring使用后端数据库默认的隔离级别。 MySQL默认事务隔离级别:REPATABLE_READ(可能出现幻读) Oracle默认:READ_COMMITTED(可能出现不可重复读和幻读)
    查看全部
  • TransactionDefinition定义隔离级别 如果不考虑隔离性,会引发安全问题: 1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。 3.幻读(虚读):一个事务读取几行记录后,另一个事务插入一些记录,幻读就发生了。在后来的查询中,第一个食物就会发现有些原来没有的记录。 四个事务隔离级别: DEFAULT:使用后端数据库默认的隔离级别(spring中的选择项) 1.READ_UNCOMMITED:允许读取还未提交的改变了的数据,可能导致脏、幻、不可重复读。 2.READ_COMMITTED:允许在并发事务已经提交后读取,可防止脏读,但幻读和不可重复读仍可发生。 3.REPEATABLE_READ:对相同字段的多次读取是一致的,除非数据被事务本身改变,可防止脏、不可重复读,但幻读仍可能发生。 4.SERIALIZABLE(串行):完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 补充:MySQL默认采用REPRATABLE_READ隔离级别。
    查看全部
  • 事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。eg:银行转账。 事务的四大特性: 1.原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 2.一致性:指事务前后数据的完整性必须保持一致。 3.隔离性:指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。 4.持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
    查看全部
    0 采集 收起 来源:事务回顾

    2016-09-04

  • Spring事务管理高层抽象主要包括3个接口: 1.PlatformTransactionManager 事务管理器 2.TransactionDefinition 事务定义信息(隔离、传播、超时、只读) 3.TransactionStatus 事物具体运行状态
    查看全部
    0 采集 收起 来源:接口介绍

    2016-09-04

举报

0/150
提交
取消
课程须知
学习本课程前需要熟悉Spring的基础知识,掌握IOC和AOP的基本概念。小伙伴们可参考《Spring入门》课程
老师告诉你能学到什么?
1、理解Spring事务管理的基本概念 2、掌握Spring事务管理的应用场景 3、掌握声明式事务管理和编程式事务管理的实现方式

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!