• Springboot2.x以上使用SpringSession进行redis共享session


            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>        
    RedisConfiguration
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    
    @Configuration
    public class RedisConfiguration {
        @Bean(name = "pool")
        protected JedisPool jedisPool(JedisPoolConfig jedisPoolConfig,
                                      @Value("${spring.redis.host}") String host,
                                      @Value("${spring.redis.port}") int port,
                                      @Value("${spring.redis.password}") String password,
                                      @Value("${spring.redis.database}") int database) {
            return new JedisPool(jedisPoolConfig, host, port, 15000, password, database);
        }
        
        @Bean
        public JedisPoolConfig jedisPoolConfig(@Value("${spring.redis.config.maxTotal}") int maxTotal,
                                               @Value("${spring.redis.config.maxIdle}") int maxIdle,
                                               @Value("${spring.redis.config.maxWaitMillis}") int maxWaitMillis) {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(maxTotal);
            config.setMaxIdle(maxIdle);
            config.setMaxWaitMillis(maxWaitMillis);
            config.setMinEvictableIdleTimeMillis(300000);
            config.setNumTestsPerEvictionRun(3);
            config.setTimeBetweenEvictionRunsMillis(60000);
            return config;
        }
    }
    SessionConfig
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
    import org.springframework.session.data.redis.config.ConfigureRedisAction;
    import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
    
    /**
     * @param
     * @Description:共享session
     * @Author:SimonHu
     * @Date: 2020/5/18 11:59
     * @return
     */
    @Configuration
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)//maxInactiveIntervalInSeconds设置session有效时间,单位是秒;默认是30分钟
    public class SessionConfig {
        @Value("${spring.redis.host}")
        private String hostName;
        @Value("${spring.redis.port}")
        private int port;
        @Value("${spring.redis.password}")
        private String password;
        @Value("${spring.redis.database}")
        private int database;
        
        @Bean
        public JedisConnectionFactory connectionFactory() {
            JedisConnectionFactory connectionFactory = new JedisConnectionFactory();
            connectionFactory.setPort(port);
            connectionFactory.setHostName(hostName);
            connectionFactory.setPassword(password);
            connectionFactory.setDatabase(database);
            System.out.println("获取到的hostName是:" + hostName + ",port :" + port);
            return connectionFactory;
        }
        
        /**
         * 解决redis集群环境没有开启Keyspace notifications导致的
         * <p>
         * Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource
         */
        @Bean
        public static ConfigureRedisAction configureRedisAction() {
            return ConfigureRedisAction.NO_OP;
        }
    }

     清除后需要重新登录。

     登录成功,redis上已经缓存了session,重启idea不用登录。

    原理分析参考:Spring系列.@EnableRedisHttpSession原理简析

  • 相关阅读:
    Aruduino un0 spi oled官方代码
    排序--之快速排序
    用arduino UNO R3板为pro mini板烧录bootloaders
    数码管显示
    gdb高级功能与配置
    ROS中调试c++程序
    自引用结构--之创建双向遍历的链表
    数据文件——将从键盘设备文件读取文本将其写入显示器设备文件
    数据文件——将文本写入显示器设备文件
    ifcfg-eth0
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/12916410.html
Copyright © 2020-2023  润新知