Spring Boot集成Redis实现自动配置

通过上面一些笔记的介绍我们可以自己动手去集成Redis, 没有什么难度的

还有Spring Boot官方提供了Spring-Data-RedisStarter POM

有兴趣的可以查看下这篇资料

http://blog.didispace.com/springbootredis/?utm_source=tuicool&utm_medium=referral


手动集成Redis

pom.xml 

[html]  view plain  copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0modelVersion>  
  4.     <groupId>com.ibigseagroupId>  
  5.     <artifactId>springboot-redis-demoartifactId>  
  6.     <version>0.0.1-SNAPSHOTversion>  
  7.   
  8.     <properties>  
  9.         <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>  
  10.         <boot.version>1.3.5.RELEASEboot.version>  
  11.     properties>  
  12.   
  13.     <dependencies>  
  14.         <dependency>  
  15.             <groupId>org.springframework.bootgroupId>  
  16.             <artifactId>spring-boot-starter-webartifactId>  
  17.             <version>${boot.version}version>  
  18.         dependency>  
  19.         <dependency>  
  20.             <groupId>org.springframework.bootgroupId>  
  21.             <artifactId>spring-boot-starter-testartifactId>  
  22.             <version>${boot.version}version>  
  23.             <scope>testscope>  
  24.         dependency>  
  25.         <dependency>  
  26.             <groupId>redis.clientsgroupId>  
  27.             <artifactId>jedisartifactId>  
  28.             <version>2.8.2version>  
  29.         dependency>  
  30.     dependencies>  
  31.   
  32. project>  

整个项目的结构图是这样的


RedisConfiguration.java

[java]  view plain  copy
  1. package com.ibigsea.springboot_redis_demo.config;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.beans.factory.annotation.Qualifier;  
  5. import org.springframework.beans.factory.annotation.Value;  
  6. import org.springframework.context.annotation.Bean;  
  7. import org.springframework.context.annotation.Configuration;  
  8.   
  9. import redis.clients.jedis.JedisPool;  
  10. import redis.clients.jedis.JedisPoolConfig;  
  11.   
  12. @Configuration  
  13. public class RedisConfiguration {  
  14.       
  15.     @Bean(name= "jedis.pool")  
  16.     @Autowired  
  17.     public JedisPool jedisPool(@Qualifier("jedis.pool.config") JedisPoolConfig config,   
  18.                 @Value("${jedis.pool.host}")String host,   
  19.                 @Value("${jedis.pool.port}")int port) {  
  20.         return new JedisPool(config, host, port);  
  21.     }  
  22.       
  23.     @Bean(name= "jedis.pool.config")  
  24.     public JedisPoolConfig jedisPoolConfig (@Value("${jedis.pool.config.maxTotal}")int maxTotal,  
  25.                                 @Value("${jedis.pool.config.maxIdle}")int maxIdle,  
  26.                                 @Value("${jedis.pool.config.maxWaitMillis}")int maxWaitMillis) {  
  27.         JedisPoolConfig config = new JedisPoolConfig();  
  28.         config.setMaxTotal(maxTotal);  
  29.         config.setMaxIdle(maxIdle);  
  30.         config.setMaxWaitMillis(maxWaitMillis);  
  31.         return config;  
  32.     }  
  33.       
  34. }  

RedisClient.java

[java]  view plain  copy
  1. package com.ibigsea.springboot_redis_demo.config;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.stereotype.Component;  
  5.   
  6. import redis.clients.jedis.Jedis;  
  7. import redis.clients.jedis.JedisPool;  
  8.   
  9. /** 
  10.  * 就一个小Demo 随便写下 
  11.  * @author bigsea 
  12.  * 
  13.  */  
  14. @Component  
  15. public class RedisClient {  
  16.   
  17.     @Autowired  
  18.     private JedisPool jedisPool;  
  19.       
  20.     public void set(String key, String value) throws Exception {  
  21.         Jedis jedis = null;  
  22.         try {  
  23.             jedis = jedisPool.getResource();  
  24.             jedis.set(key, value);  
  25.         } finally {  
  26.             //返还到连接池  
  27.             jedis.close();  
  28.         }  
  29.     }  
  30.       
  31.     public String get(String key) throws Exception  {  
  32.   
  33.         Jedis jedis = null;  
  34.         try {  
  35.             jedis = jedisPool.getResource();  
  36.             return jedis.get(key);  
  37.         } finally {  
  38.             //返还到连接池  
  39.             jedis.close();  
  40.         }  
  41.     }  
  42.       
  43. }  

App.java

[java]  view plain  copy
  1. package com.ibigsea.springboot_redis_demo;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.boot.SpringApplication;  
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. import com.ibigsea.springboot_redis_demo.config.RedisClient;  
  10.   
  11. /** 
  12.  * 是Spring Boot项目的核心注解,主要是开启自动配置 
  13.  */  
  14. @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan  
  15. @RestController  
  16. public class App {  
  17.       
  18.     @Autowired  
  19.     private RedisClient redisClinet;  
  20.       
  21.     public static void main(String[] args) {  
  22.         SpringApplication.run(App.class, args);  
  23.     }  
  24.       
  25.       
  26.     @RequestMapping("/set")  
  27.     public String set(String key, String value) throws Exception{  
  28.         redisClinet.set(key, value);  
  29.         return "success";  
  30.     }  
  31.       
  32.     @RequestMapping("/get")  
  33.     public String get(String key) throws Exception {  
  34.         return redisClinet.get(key);  
  35.     }  
  36.       
  37. }  

