【问题标题】:Spring boot unable to connect redis client Jedis to pool: Connection refusedSpring Boot 无法将 Redis 客户端 Jedis 连接到池:连接被拒绝
【发布时间】:2019-04-04 00:03:23
【问题描述】:

我是 Spring Boot 开发的新手,我只想为 Admin 用户启用 Session。我正在编写一个 REST 无状态 (API) 和一个有状态服务,并且我正在学习使用 redis 内存数据库存储用户会话的教程。我已经在使用 MySQL/JDBC 来存储其他数据。使用redis和jdbc不冲突?

为了启用用户会话,我做了以下操作:

这些是我最近添加的依赖:

   <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <version>2.1.0.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session -->
    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session</artifactId>
        <version>1.3.3.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.6.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>

创建 Jedis 连接工厂:

@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory();
    }
}

以及安全的http 配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("admin").password("password").roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .httpBasic().and()
                .authorizeRequests()
                .antMatchers("/").hasRole("ADMIN")
                .anyRequest().authenticated();
    }
}

我还在application.properties中添加了redis连接主机名和端口:

# ===============================
# = REDIS
# ===============================
spring.redis.host=localhost
spring.redis.port=6379

但是,当我运行应用程序时,会抛出以下错误:

Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at redis.clients.jedis.Connection.connect(Connection.java:184)
    ... 35 common frames omitted

我已尝试将localhost 更改为192.168.1.2(我的PC 的本地IP),尝试更改端口但仍然拒绝连接。

这是堆栈跟踪的第一行:

[restartedMain] ERROR o.s.boot.SpringApplication - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

我不知道我还能做什么。我正在安装防病毒软件 (Windows)。我应该禁用它吗?我应该禁用防火墙吗?我应该扫描端口以查看打开了哪些端口?

编辑: 我已经尝试使用 redis 独立配置来传递主机名和端口,但仍然无法连接:

public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("127.0.0.1", 6379);
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }
}

【问题讨论】:

    标签: spring-boot redis jedis connection-refused


    【解决方案1】:

    如果是本地主机。试试 127.0.0.1:****

    有时使用 ip (192.168.x.x) 会报错...

    # ===============================
    # = REDIS
    # ===============================
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    

    【讨论】:

    • 无论如何,我不得不使用谷歌翻译来翻译你的信息。我尝试使用该 IP 127.0.0.1 进行连接,但仍然无法连接。我已经编辑了我的消息。
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2018-05-15
    • 2019-10-19
    • 1970-01-01
    • 2019-02-04
    • 2020-02-29
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多