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;
}
}
spring boot(四)事務與緩存