时间:2021-05-19
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 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配置,这就是重复工作了。这时候就出现了“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:实现具体自动装配逻辑处理。
2、添加 autoconfig 项目中的pom文件如下:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ponent@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】下的所有类
因此我们照葫芦画瓢【在starter下创建META-INF 再创建spring.factories】
让后在maven里面先后 autoconfig -> starter install一下。
9、demo使用自定义starter
1、在demo项目中加入自定义starter的依赖
2、最后就可以直接在项目中注入使用redis。
【pom里面可以看到我们没有加任何redis依赖的只加了自定义的starter】
3、配置redis连接信息即可操作 - 对应 RedisProperties 属性。
10、全剧终
最后我们就可以慢慢完善自己的starter做到以后直接使用自己的redis封装一些常用的操作。
到此这篇关于springboot自定义redis-starter的实现的文章就介绍到这了,更多相关springboot自定义redis-starter内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言:前面已经介绍了自动配置的很多原理,现在我们着手自己定义一个starter。需求:自定义redis-starter,要求当导入redis坐标后,Spring
1、Mybatis自定义配置的分析在我们自定义starter之前我们写了解一下Mybatis是如何实现starter在SpringBoot引入的依赖如下:org
目录一、使用SpringInitializr创建项目web项目二、测试SpringBoot整合Redis是否成功三、自定义RedisCacheManager最近
这篇文章主要介绍了springboot自定义starter实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
SpringBoot如何实现自定义配置文件提示我们在使用SpringBoot开发项目时,常常需要编写一些属性配置类,用来完成自定义或特定的属性配置。在我们配置a