Spring boot не может подключить Redis-клиент Jedis к пулу: соединение отказано - PullRequest
0 голосов
/ 31 октября 2018

Я новичок в разработке загрузки Spring, и все, что я хочу, это включить сеанс для пользователя-администратора. Я пишу REST без сохранения состояния (API) и службу с сохранением состояния, и я следую учебному пособию, которое использует redis in-memory-database для хранения пользовательских сессий. Я уже использую 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();
    }
}

Я также добавил имя хоста и порт подключения Redis в application.properties:

# ===============================
# = 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 (локальный 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);
    }
}

1 Ответ

0 голосов
/ 31 октября 2018

Если это localhost. Попробуй с 127.0.0.1:****

Иногда использование ip (192.168.x.x) может привести к ошибкам ...

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