spring boot事务机制
spring支持声明式事务,用@Tracsational注解在方法上表明该方法需要事务支持。被注解的方法在被调用时开启一个新的事务,当方法无异常结束时,spring会提交这个事务。
属性:propagation,定义事务的生命周期;isolation,隔离,决定事务的完整性;timeout,事务过期时间;readonly,只读事务;rollback,指定哪些异常可以引起事务回滚;norollback,哪些异常不可以引起事务回滚。
spring data JPA对所有的默认方法都开启了事务支持。
1.实体类Person
2.repository实体类PersonRepository
3.service:
public class DemoServiceImpl implements DemoService{
@Autowired
PersonRepository personRepository;
@Transactional(rollbackFor={illegalArgumentException.class}
public Person saveWithRollback(Person p){
Person p = personRepository.save(p);
throw new illegalArgumentException(“回滚“);
return p;
}
@Transactional(norollbackFor={illegalArgumentException.class}
public Person saveWithoutRollback(Person p){
Person p = personRepository.save(p);
throw new illegalArgumentException(“回滚“);
return p;
}
4.controller
5.测试:http://localhost:8080/rollback?name=tom—>控制台抛出异常,数据库没有新增记录
http://localhost:8080/norollback?name=tom—>控制台抛出异常,数据库新增了记录
spring 缓存
cacheManager是spring提供的各种缓存技术抽象接口,cache接口包含缓存的各种操作。针对不同缓存技术,需要实现不同的cacheManager,如simpleCacheManager(使用简单的collection缓存数据,主要用来测试用途);redisCacheManager… …
注解:@cacheable执行前先查看缓存,有数据直接返回,没有数据调用方法并将返回值放进缓存;
@cachePut无论怎样都会将方法的返回值放到缓存中
@cacheevict将一条或多条数据从缓存中删除
@caching组合多个注解策略在一个方法上
@cacheable,@cachePut,@cacheevict都有value属性:要使用的缓存名称;key属性:数据在缓存中存储的键。
eg. public class DemoServiceImpl {
@Autowired
PersonRepository personRepository;
@Override
@CachePut(value=“people”,key=“#person.id”)
public Person save(Person p){
Person p = personRepository.save(p);
return p;
}
}
原文地址:http://blog.51cto.com/13580976/2135269