spring学习总结(四)

来源:互联网 发布:读书思考 知乎 编辑:程序博客网 时间:2024/04/28 09:31

第四讲

1、启用Spring缓存:

  1. 在配置文件中导入cache:命名空间。
  2. 添加配置:<cache:annotation-driven cache-manager="cacheManager" />
  3. 针对不同的缓存实现配置对应的缓存管理器。cacheManager

2、EhCache的使用,添加jar包,然后配置ehcache.xml。配置beans.xml缓存区。

3、类级别:使用@Cacheable执行缓存:@Cacheable(value = "users")

  1. 修饰类时,可控制spring在类级别进行缓存,当程序调用该类的任意方法时,只要传入的参数相同,spring就会使用缓存。(只要参数相同,方法不同也使用缓存)
  2. 此处缓存的意义是:当程序第一次调用该类的实例的某个方法时,spring缓存机制会将该方法返回的数据放入指定的缓存区——就是Value属性指定的缓存区。

4、类级别的缓存默认以所有的方法参数作为key来缓存方法返回的数据,同一个类不管调用哪个方法,只要调用方法的参数相同,spring就会直接使用缓存区中的数据。

5、当然我们可以指定@Cacheable的属性:

  1. Value:必需属性。可指定多个缓存区的名字,将返回值放入指定的缓存区。
  2. Key:通过SpEL表达式显示指定缓存的key。
  3. Condition:指定一个返回boolean值的SpEL表达式,只有当表达式返回true时,spring才会缓存方法返回值。
  4. Unless:指定一个返回boolean值的SpEL表达式,只有当表达式返回true时,spring就不会缓存方法返回值。

6、方法级别的缓存:使用@Cacheable执行缓存:@Cacheable(value = "users")

  1. 如果一个类中的两个方法指定的缓存区不一样,那么即使参数相同,也不会使用缓存。
  2. 否则,将会使用缓存。

7、清除缓存:@CacheEvict

  1. Value:必需属性。用于指定清除哪个缓存区。
  2. Key:通过SpEL表达式显示指定缓存的key。
  3. Condition:指定一个返回boolean值的SpEL表达式,只有当表达式返回true时,spring才会清除缓存。
  4. allEntries:指定是否清空整个缓存区。\beforeInvocaion:指定是否在执行方法之前清除缓存。默认是方法完成之后清除。

8、Spring事务:spring的事务策略是通过platformTransactionManager接口体现的,该接口时Spring事务策略的核心。提供了三个抽象方法,并且都抛出异常TransactionException:

  1. TransactionStatus getTransaction(TransactionDefinition definition)//平台无关的获得事务的方法
  2. Void commit(TransactionStatus status)//平台无关的事务提交的方法
  3. Void rollback(TransactionStatus status)//平台无关的事务回滚的方法

9、Spring的事务机制是一种典型的策略模式,它只代表接口,不知道底层的具体管理事务过程。

10、TransactionDefinition 接口定义了一个事务规则:

  1. 事务隔离:当前事务与其他事务的隔离程度。
  2. 事务传播:在事务中执行的代码都会在当前事务中执行。
  3. 事务超时:事务在超时之前能运行多久。
  4. 只读状态:只读事务不修改数据。

11、TransactionStatus 代表了事务本身,它提供了简单的控制事务执行和查询事务状态的方法,这些方法在所有API中都是相同的。

  1. Boolean isNewTransaction()//判断事务是否为新建的事务
  2. Void setRollbackOnly()//设置事务回滚
  3. Boolean isRollbackOnly()//查询事务是否已有回滚标志

12、使用@Transactional

  1. 该注解可以用于修饰spring bean类,也可以修饰bean类中的某个方法。
  2. 修饰类时,表示事务设置对整个bean类起作用;修饰方法时,表示事务设置对该方法起作用。
  3. 属性有:
    1. isolation:用于指定事务的隔离级别。默认为底层事务的隔离级别。
    2. noRollbackFor:指定遇到特定异常时强制不回滚事务。
    3. noRollbackForClassName:指定遇到特定的多个异常时强制不回滚事务。
    4. propagation:指定事务传播行为。
    5. readOnly:指定事务是否只读。
    6. rollbackFor:指定遇到特定异常时强制回滚事务。
    7. rollbackForClassName:指定遇到特定的多个异常时强制回滚事务。
    8. timeout:指定事务的超时时长。
0 0
原创粉丝点击