application.yml

[html]  view plain  copy
  1. jedis :  
  2.   pool :  
  3.     host : 127.0.0.1  
  4.     port : 6379  
  5.     config :  
  6.       maxTotal: 100  
  7.       maxIdle: 10  
  8.       maxWaitMillis : 100000  
  9.   
  10. server :  
  11.   port : 8082  

运行结果:

 





实现自己的jedis-spring-boot-starter

一些自动配置的东西这里面有讲

http://blog.csdn.net/a67474506/article/details/52013634

 

首先我们创建一个jedis-spring-boot-starter

pom.xml

[html]  view plain  copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0modelVersion>  
  4.     <groupId>com.ibigseagroupId>  
  5.     <artifactId>jedis-spring-boot-starterartifactId>  
  6.     <version>1.0-SNAPSHOTversion>  
  7.       
  8.     <properties>  
  9.         <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>  
  10.         <boot.version>1.3.5.RELEASEboot.version>  
  11.     properties>  
  12.       
  13.     <dependencies>  
  14.         <dependency>  
  15.             <groupId>org.springframework.bootgroupId>  
  16.             <artifactId>spring-bootartifactId>  
  17.             <version>${boot.version}version>  
  18.         dependency>  
  19.         <dependency>  
  20.             <groupId>org.springframework.bootgroupId>  
  21.             <artifactId>spring-boot-autoconfigureartifactId>  
  22.             <version>${boot.version}version>  
  23.         dependency>  
  24.         <dependency>  
  25.             <groupId>redis.clientsgroupId>  
  26.             <artifactId>jedisartifactId>  
  27.             <version>2.8.2version>  
  28.         dependency>  
  29.     dependencies>  
  30. project>  

目录结构是这样的



JedisProperties.java

[java]  view plain  copy
  1. package com.ibigsea.jedis.autoconfigure;  
  2.   
  3. import org.springframework.boot.context.properties.ConfigurationProperties;  
  4.   
  5. @ConfigurationProperties(prefix = JedisProperties.JEDIS_PREFIX)  
  6. public class JedisProperties {  
  7.       
  8.     public static final String JEDIS_PREFIX = "jedis";  
  9.       
  10.     private String host;  
  11.       
  12.     private int port;  
  13.       
  14.     private int maxTotal;  
  15.       
  16.     private int maxIdle;  
  17.       
  18.     private int maxWaitMillis;  
  19.   
  20.     public String getHost() {  
  21.         return host;  
  22.     }  
  23.   
  24.     public void setHost(String host) {  
  25.         this.host = host;  
  26.     }  
  27.   
  28.     public int getPort() {  
  29.         return port;  
  30.     }  
  31.   
  32.     public void setPort(int port) {  
  33.         this.port = port;  
  34.     }  
  35.   
  36.     public int getMaxTotal() {  
  37.         return maxTotal;  
  38.     }  
  39.   
  40.     public void setMaxTotal(int maxTotal) {  
  41.         this.maxTotal = maxTotal;  
  42.     }  
  43.   
  44.     public int getMaxIdle() {  
  45.         return maxIdle;  
  46.     }  
  47.   
  48.     public void setMaxIdle(int maxIdle) {  
  49.         this.maxIdle = maxIdle;  
  50.     }  
  51.   
  52.     public int getMaxWaitMillis() {  
  53.         return maxWaitMillis;  
  54.     }  
  55.   
  56.     public void setMaxWaitMillis(int maxWaitMillis) {  
  57.         this.maxWaitMillis = maxWaitMillis;  
  58.     }  
  59.       
  60. }  

JedisAutoConfiguration.java

[java]  view plain  copy
  1. package com.ibigsea.jedis.autoconfigure;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.beans.factory.annotation.Qualifier;  
  5. import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;  
  6. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;  
  7. import org.springframework.boot.context.properties.EnableConfigurationProperties;  
  8. import org.springframework.context.annotation.Bean;  
  9. import org.springframework.context.annotation.Configuration;  
  10.   
  11. import com.ibigsea.jedis.client.RedisClient;  
  12.   
  13. import redis.clients.jedis.JedisPool;  
  14. import redis.clients.jedis.JedisPoolConfig;  
  15.   
  16. @Configuration  
  17. @EnableConfigurationProperties(JedisProperties.class)//开启属性注入,通过@autowired注入   
  18. @ConditionalOnClass(RedisClient.class)//判断这个类是否在classpath中存在  
  19. public class JedisAutoConfiguration {  
  20.       
  21.     @Autowired  
  22.     private JedisProperties prop;  
  23.       
  24.     @Bean(name="jedisPool")  
  25.     public JedisPool jedisPool() {  
  26.         JedisPoolConfig config = new JedisPoolConfig();  
  27.         config.setMaxTotal(prop.getMaxTotal());  
  28.         config.setMaxIdle(prop.getMaxIdle());  
  29.         config.setMaxWaitMillis(prop.getMaxWaitMillis());  
  30.         return new JedisPool(config, prop.getHost(), prop.getPort());  
  31.     }  
  32.       
  33.     @Bean  
  34.     @ConditionalOnMissingBean(RedisClient.class)//容器中如果没有RedisClient这个类,那么自动配置这个RedisClient  
  35.     public RedisClient redisClient(@Qualifier("jedisPool")JedisPool pool) {  
  36.         RedisClient redisClient = new RedisClient();  
  37.         redisClient.setJedisPool(pool);  
  38.         return redisClient;  
  39.     }  
  40.       
  41. }  

