概述
在SpringBoot中,开启Redis的事务有两种方式,一种是手动开启,一种是使用@Transaction注解。
springBoot框架及redis版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置Redis链接池
#redisConfig
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.jedis.pool.max-idle=100
spring.redis.jedis.pool.min-idle=0
事务开启方式
使用注解方式
1. redis配置类
//springBoot会自动配置redis,具体可参照RedisAutoConfiguration.java,但是默认的配置,没有开启事务,所以需要自定义
@Configuration
@EnableConfigurationProperties({RedisProperties.class})
public class RedisConfig {
/**
* 实例化 RedisTemplate 对象
*
* @return
*/
@Bean
public StringRedisTemplate customStringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
template.setEnableTransactionSupport(true);
return template;
}
}
2. 在需要开启事务的方法上面加上注解
@Transactional(rollbackFor = Exception.class)
public void mutiTest(Map<String,String> datas) throws Exception {
redisTemplate.opsForValue().multiSet(datas);
throw new Exception("custom exception");
}
手动开启
1. 无需配置,手动开启事务
//开启事务
redisTemplate.multi();
//do something
//关闭事务
redisTemplate.exec();