小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

spring boot整合redis中间件与热部署实现

# Spring Boot,redis,spring boot,中间件 额外说明

收录于:17天前

热部署

每次写完程序后都需要重启服务器,需要大量的时间,spring boot提供了一款工具devtools帮助实现热部署。

		
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional> <!-- 可选 -->
 </dependency>

在这里插入图片描述

导入插件后,每次点击---->Build----->构建项目即可,比重启要快很多。

Redis

spring boot整合redis最常用的有三个工具库Jedis,Redisson,Lettuce

它们的共同点:都提供基于Redis操作的Java API,但封装程度和具体实现略有不同。

不同之处:

  1. Jedis是 Redis 的 Java 实现的客户端。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。
    特点:使用阻塞的 I/O,方法调用同步,程序流需要等到 socket 处理完 I/O 才能执行,不支持异步操作。Jedis 客户端实例不是线程安全的,需要通过连接池来使用 Jedis。

  2. Redisson
    优点点:分布式锁,分布式集合,可通过 Redis 支持延迟队列。

  3. Lettuce
    用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
    基于 Netty 框架的事件驱动的通信层,其方法调用是异步的。Lettuce 的 API 是线程安全的,所以可以操作单个 Lettuce 连接来完成各种操作。

Jedis
  • 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
</dependency>

  • 配置文件

# Redis服务器地址
spring.data.redis.host=192.168.223.128
# Redis服务器连接端口
spring.data.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.data.redis.password=root

请注意,使用 spring.data.redis 而不是 spring.redis,后者已被丢弃。

通过jedis连接redis:

import redis.clients.jedis.Jedis;

public class RedisConect {
    

    public static void main(String[] args) {
    
        Jedis jedis = new Jedis("192.168.223.128",6379);
        //配置连接密码
        jedis.auth("root");
        String csvfile = jedis.get("csvfile");
        System.out.println(csvfile);
        jedis.close();
    }
}

Spring boot加入jedis连接redis:

//装配参数
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "spring.data.redis")
@Data
public class RedisConfig {
    
    private String host;
    private int port;
    private String password;
}


//创建jedis
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

@Service
public class JedisService {
    
    @Autowired RedisConfig redisConfig;



    public Jedis defaultJedis(){
    
        Jedis jedis = new Jedis(redisConfig.getHost(),redisConfig.getPort());
        jedis.auth(redisConfig.getPassword());
        return jedis;
    }
}


//测试
    @Test
    void One(){
    
        jedisService.defaultJedis().set("one","word");
        String one = jedisService.defaultJedis().get("one");
        System.out.println(one);
    }

在这里插入图片描述

RedisTemplate

装配参数除了上面@ConfigurationProperties的方法还有PropertySource方法:


@Configuration
@PropertySource("classpath:redis.properties")
public class RedisConfig {
    
 
    @Value("${redis.hostName}")
    private String hostName;
 
    @Value("${redis.password}")
    private String password;
 
    @Value("${redis.port}")

}

RedisTemplate是spring自带的模板,需要配置一些参数:

package com.example.JedsFactory;

import com.example.RedisConfig.RedisConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;

@Configuration
@PropertySource("classpath:redis.properties")
public class JedisFactory {
    

        @Value("${spring.data.redis.host}")
        private String host;

        @Value("${spring.data.redis.password}")
        private String password;

        @Value("${spring.data.redis.port}")
        private Integer port;

        @Bean
        public JedisConnectionFactory JedisConnectionFactory(){
    
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration ();
            redisStandaloneConfiguration.setHostName(host);
            redisStandaloneConfiguration.setPort(port);
            redisStandaloneConfiguration.setPassword(password);
            JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
            JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,
                    jedisClientConfiguration.build());
            return factory;
        }

        @Bean
        public RedisTemplate makeRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
    
            RedisTemplate redisTemplate = new RedisTemplate();
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            return redisTemplate;
        }


}

//redis.properties

# Redis服务器地址
spring.data.redis.host=192.168.223.128
# Redis服务器连接端口
spring.data.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.data.redis.password=root

测试:

    @Test
    void two(){
    
        redisTemplate.opsForValue().set("two","hello");
        String two =(String) redisTemplate.opsForValue().get("two");
        System.out.println(two);
    }