RedisClient.java

[java]  view plain  copy
  1. package com.ibigsea.jedis.client;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4. import redis.clients.jedis.JedisPool;  
  5.   
  6. /** 
  7.  * 就一个小Demo 随便写下 
  8.  * @author bigsea 
  9.  * 
  10.  */  
  11. public class RedisClient {  
  12.   
  13.     private JedisPool jedisPool;  
  14.       
  15.     public void set(String key, String value) throws Exception {  
  16.         Jedis jedis = null;  
  17.         try {  
  18.             jedis = jedisPool.getResource();  
  19.             jedis.set(key, value);  
  20.         } finally {  
  21.             //返还到连接池  
  22.             jedis.close();  
  23.         }  
  24.     }  
  25.       
  26.     public String get(String key) throws Exception  {  
  27.   
  28.         Jedis jedis = null;  
  29.         try {  
  30.             jedis = jedisPool.getResource();  
  31.             return jedis.get(key);  
  32.         } finally {  
  33.             //返还到连接池  
  34.             jedis.close();  
  35.         }  
  36.     }  
  37.   
  38.     public JedisPool getJedisPool() {  
  39.         return jedisPool;  
  40.     }  
  41.   
  42.     public void setJedisPool(JedisPool jedisPool) {  
  43.         this.jedisPool = jedisPool;  
  44.     }  
  45.       
  46. }  

还要在spring.factories里面配置

[html]  view plain  copy
  1. # Auto Configure  
  2. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\  
  3. com.ibigsea.jedis.autoconfigure.JedisAutoConfiguration  



新建一个工程测试下


pom.xml

[html]  view plain  copy
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0modelVersion>  
  4.   
  5.     <groupId>com.ibigseagroupId>  
  6.     <artifactId>test-starterartifactId>  
  7.     <version>0.0.1-SNAPSHOTversion>  
  8.     <packaging>jarpackaging>  
  9.   
  10.     <name>test-startername>  
  11.     <url>http://maven.apache.orgurl>  
  12.   
  13.     <properties>  
  14.         <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>  
  15.         <boot.version>1.3.5.RELEASEboot.version>  
  16.     properties>  
  17.   
  18.     <dependencies>  
  19.         <dependency>  
  20.             <groupId>com.ibigseagroupId>  
  21.             <artifactId>jedis-spring-boot-starterartifactId>  
  22.             <version>1.0-SNAPSHOTversion>  
  23.         dependency>  
  24.         <dependency>  
  25.             <groupId>org.springframework.bootgroupId>  
  26.             <artifactId>spring-boot-starter-webartifactId>  
  27.             <version>${boot.version}version>  
  28.         dependency>  
  29.         <dependency>  
  30.             <groupId>org.springframework.bootgroupId>  
  31.             <artifactId>spring-boot-starter-testartifactId>  
  32.             <version>${boot.version}version>  
  33.             <scope>testscope>  
  34.         dependency>  
  35.     dependencies>  
  36. project>  

application.yml

[java]  view plain  copy
  1. jedis :  
  2.   host : 127.0.0.1  
  3.   port : 6379  
  4.   maxTotal: 100  
  5.   maxIdle: 10  
  6.   maxWaitMillis : 100000  
  7. server :  
  8.   port : 8082  

App.java

[java]  view plain  copy
  1. package com.ibigsea.test_starter;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.boot.SpringApplication;  
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. import com.ibigsea.jedis.client.RedisClient;  
  10.   
  11.   
  12. @SpringBootApplication   
  13. @RestController  
  14. public class App {  
  15.       
  16.     @Autowired  
  17.     private RedisClient redisClient;  
  18.       
  19.     public static void main(String[] args) {  
  20.         SpringApplication.run(App.class, args);  
  21.     }  
  22.       
  23.     @RequestMapping("/set")  
  24.     public String set(String key, String value) throws Exception{  
  25.         redisClient.set(key, value);  
  26.         return "success";  
  27.     }  
  28.       
  29.     @RequestMapping("/get")  
  30.     public String get(String key) throws Exception {  
  31.         return redisClient.get(key);  
  32.     }  
  33. }  

测试结果




你可能感兴趣的:(Spring Boot集成Redis实现自动配置)