You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Hazelcast进行Spring-Session集群时,ViewScoped bean出现意外行为。

当使用Hazelcast进行Spring-Session集群时,可能会出现ViewScoped bean(视图作用域bean)的意外行为。这是因为Hazelcast默认将所有对象都序列化并存储在集群中,而视图作用域bean无法被序列化。

要解决这个问题,可以通过配置Hazelcast,将视图作用域bean排除在序列化之外。以下是一个示例代码,展示如何配置Hazelcast以解决此问题:

首先,在Spring Boot的配置文件application.properties中添加以下配置:

# 使用Hazelcast作为Spring-Session的集群方案
spring.session.store-type=hazelcast

# 配置Hazelcast的序列化
hazelcast.serialization.value.serializer=com.hazelcast.nio.serialization.PassthroughSerializer

然后,创建一个自定义的Hazelcast的序列化器,在其中排除视图作用域bean。例如,创建一个名为"PassThroughSerializer"的类:

import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.StreamSerializer;

import java.io.IOException;

public class PassthroughSerializer implements StreamSerializer<Object> {

    @Override
    public void write(ObjectDataOutput out, Object object) throws IOException {
        // 排除视图作用域bean的序列化
        if (!(object instanceof ViewScopedBean)) {
            out.writeObject(object);
        }
    }

    @Override
    public Object read(ObjectDataInput in) throws IOException {
        return in.readObject();
    }

    @Override
    public int getTypeId() {
        return 1;
    }

    @Override
    public void destroy() {
    }
}

最后,在Spring Boot的配置类中添加以下代码,将自定义的序列化器添加到Hazelcast的配置中:

import org.springframework.context.annotation.Configuration;
import org.springframework.session.hazelcast.config.annotation.web.http.EnableHazelcastHttpSession;
import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;

@Configuration
@EnableHazelcastHttpSession
public class HazelcastSessionConfig extends AbstractHttpSessionApplicationInitializer {

    public HazelcastSessionConfig() {
        super(HazelcastSessionConfig.class);
    }

    @Bean
    public Config hazelcastConfig() {
        Config config = new Config();
        config.getSerializationConfig().addSerializerConfig(
                new SerializerConfig().setTypeClass(Object.class).setImplementation(new PassthroughSerializer()));
        return config;
    }
}

通过以上配置,Hazelcast将不再尝试序列化视图作用域bean,并且可以正常使用Spring-Session集群

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

使用Hazelcast进行Spring-Session集群时,ViewScoped bean出现意外行为。-优选内容

Grafana监控看板搭建
if (credentials.sessionToken) { this.request.headers[constant.tokenHeader] = credentials.sessionToken; } if (this.request.body) { let enc = new TextEncoder(); let body = thi... { const vars = args["scopedVars"]; if (vars === void 0) { throw Error("invalid format"); } let instances = []; if (vars["InstanceId"]) { for (const inst of vars["InstanceId"]["value"]) {...
账号权限说明
VIEW ANY DATABASE VIEW SERVER STATE ALTER SERVER STATE Datebase 级别权限 CREATE TABLE CREATE VIEW CREATE PROCEDURE CREATE FUNCTION CREATE RULE CREATE DEFAULT CREATE TYPE CREATE ASSEMBLY ... SCOPED CONFIGURATION ALTER ANY DATASPACE ALTER ANY EXTERNAL DATA SOURCE ALTER ANY EXTERNAL FILE FORMAT ALTER ANY MESSAGE TYPE ALTER ANY CONTRACT ALTER ANY SERVICE ALTER ANY REMOTE SERVICE BIN...

使用Hazelcast进行Spring-Session集群时,ViewScoped bean出现意外行为。-相关内容

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询