springboot 사용자 정의 redis-starter 구현
18681 단어 springbootredis-starter
spring 저 는 자바 개발 자 라면 더 이상 익숙 할 수 없다 고 믿 습 니 다.거의 전체 자바 의 시장 점유 율 을 독점 하고 더 이상 말 하지 않 고 본론 으로 들 어 갑 니 다.
일단 저희 가 spring 에서 redis 를 통합 해서 뭘 해 야 되 는 지.
1.우선 Maven 프로젝트 는 의존 도 를 가 져 올 생각 이 없습니다.
<!-- jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.4.2</version>
</dependency>
<!-- 2、spring Redis jar -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
2.spring-xml 에서 설정
<!-- 1、 jedis -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- -->
<property name="maxTotal" value="50"></property>
<property name="maxIdle" value="5"></property>
.......
</bean>
<!--2、 JedisConnectionFactory-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- -->
<!-- -->
<property name="hostName" value="127.0.0.1"></property>
<!-- -->
<property name="port" value="6379"></property>
<!-- -->
<property name="password" value="yichun"></property>
<!-- : -->
<property name="poolConfig" ref="jedisPoolConfig"></property>
</bean>
<!-- 3、 RedisTemplate JedisConnectionFactory RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"></property>
<!-- key value , -->
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
</property>
</bean>
4、 @Autowired redis
@Autowired
RedisTemplate<String,String> redisTemplate;
3.위 는 spring 이 redis 를 사용 하 는 대체적인 절차 입 니 다.이렇게 해도 괜 찮 은 데?
그러나 모든 항목 은 이러한 번 거 로 운 xml 설정 을 거 쳐 야 한다.이것 이 바로 중복 작업 이다.이때'spring boot'는 바로 이러한 통합 을 전문 적 으로 하 는 일 입 니 다.우 리 는 이러한 통합 을 필요 로 하지 않 고 몇 줄 의 기초 설정 만 하면 됩 니 다.
springboot 자동 조립 redis 실현
spring boot 를 시작 하기 전에 우 리 는 먼저 몇 가지 주 해 를 보아 야 한다.spring boot 가 사용자 정의 조립 을 실현 하 는 핵심 은 바로 이 몇 가지 주해 이다.
1.@Import:Import 주해 의 주요 역할 은 bean 을 spring 용기 에 가 져 오 는 것 입 니 다.예 를 들 어 bean 을 사용자 정의 하여 spring 용기 에 위탁 관리 하려 면 설정 류 를 만 들 수 있 습 니 다.import 주 해 를 사용 하여 사용자 정의 bean 을 spring 용기 에 가 져 올 수 있 습 니 다.
2.@Bean:Bean 주 해 는 Spring 이 방법 을 알려 주면 대상 을 되 돌려 줍 니 다.이 대상 은 Spring 응용 컨 텍스트 의 bean 으로 등록 해 야 합 니 다.일반적인 방법 체 에는 최종 적 으로 bean 인 스 턴 스 를 만 드 는 논리 가 포함 되 어 있다.
3.@Component:보통 클래스 경로 스 캔 을 통 해 자동 으로 검색 하고 Spring 용기 에 자동 으로 조립 합 니 다.
4.@Configuration:spring 의 설정 류 는 spring 의 xml 파일 과 같 음 을 설명 합 니 다.ConfigurationClassPostProcessor:enhanceConfigurationClasses 이 방법 은 Configuration 주해 작업 의 핵심 방법 입 니 다.spring 응용 프로그램 이 시 작 될 때@Configuration 주해 되 는 모든 종 류 는 spring cglib 라 이브 러 리 에 의 해 cglib 동적 대 리 를 생 성 합 니 다.그리고 다른 곳 에 서 는@Autowired 주 해 를 통 해 Student 클래스 대상 을 도입 하면 생 성 된 configuration 설정 클래스 에서 생 성 된 동적 프 록 시 를 차단 하고 처리 한 후 원래 configuration 주해 클래스 의 student 방법 으로 Student 인 스 턴 스 를 가 져 옵 니 다.
5.@Condition a:개인 적 으로 판단 조건 을 하 는 것 같 습 니 다.condition 의 machet 일치 방법 이 true 일 때 만[이 방법 에서 도 우리 가 사용자 정의 논리 적 판단 을 실현 하 는 확장 점]이 bean 을 불 러 올 수 있 습 니 다.그렇지 않 으 면 이 bean 을 불 러 오지 않 습 니 다.
--condition 은 또 많은 하위 클래스 를 번식 시킨다(우리 가 직접 사용 하기에 편리 함)
@conditional OnMissingBean:용기 밑 에 현재 이 bean 이 있 으 면 불 러 오지 않 고 없 으 면 불 러 옵 니 다.
@conditionalOnExpression:괄호 의 내용 이 true 일 때 이 주 해 를 사용 하 는 클래스 가 실례 화 됩 니 다.
예시:
@ConditionalOnExpression("KaTeX parse error: Expected 'EOF', got '&' at position 25: …mer.enabled}==1&̲&{rabbitmq.comsumer.enabled:true}")
@ConditionalOnExpression("'${mq.comsumer}'.equals(‘rabbitmq')")
@conditional OnClass:classpath 에 어떤 class 가 있 을 때 다음 작업 을 수행 합 니 다.
@conditionalOnBean:주어진 bean 이 존재 할 때 만 현재 bean 을 예화 합 니 다.
1.새 두 항목:autoconfig 하나 starter 프로젝트
주:[maven 프로젝트 면 됩 니 다].
starter:주로 다른 프로젝트 에 의존 하 는 start 를 합 니 다.
autoconfig:구체 적 인 자동 조립 논리 처 리 를 실현 합 니 다.
2.autoconfig 프로젝트 의 pom 파일 을 다음 과 같이 추가 합 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<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>org.xing.modules</groupId>
<artifactId>spring-boot-redis-autoconfig</artifactId>
<version>1.0.0</version>
<properties>
<!-- Environment Settings -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<jedis.version>2.9.0</jedis.version>
<springboot.version>2.1.4.RELEASE</springboot.version>
</properties>
<dependencies>
<!-- springboot-stater -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${springboot.version}</version>
</dependency>
<!-- spring-data-redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${springboot.version}</version>
</dependency>
<!-- Jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<version>${springboot.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>
3.starter 프로젝트 에서 pom 은 autoconfig 의존 도 를 추가 하면 됩 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<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>org.xing.modules</groupId>
<artifactId>spring-boot-redis-starter</artifactId>
<version>1.0.0</version>
<properties>
<!-- Environment Settings -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.xing.modules</groupId>
<artifactId>spring-boot-redis-autoconfig</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
4.autoconfig 프로젝트 에서 패키지 configuration 을 만 들 고 RedisConfiguration 류 를 만 듭 니 다.
package org.xing.modules.configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.net.ConnectException;
/**
* {@like @ConditionalOnClass:
* This annotation indicates that there must be RedisOperations in the current classpath to inject this Bean}
*
* @ConditionalOnClass(Jedis.class)
* ClassPath Jedis spring
* jedis , .
*
* @author Created by John on 2020/10/12
*/
@Configuration
@ConditionalOnClass(Jedis.class)
public class RedisConfiguration {
// properties 。
// @src = org.xing.modules.configuration.RedisProperties
【** spring **】
/**
* <!-- 1、 jedis -->
* <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
* <property name="maxTotal" value="50"></property>
* <property name="maxIdle" value="5"></property>
* </bean>
*/
@Bean
public JedisPool jedisPool(RedisProperties redisProperties) throws ConnectException {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMinIdle(redisProperties.getMinIdle());
jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWait());
jedisPoolConfig.setMaxTotal(redisProperties.getMaxActive());
String password = isBlank(redisProperties.getPassword()) ? null:redisProperties.getPassword();
return new JedisPool(jedisPoolConfig,redisProperties.getHost(),redisProperties.getPort(),redisProperties.getTimeout(),password);
}
/** <!--2、 JedisConnectionFactory-->
* <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
* <!-- -->
* <property name="hostName" value="127.0.0.1"></property>
* <!-- -->
* <property name="port" value="6379"></property>
* <!-- -->
* <property name="password" value="yichun"></property>
* <!-- : -->
* <property name="poolConfig" ref="jedisPoolConfig"></property>
* </bean>
*/
@Bean
public JedisConnectionFactory redisConnectionFactory(RedisProperties redisProperties) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName(redisProperties.getHost());
jedisConnectionFactory.setPort(redisProperties.getPort());
jedisConnectionFactory.setPassword(redisProperties.getPassword());
jedisConnectionFactory.setDatabase(redisProperties.getDatabase());
return jedisConnectionFactory;
}
// :@src = org.xing.modules.template.RedisTemplateConfiguration
/** <!-- 3、 RedisTemplate JedisConnectionFactory RedisTemplate -->
* <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
* <property name="connectionFactory" ref="jedisConnectionFactory"></property>
*
* <!-- key value , -->
* <property name="keySerializer">
* <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
* </property>
* <property name="valueSerializer">
* <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
* </property>
* </bean>
*/
public static boolean isBlank(String str) {
return str == null || "".equals(str.trim());
}
}
5.properties 프로필 로 딩 클래스 생 성
package org.xing.modules.configuration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author Created by mr_zhou on 2020/10/12
*
* @TODO: "my.springboot.redis" Qualified redis configuration must begin with this prefix
* starter redis “my.springboot.redis.”
* :
* my.springboot.redis.host
* my.springboot.redis.prot
*/
@Component
@ConfigurationProperties(prefix = "my.springboot.redis")
public class RedisProperties {
private int port;
private String host;
private String password;
private int timeout;
private int database;
@Value("${redis.pool.max-active}")
private int maxActive;
@Value("${redis.pool.max-wait}")
private int maxWait;
@Value("${redis.pool.max-idle}")
private int maxIdle;
@Value("${redis.pool.min-idle}")
private int minIdle;
// get/set
6.redis 작업 템 플 릿 류 만 들 기여기 도 사실 RedisConfiguration 류 에 spring 용기 에 주입 할 수 있 지만 직책 구분 을 위해 단독으로 사용 합 니 다.
package org.xing.modules.template;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
/**
* TODO: Redis Template Configuration Class
*
* @author Created by mr_zhou on 2020/10/12
*/
@Configuration
public class RedisTemplateConfiguration {
@Bean
@ConditionalOnMissingBean
public RedisTemplate redisTemplate(JedisConnectionFactory jedisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
return redisTemplate;
}
// .....
}
7.Redis 대외 수출 배치 유형이 종 류 는 주로 spring 용기 로드 입구 에 작용 합 니 다.
package org.xing.modules.template;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
/**
* TODO: Redis Template Configuration Class
*
* @author Created by mr_zhou on 2020/10/12
*/
@Configuration
public class RedisTemplateConfiguration {
@Bean
@ConditionalOnMissingBean
public RedisTemplate redisTemplate(JedisConnectionFactory jedisConnectionFactory){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(jedisConnectionFactory);
return redisTemplate;
}
// .....
}
8.springboot 우아 하 게 확 장 된 입구springboot 을 열 어서 jar 의 원본 코드 를 자동 으로 설정 합 니 다:
springboot 자동 조립 은 주로 스 캔 입 니 다.
[META-INF 의 spring.factories 파일 아래\#Auto Configure]의 모든 클래스
그래서 우 리 는 조롱박 을 따라 바 가 지 를 그립 니 다.[starter 에서 META-INF 를 만 들 고 spring.factories 를 만 듭 니 다]
나중에 Maven 에서 autoconfig->starter install 을 누 르 도록 합 니 다.
9.demo 사용자 정의 starter 사용
1.demo 프로젝트 에 사용자 정의 starter 의존 도 를 추가 합 니 다.
2.마지막 으로 프로젝트 에 redis 를 직접 주입 할 수 있 습 니 다.
[pom 에 서 는 리 디 스 의존 없 이 사용자 정의 starter 만 추가 한 것 을 볼 수 있 습 니 다.]
/**
* @author Created by mr_zhou on 2020/10/12
*/
public class MyService {
@Autowired
private RedisTemplate redisTemplate;
}
3.redis 연결 정 보 를 설정 하면 조작 할 수 있 습 니 다.-RedisProperties 속성 에 대응 합 니 다.10.드라마 종영
마지막 으로 우 리 는 자신의 starter 를 천천히 보완 할 수 있다.
springboot 사용자 정의 redis-starter 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 springboot 사용자 정의 redis-starter 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.