日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot自定義redis-starter的實現

瀏覽:23日期:2023-04-17 10:25:13

spring時代整合redis

spring我相信只要是一個Java開發人員我相信再熟悉不過了,幾乎壟斷了整個JavaEE的市場份額,話不多說進入正題。

首先看看我們在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 class='redis.clients.jedis.JedisPoolConfig'> <!-- 最大連接數--> <property name='maxTotal' value='50'></property> <property name='maxIdle' value='5'></property> ....... 這里省略一些更多配置 </bean> <!--2、配置連接工廠JedisConnectionFactory--> <bean 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 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配置,這就是重復工作了。這時候就出現了“springboot” 就是專門去做這些整合的事情了,讓我們不需要整合這些只需幾行基礎配置即可。

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、@Conditiona:個人感覺主要是做一些判斷條件的、只有當condition的machet匹配方法為 true 的時候【該方法內也是我們實現一些自定義邏輯判斷的擴展點】,才會去加載該bean 否則不加載該bean。----- condition又繁衍出很多子類(方便我們直接使用)@ConditionalOnMissingBean:當容器下有當前這個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’)')

@ConditionalOnClass:當classpath下有某個class的時候,就執行下面操作

@ConditionalOnBean:只有當給定的bean存在時、則實例化當前bean。

1、新建兩個項目:一個autoconfig一個starter項目

注:【maven項目即可】。starter:主要是做讓其他項目依賴的start。autoconfig:實現具體自動裝配邏輯處理。

springboot自定義redis-starter的實現

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 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 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 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 */@Configurationpublic 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 */@Configurationpublic 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】下的所有類

springboot自定義redis-starter的實現

因此我們照葫蘆畫瓢【在starter下創建META-INF 再創建spring.factories】

springboot自定義redis-starter的實現

讓后在maven里面先后 autoconfig -> starter install一下。

springboot自定義redis-starter的實現

9、demo使用自定義starter

1、在demo項目中加入自定義starter的依賴

springboot自定義redis-starter的實現

2、最后就可以直接在項目中注入使用redis。【pom里面可以看到我們沒有加任何redis依賴的只加了自定義的starter】

/** * @author Created by mr_zhou on 2020/10/12 */public class MyService { @Autowired private RedisTemplate redisTemplate;}

3、配置redis連接信息即可操作 - 對應 RedisProperties 屬性。

springboot自定義redis-starter的實現

10、全劇終

最后我們就可以慢慢完善自己的starter做到以后直接使用自己的redis封裝一些常用的操作。

