分布式day09_05-分布式Session解决方案

本文介绍如何通过配置Spring Session和Redis解决分布式环境下Session共享问题。详细步骤包括修改pom文件引入依赖,创建SessionConfig类配置Redis连接,以及创建SessionInitializer进行初始化。

 

修改pom文件

<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> 
				<artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.47</version>
		</dependency>
		<!-- Testing Dependencies -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
		</dependency>

	</dependencies>

创建SessionConfig类

package com.itmayiedu.session;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//这个类用配置redis服务器的连接
//maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class SessionConfig {

	// 冒号后的值为没有配置文件时,制动装载的默认值
	@Value("${redis.hostname:localhost}")
	String HostName;
	@Value("${redis.port:6379}")
	int Port;
	@Value("${redis.password}")
	String password;

	@Bean
	public JedisConnectionFactory connectionFactory() {
		JedisConnectionFactory connection = new JedisConnectionFactory();
		connection.setPort(Port);
		connection.setHostName(HostName);
		connection.setPassword(password);
		return connection;
	}
}

创建SessionInitializer

package com.itmayiedu.session;

import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;

//初始化Session配置
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer {
	public SessionInitializer() {
		super(SessionConfig.class);
	}
}

 重启项目就可以,启动8081和8082

 

 

 

这样就解决了分布式session的问题了

 

WITH online_orders AS ( SELECT main.order_id, DATE_FORMAT(main.create_time, 'yyyy-MM-dd') AS dt FROM lods.lods_smartxma_workorder_wo_order_base main -- 定义主表别名 WHERE DATE(main.create_time) >= DATE_SUB(CURRENT_DATE(), 30) AND main.order_status != 1 AND EXISTS ( SELECT 1 FROM lods.lods_smartxma_workorder_wo_order_ext ext WHERE ext.order_id = main.order_id -- 使用已定义的别名 AND ext.tenant_id = main.tenant_id -- 增加租户关联 AND ext.item_value = 'En línea' AND DATE(ext.create_time) >= DATE_SUB(CURRENT_DATE(), 30) ) ) SELECT dt AS `日期`, COUNT(order_id) AS `在线提单量` FROM online_orders GROUP BY dt ORDER BY dt DESC; WITH filtered_sessions AS ( SELECT t1.session_id AS xma_session_id, t1.create_time AS xma_begin_time, k.app_code, CASE t2.distribute_status WHEN '1' THEN '正式分配客服' ELSE NULL END AS distribute_status FROM lods.lods_smartxma_chat_chat_session t1 INNER JOIN lods.lods_smartxma_im_chat_im_chat_session t2 ON t2.session_id = t1.session_id AND t2.is_deleted = '0' LEFT JOIN lods.lods_smartxma_basic_basic_customer_identity k ON k.customer_id = t1.customer_id WHERE DATE(t1.create_time) >= DATE_SUB(CURRENT_DATE(), 3) AND t2.distribute_status = '1' AND k.app_code = 'pulsar' ) SELECT DATE(xma_begin_time) AS date, app_code, COUNT(DISTINCT xma_session_id) AS `在线有效会话量` FROM filtered_sessions WHERE DATE(xma_begin_time) >= DATE_SUB(CURRENT_DATE, 3) GROUP BY DATE(xma_begin_time), app_code ORDER BY date DESC; 如果我想计算在线工单提单量sql 怎么改
最新发布
11-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值