第四讲
1、启用Spring缓存:
- 在配置文件中导入cache:命名空间。
- 添加配置:
<cache:annotation-driven cache-manager="cacheManager" />
- 针对不同的缓存实现配置对应的缓存管理器。
2、EhCache的使用,添加jar包,然后配置ehcache.xml。配置beans.xml缓存区。
3、类级别:使用@Cacheable执行缓存:@Cacheable(value = "users")
- 修饰类时,可控制spring在类级别进行缓存,当程序调用该类的任意方法时,只要传入的参数相同,spring就会使用缓存。(只要参数相同,方法不同也使用缓存)
- 此处缓存的意义是:当程序第一次调用该类的实例的某个方法时,spring缓存机制会将该方法返回的数据放入指定的缓存区——就是Value属性指定的缓存区。
4、类级别的缓存默认以所有的方法参数作为key来缓存方法返回的数据,同一个类不管调用哪个方法,只要调用方法的参数相同,spring就会直接使用缓存区中的数据。
5、当然我们可以指定@Cacheable的属性:
- Value:必需属性。可指定多个缓存区的名字,将返回值放入指定的缓存区。
- Key:通过SpEL表达式显示指定缓存的key。
- Condition:指定一个返回boolean值的SpEL表达式,只有当表达式返回true时,spring才会缓存方法返回值。
- Unless:指定一个返回boolean值的SpEL表达式,只有当表达式返回true时,spring就不会缓存方法返回值。
6、方法级别的缓存:使用@Cacheable执行缓存:@Cacheable(value = "users")
- 如果一个类中的两个方法指定的缓存区不一样,那么即使参数相同,也不会使用缓存。
- 否则,将会使用缓存。
7、清除缓存:@CacheEvict
- Value:必需属性。用于指定清除哪个缓存区。
- Key:通过SpEL表达式显示指定缓存的key。
- Condition:指定一个返回boolean值的SpEL表达式,只有当表达式返回true时,spring才会清除缓存。
- allEntries:指定是否清空整个缓存区。\beforeInvocaion:指定是否在执行方法之前清除缓存。默认是方法完成之后清除。
8、Spring事务:spring的事务策略是通过platformTransactionManager接口体现的,该接口时Spring事务策略的核心。提供了三个抽象方法,并且都抛出异常TransactionException:
- TransactionStatus getTransaction(TransactionDefinition definition)//平台无关的获得事务的方法
- Void commit(TransactionStatus status)//平台无关的事务提交的方法
- Void rollback(TransactionStatus status)//平台无关的事务回滚的方法
9、Spring的事务机制是一种典型的策略模式,它只代表接口,不知道底层的具体管理事务过程。
10、TransactionDefinition 接口定义了一个事务规则:
- 事务隔离:当前事务与其他事务的隔离程度。
- 事务传播:在事务中执行的代码都会在当前事务中执行。
- 事务超时:事务在超时之前能运行多久。
- 只读状态:只读事务不修改数据。
11、TransactionStatus 代表了事务本身,它提供了简单的控制事务执行和查询事务状态的方法,这些方法在所有API中都是相同的。
- Boolean isNewTransaction()//判断事务是否为新建的事务
- Void setRollbackOnly()//设置事务回滚
- Boolean isRollbackOnly()//查询事务是否已有回滚标志
12、使用@Transactional
- 该注解可以用于修饰spring bean类,也可以修饰bean类中的某个方法。
- 修饰类时,表示事务设置对整个bean类起作用;修饰方法时,表示事务设置对该方法起作用。
- 属性有:
- isolation:用于指定事务的隔离级别。默认为底层事务的隔离级别。
- noRollbackFor:指定遇到特定异常时强制不回滚事务。
- noRollbackForClassName:指定遇到特定的多个异常时强制不回滚事务。
- propagation:指定事务传播行为。
- readOnly:指定事务是否只读。
- rollbackFor:指定遇到特定异常时强制回滚事务。
- rollbackForClassName:指定遇到特定的多个异常时强制回滚事务。
- timeout:指定事务的超时时长。