到此這篇關于springboot自定義redis-starter的實現的文章就介紹到這了,更多相關springboot自定義redis-starter內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
四虎成人精品一区二区免费网站| 国产伦精品一区二区三区在线播放 | 国产综合视频| 91p九色成人| 狠狠干综合网| 久久伊人亚洲| 男女精品网站| 日韩欧美看国产| 国产精品高清一区二区| 麻豆精品网站| 亚洲二区精品| 日韩av不卡一区二区| 午夜精品影院| 鲁鲁在线中文| 国产精品videosex极品| 蜜臀久久99精品久久久画质超高清| 久久午夜影院| 黑丝一区二区三区| 日韩在线中文| 久久久91麻豆精品国产一区| 亚洲一区二区av| 九一国产精品| 国产一区二区三区天码| 欧美一区成人| 久久一二三区| 亚洲欧美网站在线观看| 久久国产精品免费一区二区三区| 国产精品nxnn| 不卡福利视频| 天堂网av成人| 亲子伦视频一区二区三区| 日韩综合一区| 老鸭窝一区二区久久精品| 欧美亚洲tv| 精品视频在线一区二区在线| 精品在线网站观看| 四虎4545www国产精品 | 成人一区而且| 国产精品久久久久蜜臀| 久久av免费看| 日韩大片在线播放| 亚洲精品在线观看91| 先锋亚洲精品| 一区二区亚洲视频| 国产日韩免费| 欧美日韩视频网站| 日韩中文字幕区一区有砖一区| 亚洲一区有码| 国产精品流白浆在线观看| 狂野欧美性猛交xxxx| 久久激情网站| 日韩福利视频导航| 久久免费国产| 国产精品99精品一区二区三区∴| 91亚洲一区| 亚洲ww精品| 人人精品亚洲| 日韩激情av在线| 日韩中文在线播放| 日韩二区三区在线观看| 婷婷精品视频| 国产在线一区不卡| 美女尤物久久精品| 日韩在线观看不卡| 欧美激情福利| 97se亚洲| 女主播福利一区| 日韩av免费| 高清一区二区三区| 免费美女久久99| 国产99久久久国产精品成人免费| 国产精品一区二区三区www| 国产亚洲在线观看| 久久久国产精品一区二区中文| 欧美天堂一区二区| 国产精品igao视频网网址不卡日韩 | av日韩中文| 欧美一级网址| 亚洲三级视频| 97精品视频在线看| 影音先锋久久精品| 尤物精品在线| 91精品观看| 欧美日韩在线观看视频小说| 久久精品亚洲| 国产无遮挡裸体免费久久| 综合色就爱涩涩涩综合婷婷| 国产福利片在线观看| 日韩av有码| 精品国产网站| 亚洲天堂1区| 日韩有吗在线观看| 精品中文字幕一区二区三区四区| 亚洲网站视频| 欧美激情综合| 久久不见久久见中文字幕免费| se01亚洲视频 | 国产在线日韩| 久久国产精品免费精品3p | 99精品在线观看| 综合激情视频| 久久久久欧美精品| 欧美日韩一视频区二区| 亚洲1234区| 国产亚洲观看| 亚洲精品在线二区| 久久美女性网| 精品国产午夜| 日本成人在线一区| 国产毛片久久| 欧美日韩在线播放视频| 国产精品亚洲产品| 亚洲日本久久| 四虎影视精品| 欧美成人一二区| 日本色综合中文字幕| 亚洲欧美日本日韩| 99精品国产一区二区三区| 国产成人精品福利| 欧美精品1区| 久久精品99国产精品| 日本aⅴ亚洲精品中文乱码| 日韩一区二区久久| 欧美日韩国产高清| 日本va欧美va精品发布| 99久久久久| 国产va在线视频| 欧美韩日一区| 麻豆国产91在线播放| 久久国产精品免费一区二区三区| 视频一区二区三区中文字幕| 欧美日韩日本国产亚洲在线 | 国产欧美一区二区三区米奇| 日韩美女国产精品| 日韩高清电影一区| 免费在线亚洲欧美| 日韩精品亚洲专区| 91精品视频一区二区| 国产伦一区二区三区| 美女性感视频久久| 在线中文字幕播放| 激情婷婷综合| 波多野结衣一区| 麻豆成人在线| 日韩欧美2区| 久久影院资源站| 国内精品麻豆美女在线播放视频| 国产成人精品999在线观看| 91视频久久| 欧美日韩国产综合网| 亚洲精一区二区三区| 日本a级不卡| 国产一区二区三区久久久久久久久| 国产一区二区三区四区五区| 久久要要av| 国产麻豆精品久久| 私拍精品福利视频在线一区| 韩国三级一区| 少妇精品久久久一区二区| 老司机精品视频网| 免费视频久久| 激情黄产视频在线免费观看| 国产亚洲一区在线| 国产极品模特精品一二| 欧美一级精品| 国产一区二区三区不卡视频网站| 久久不射网站| 亚洲免费福利| 国产精品对白久久久久粗| 久久天堂成人| 老鸭窝一区二区久久精品| 老司机久久99久久精品播放免费| 欧美亚洲福利| 欧美/亚洲一区| 97精品中文字幕| 97se亚洲| 日韩欧美中文字幕在线视频| 欧美一区二区性| 天堂√中文最新版在线| 国产精品一区三区在线观看| 美女精品在线观看| 国产综合色区在线观看| 老司机精品视频在线播放| 日韩专区欧美专区| 亚洲国产不卡| 亚洲成人一区| 久久久久中文| 91一区二区| 91亚洲自偷观看高清| 精品欠久久久中文字幕加勒比| 国产精品中文字幕制服诱惑| 美女久久一区| 亚洲免费福利| 久久精品一本| 精品国产18久久久久久二百| 国产精品magnet| 精品视频国产| 另类专区亚洲| 亚洲手机视频| 亚洲欧美日本日韩|