您的位置:首页 > 数据库 > Redis

5Spring Boot集成Redis实现自动配置

2016-12-29 18:13 337 查看
spring Boot官方提供了Spring-Data-Redis的Starter
POM

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

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


手动集成Redis

pom.xml

[html] view
plain copy







<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.ibigsea</groupId>

<artifactId>springboot-redis-demo</artifactId>

<version>0.0.1-SNAPSHOT</version>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<boot.version>1.3.5.RELEASE</boot.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<version>${boot.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<version>${boot.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.8.2</version>

</dependency>

</dependencies>

</project>

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



RedisConfiguration.Java

[java] view
plain copy







package com.ibigsea.springboot_redis_demo.config;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

@Configuration

public class RedisConfiguration {

@Bean(name= "jedis.pool")

@Autowired

public JedisPool jedisPool(@Qualifier("jedis.pool.config") JedisPoolConfig config,

@Value("${jedis.pool.host}")String host,

@Value("${jedis.pool.port}")int port) {

return new JedisPool(config, host, port);

}

@Bean(name= "jedis.pool.config")

public JedisPoolConfig jedisPoolConfig (@Value("${jedis.pool.config.maxTotal}")int maxTotal,

@Value("${jedis.pool.config.maxIdle}")int maxIdle,

@Value("${jedis.pool.config.maxWaitMillis}")int maxWaitMillis) {

JedisPoolConfig config = new JedisPoolConfig();

config.setMaxTotal(maxTotal);

config.setMaxIdle(maxIdle);

config.setMaxWaitMillis(maxWaitMillis);

return config;

}

}

RedisClient.java

[java] view
plain copy







package com.ibigsea.springboot_redis_demo.config;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

/**

* 就一个小Demo 随便写下

* @author bigsea

*

*/

@Component

public class RedisClient {

@Autowired

private JedisPool jedisPool;

public void set(String key, String value) throws Exception {

Jedis jedis = null;

try {

jedis = jedisPool.getResource();

jedis.set(key, value);

} finally {

//返还到连接池

jedis.close();

}

}

public String get(String key) throws Exception {

Jedis jedis = null;

try {

jedis = jedisPool.getResource();

return jedis.get(key);

} finally {

//返还到连接池

jedis.close();

}

}

}

App.java

[java] view
plain copy







package com.ibigsea.springboot_redis_demo;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.ibigsea.springboot_redis_demo.config.RedisClient;

/**

* 是Spring Boot项目的核心注解,主要是开启自动配置

*/

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan

@RestController

public class App {

@Autowired

private RedisClient redisClinet;

public static void main(String[] args) {

SpringApplication.run(App.class, args);

}

@RequestMapping("/set")

public String set(String key, String value) throws Exception{

redisClinet.set(key, value);

return "success";

}

@RequestMapping("/get")

public String get(String key) throws Exception {

return redisClinet.get(key);

}

}

application.yml

[html] view
plain copy







jedis :

pool :

host : 127.0.0.1

port : 6379

config :

maxTotal: 100

maxIdle: 10

maxWaitMillis : 100000

server :

port : 8082

运行结果:








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

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

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

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

pom.xml

[html] view
plain copy







<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.ibigsea</groupId>

<artifactId>jedis-spring-boot-starter</artifactId>

<version>1.0-SNAPSHOT</version>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<boot.version>1.3.5.RELEASE</boot.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot</artifactId>

<version>${boot.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-autoconfigure</artifactId>

<version>${boot.version}</version>

</dependency>

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.8.2</version>

</dependency>

</dependencies>

</project>

目录结构是这样的



JedisProperties.java

[java] view
plain copy







package com.ibigsea.jedis.autoconfigure;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = JedisProperties.JEDIS_PREFIX)

public class JedisProperties {

public static final String JEDIS_PREFIX = "jedis";

private String host;

private int port;

private int maxTotal;

private int maxIdle;

private int maxWaitMillis;

public String getHost() {

return host;

}

public void setHost(String host) {

this.host = host;

}

public int getPort() {

return port;

}

public void setPort(int port) {

this.port = port;

}

public int getMaxTotal() {

return maxTotal;

}

public void setMaxTotal(int maxTotal) {

this.maxTotal = maxTotal;

}

public int getMaxIdle() {

return maxIdle;

}

public void setMaxIdle(int maxIdle) {

this.maxIdle = maxIdle;

}

public int getMaxWaitMillis() {

return maxWaitMillis;

}

public void setMaxWaitMillis(int maxWaitMillis) {

this.maxWaitMillis = maxWaitMillis;

}

}

JedisAutoConfiguration.java

[java] view
plain copy







package com.ibigsea.jedis.autoconfigure;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;

import org.springframework.boot.context.properties.EnableConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import com.ibigsea.jedis.client.RedisClient;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;

@Configuration

@EnableConfigurationProperties(JedisProperties.class)//开启属性注入,通过@autowired注入

@ConditionalOnClass(RedisClient.class)//判断这个类是否在classpath中存在

public class JedisAutoConfiguration {

@Autowired

private JedisProperties prop;

@Bean(name="jedisPool")

public JedisPool jedisPool() {

JedisPoolConfig config = new JedisPoolConfig();

config.setMaxTotal(prop.getMaxTotal());

config.setMaxIdle(prop.getMaxIdle());

config.setMaxWaitMillis(prop.getMaxWaitMillis());

return new JedisPool(config, prop.getHost(), prop.getPort());

}

@Bean

@ConditionalOnMissingBean(RedisClient.class)//容器中如果没有RedisClient这个类,那么自动配置这个RedisClient

public RedisClient redisClient(@Qualifier("jedisPool")JedisPool pool) {

RedisClient redisClient = new RedisClient();

redisClient.setJedisPool(pool);

return redisClient;

}

}

RedisClient.java

[java] view
plain copy







package com.ibigsea.jedis.client;

import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

/**

* 就一个小Demo 随便写下

* @author bigsea

*

*/

public class RedisClient {

private JedisPool jedisPool;

public void set(String key, String value) throws Exception {

Jedis jedis = null;

try {

jedis = jedisPool.getResource();

jedis.set(key, value);

} finally {

//返还到连接池

jedis.close();

}

}

public String get(String key) throws Exception {

Jedis jedis = null;

try {

jedis = jedisPool.getResource();

return jedis.get(key);

} finally {

//返还到连接池

jedis.close();

}

}

public JedisPool getJedisPool() {

return jedisPool;

}

public void setJedisPool(JedisPool jedisPool) {

this.jedisPool = jedisPool;

}

}

还要在spring.factories里面配置

[html] view
plain copy







# Auto Configure

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

com.ibigsea.jedis.autoconfigure.JedisAutoConfiguration

新建一个工程测试

pom.xml

[html] view
plain copy







<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.ibigsea</groupId>

<artifactId>test-starter</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>test-starter</name>

<url>http://maven.apache.org</url>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<boot.version>1.3.5.RELEASE</boot.version>

</properties>

<dependencies>

<dependency>

<groupId>com.ibigsea</groupId>

<artifactId>jedis-spring-boot-starter</artifactId>

<version>1.0-SNAPSHOT</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<version>${boot.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<version>${boot.version}</version>

<scope>test</scope>

</dependency>

</dependencies>

</project>

application.yml

[java] view
plain copy







jedis :

host : 127.0.0.1

port : 6379

maxTotal: 100

maxIdle: 10

maxWaitMillis : 100000

server :

port : 8082

App.java

[java] view
plain copy







package com.ibigsea.test_starter;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.ibigsea.jedis.client.RedisClient;

@SpringBootApplication

@RestController

public class App {

@Autowired

private RedisClient redisClient;

public static void main(String[] args) {

SpringApplication.run(App.class, args);

}

@RequestMapping("/set")

public String set(String key, String value) throws Exception{

redisClient.set(key, value);

return "success";

}

@RequestMapping("/get")

public String get(String key) throws Exception {

return redisClient.get(key);

}

}

测试结果









这里只是简单的写了下一个小demo,有兴趣的小伙伴可以自己去扩展更多的

比如实现集群连接, 分片连接,API扩展的更多一些
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