用java写一个轮询规则

文章讨论了如何在Spring中管理一个包含final字段的对象,特别是当这个字段需要在初始化时设置且不允许后续修改时。通过构造器注入,如示例中的PollingRule类,利用ShopConfigbean来设定finalList变量servers。同时提到了可以静态配置或从数据库获取数据的方法。
摘要由CSDN通过智能技术生成

创建一个对象,用List还是map都可以,

把这个实体作为Bean,交给spring管理,可以保证全局唯一。 

仔细观察可以发现,这个里servers成员变量是final,这里就要细说一下了,把实体作为bean注入的话,spring会根据你已有的构造参数来初始化变量。没有则是无参构造。如果是final修饰的话,我们无法调用set方法,只能在构造参数中注入。

那么怎么注入呢??

用其他的bean注入(spring中有的bean),提供一个方法,如图shopConfig对象,这个接口可以把数据写死,写死的话直接在实体构造方法写死就可以了(注入其他bean没有意义),也可以连接数据库查询数据

@Component
public class PollingRule {
    private final List<String> servers;
    private int currentIndex;

    public PollingRule(ShopConfig shopConfig) {
        this.servers = shopConfig.getServiceList();
        this.currentIndex = 0;
    }

    public synchronized String getNextServer() {
        String server = servers.get(currentIndex);
        currentIndex = (currentIndex + 1) % servers.size();
        return server;
    }
}

使用的话就非常简单了

    @Resource
    private PollingRule pollingRule;

直接注入就可以了,在具体业务中调用轮询规则getNextServer()

        String nextServer = pollingRule.getNextServer();
        log.info("userId,{},{}", userId, nextServer);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郎伟学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值