在这里插入图片描述

Caused by: java.lang.NoClassDefFoundError: redis/clients/util/Pool

如果报错,比如标题中的错误说明jedis版本太高,有冲突,降低jedis版本即可。

在这里插入图片描述

jedis从3.0.1版本降级到2.9.1版本。

Caused by: java.lang.NumberFormatException: For input string: “port”

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "port"
	at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:79) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1339) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.24.jar:5.3.24]
	... 88 common frames omitted
Caused by: java.lang.NumberFormatException: For input string: "port"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_181]
	at java.lang.Integer.parseInt(Integer.java:580) ~[na:1.8.0_181]
	at java.lang.Integer.valueOf(Integer.java:766) ~[na:1.8.0_181]
	at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:211) ~[spring-core-5.3.24.jar:5.3.24]
	at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) ~[spring-beans-5.3.24.jar:5.3.24]
	at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) ~[spring-beans-5.3.24.jar:5.3.24]

在这里插入图片描述
连接redis时出现这个错误原因是:

Alt

端口属性不能以 int 形式接收,应更改为 Integer。

引起原因:java.lang.NumberFormatException:对于输入字符串:“port”

. . .

相关推荐

额外说明

将配置同步到nacos

            在目录 E:\java_work\study\seata\script\config-center\nacos  下右键 Git Bash  Here,输上 sh nacos-config.sh,将配置上传nacos  

额外说明

同步

rsync 1. rsync简介 rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。 2. rsync特性 rsync支持很多特性: 可以镜像保存整

额外说明

C# 45. ref 和 out 的区别

当调用带有参数的方法时,您需要向方法传递参数。在 C# 中,有三种向方法传递参数的方式: 1. ref和out都是C#中的关键字,对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别。 2. ref类似于C++中的指针,对其指向的变量可读

额外说明

vscode如何设置默认打开的浏览器为Chrome(vscode设置默认打开的浏览器为Chrome为什么不还是用其他浏览器打开)

vscode如何设置默认打开的浏览器为Chrome vscode如何设置默认打开的浏览器为Chrome 安装下载配置插件 一起加油! vscode如何设置默认打开的浏览器为Chrome 在使用vscode编辑器的时候,如果我们不设置默认浏览器,那么直接打

额外说明

【Windows操作系统】Windows10升级时报VirtualBox错误导致升级失败

【背景】 明明已经卸载了VirtualBox,但是Win10升级时依然报错:VirtualBox阻止升级导致升级失败。 【分析】 说明电脑中存在VirtualBox残余,但是这些参与虽然能被升级程序检测到却不能在卸载VirtualBox时自动关联删除,需

额外说明

OAuth2.0 - 简化模式、密码模式、客户端模式讲解

一、OAuth2.0 在上篇文章中我们已经对OAuth2.0 做了讲解,以及授权码模式的认证过程,并且搭建了简单的认证服务和资源服务,由于上篇文章中我们只对授权码模式这一种认证登录模式做了讲解,本篇文章对简化模式、密码模式、客户端模式这三种模式进行下演示

额外说明

Js获取当前星期几

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获取当前星期</title> </head> <body> <script type="text

额外说明

蓝桥杯第九届真题 缩位求和【省赛】【C组】

在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。 比如:248 * 15 = 3720把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得 2 + 4 + 8 = 14 ==> 1 + 4 = 5; 1 + 5 =

额外说明

static、fianl、this、super的使用

Java中static、fianl、this、super的使用 一、关于static的使用 (1)使用对象:变量与方法 (2)作用:在创建对象之前被访问 (3)性质:全局变量 (4)限制:使用static的方法只能调用static的方法和数据,不可使用t

额外说明

Greenplum【部署 01】CentOS Linux release 7.5 环境单机版详细安装配置步骤+问题解决(含安装包资源)

# 安装文件网盘连接 greenplum-db-6.13.0-rhel7-x86_64.rpm 链接:https://pan.baidu.com/s/1-Wep7oQ4GTQpwdr7Y7sOhw 提取码:emhd 1.查看环境 防火墙: 开了以后需

ads via 小工具