web项目 获取nacos配置java 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
1.主动监听nacos配置类import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
 
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
 
/**
 * 主动监听nacos配置类
 *
 * @param <T>
 */
public abstract class NacosAbstractListener<T> implements InitializingBean, Listener {
 
    protected final Logger logger = LoggerFactory.getLogger(getClass());
 
    protected final String clazzSimpleName = getClass().getSimpleName();
 
    @Autowired
    private NacosConfigManager nacosConfigManager;
 
    protected T data;
 
    public T getData() {
        return data;
    }
 
    private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
            2, 4, 1, TimeUnit.SECONDS, new LinkedBlockingDeque<>(100),
            new ThreadPoolExecutor.CallerRunsPolicy()
    );
 
    /**
     * 监听-工作线程池
     *
     * @return
     */
    @Override
    public Executor getExecutor() {
        return threadPoolExecutor;
    }
 
    /**
     * 接受到Nacos 具体 配置信息变动
     *
     * @param configInfo
     */
    @Override
    public void receiveConfigInfo(String configInfo) {
        logger.info("{}#receiveConfigInfo receive configInfo. configInfo={}", clazzSimpleName, configInfo);
        compile(configInfo);
    }
 
    @Override
    public void afterPropertiesSet() throws Exception {
        ConfigService configService = nacosConfigManager.getConfigService();
        logger.info("configService : {}", configService);
        String configInfo = configService.getConfig(getDataId(), getGroupId(), getTimeout());
        logger.info("{}#afterPropertiesSet init configInfo. configInfo={}", clazzSimpleName, configInfo);
        compile(configInfo);
        configService.addListener(getDataId(), getGroupId(), this);
    }
 
    /**
     * 获取nacos dataId
     *
     * @return nacos dataId
     */
    protected abstract String getDataId();
 
    /**
     * 获取nacos groupId
     *
     * @return nacos groupId
     */
    protected String getGroupId() {
        return "DEFAULT_GROUP";
    }
 
    /**
     * 获取nacos 超时时间
     *
     * @return nacos 超时时间
     */
    protected long getTimeout() {
        return 3000L;
    }
 
    /**
     * 将输入转为数据
     *
     * @param dataStr
     */
    protected abstract void compile(String dataStr);
 
}

  2.获取值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
mport cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.casc.dcs.xbom.common.entity.vo.workshop.ExtWorkshopConfigVO;
import com.casc.dcs.xbom.core.util.ExceptionUtil;
import org.springframework.stereotype.Component;
 
import java.util.ArrayList;
import java.util.List;
 
@Component
public class NacosWorkshopConfigJsonListener extends NacosAbstractListener<List<ExtWorkshopConfigVO>> {
 
    @Override
    protected String getDataId() {
        return "workshop-config";
    }
 
    /**
     * 获取nacos groupId
     *
     * @return nacos groupId
     */
    @Override
    protected String getGroupId() {
        return "BUSINESS_GROUP";
    }
 
    @Override
    protected void compile(String dataStr) {
        data = JSON.parseObject(dataStr, new TypeReference<ArrayList<ExtWorkshopConfigVO>>(){});
    }
 
    public List<ExtWorkshopConfigVO> getConfig() {
        List<ExtWorkshopConfigVO> workshopList = getData();
        if (CollectionUtil.isEmpty(workshopList)) {
            ExceptionUtil.newDxBusinessUnknowException("请确认配置中心workshop-config");
        }
        return workshopList;
    }
 
}

  3.创建实体

1
2
3
4
5
6
7
8
9
10
11
12
13
import lombok.Data;
import lombok.ToString;
 
@Data
@ToString(callSuper = true)
public class ExtWorkshopConfigVO {
 
    private String orgCode;  //组织代码
 
    private String orgName; //组织名称
 
 
}

  4.yml文件workshop-config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[
    {
        "orgCode": "T01_01",
        "orgName": "T01"
    },
    {
        "orgCode": "T02_01",
        "orgName": "T02"
    }, 
    {
        "orgCode": "T03_01",
        "orgName": "T03"
    }, 
    {
        "orgCode": "T04_01",
        "orgName": "T04"
    }, 
    {
        "orgCode": "T05_01",
        "orgName": "T05"
    }, 
    {
        "orgCode": "T06_01",
        "orgName": "T06"
    }, 
    {
        "orgCode": "T07_01",
        "orgName": "T07"
    }, 
    {
        "orgCode": "T08_01",
        "orgName": "T08"
    }
     
]

  5.其他地方使用

List<ExtWorkshopConfigVO> config = nacosWorkshopConfigJsonListener.getConfig();

posted on   AnkangWenqiang  阅读(142)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示