(七)Spring Boot 整合Redis

Spring Boot 做的一个简单的增删改查,前台页面整合Thymeleaf模板,数据源druid,声明式事务,整合redis,并开启redis事务,项目下载地址:点此下载
如果有不需要使用的功能,只需要删除com.test.springboot.config下对应的配置再启动就行了
Spring Boot的目的就是快速开发,但是他的一些默认配置对我们并不是很适用的,还是需要来修改它的一些默认参数,我是对比之前整合Spring框架来整个Spring Boot的目的就是快速开发
下面直接上代码:

原 xml 配置

  



	
	
	
	  
	  
		  
		  
        
    	
          
          
        
         
        
         
        
         
          
          
        
          
    
    
    
    
	
    
	
	 
		 
		
		 
		
		 
		
		
		
		 
	     
    
      
          
          
          
              
          
          
              
          
          
              
          
          
              
          
        
        
          
    
    
    	
    	

基于java的配置方式

package com.test.springboot.config;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;


import com.test.springboot.util.RedisUtil;


import redis.clients.jedis.JedisPoolConfig;


@Configuration
public class RedisConfig {
	
	@Value("${redis.hostName}")
	private String hostName;
	
	@Value("${redis.port}")
	private Integer port;
	
	@Value("${redis.password}")
	private String password;
	
	/**
	 * JedisPoolConfig 连接池
	 * @return
	 */
	@Bean
	public JedisPoolConfig jedisPoolConfig(){
		JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
		//最大空闲数
		jedisPoolConfig.setMaxIdle(300);
		//连接池的最大数据库连接数
		jedisPoolConfig.setMaxTotal(1000);
		//最大建立连接等待时间
		jedisPoolConfig.setMaxWaitMillis(1000);
		//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
		jedisPoolConfig.setMinEvictableIdleTimeMillis(300000);
		//每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
		jedisPoolConfig.setNumTestsPerEvictionRun(10);
		//逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
		jedisPoolConfig.setTimeBetweenEvictionRunsMillis(30000);
		//是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
		jedisPoolConfig.setTestOnBorrow(true);
		//在空闲时检查有效性, 默认false
		jedisPoolConfig.setTestWhileIdle(true);
		return jedisPoolConfig;
	}
	
	/**
	 * 配置工厂
	 * @param jedisPoolConfig
	 * @return
	 */
	@Bean
	public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
		JedisConnectionFactory jedisConnectionFactory=new JedisConnectionFactory();
		//连接池
		jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
		//IP地址
		jedisConnectionFactory.setHostName(hostName);
		//端口号
		jedisConnectionFactory.setPort(port);
		//如果Redis设置有密码
		jedisConnectionFactory.setPassword(password);
		//客户端超时时间单位是毫秒
		jedisConnectionFactory.setTimeout(5000);
		return jedisConnectionFactory;
	}


	/**
     * 实例化 RedisTemplate 对象
     * @return
     */
    @Bean
    public RedisTemplate functionDomainRedisTemplate(JedisConnectionFactory jedisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        initDomainRedisTemplate(redisTemplate, jedisConnectionFactory);
        return redisTemplate;
    }
    
    /**
     * 设置数据存入 redis 的序列化方式,并开启事务
     * @param redisTemplate
     * @param factory
     */
    private void initDomainRedisTemplate(RedisTemplate redisTemplate, RedisConnectionFactory factory) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        //开启事务
        redisTemplate.setEnableTransactionSupport(true);
        redisTemplate.setConnectionFactory(factory);
    }
    
    @Bean(name="redisUtil")
    public RedisUtil redisUtil(RedisTemplate redisTemplate){
    	RedisUtil redisUtil=new RedisUtil();
    	redisUtil.setRedisTemplate(redisTemplate);
    	return redisUtil;
    }
	
}

redisUtil是我自己写的一个类,只是封装了一下RedisTemplate,可以参考我之前Spring整合Redis的博客,其中有这个类,这里就不写了! 也可以注销掉,直接注入RedisTemplate  然后使用redisTemplate.opsForValue().set(key, value);等方法操作redis

关于redis的事务

首先保证redisTemplate.setEnableTransactionSupport(true); 上面配置中 有注释!
上一节 讲Spring Boot 整合mybatis的时候,在引入mybatis-spring-boot-starter的依赖之后,会默认添加spring-boot-starter-jdbc的依赖,然后在需要添加事务的类上,或者方法上添加@Transactional注解就可以了
事务同样对redis也是有效的,但是要保证redisTemplate.setEnableTransactionSupport(true);

你可能感兴趣的:(SpringBoot)