liusheng
9 天以前 34f78281cf395a24e1f3f1c3b861186ff8a03b7b
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
package com.ruoyi.message.config;
 
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertyName;
import org.springframework.boot.context.properties.source.ConfigurationPropertySources;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.core.io.ClassPathResource;
 
import java.util.List;
 
/**
 * 配置绑定校验程序(不依赖 JUnit,可直接用模块的运行时 classpath 执行)。
 * <p>
 * 存在的意义:把散落的 {@code @Value} 改成 {@code @ConfigurationProperties} 后,
 * 前缀/层级写错<b>编译期发现不了</b>,只会在线上发短信时表现为参数为 null。
 * 本程序用「真实的扁平 yml」跑一次绑定,把这些 key 锁住。
 * <p>
 * 执行方式见 {@code ruoyi-message/README-配置绑定校验.md}。
 */
public final class MessagePropertiesBindingCheck {
 
    private static int failed = 0;
 
    private MessagePropertiesBindingCheck() {
    }
 
    public static void main(String[] args) throws Exception {
        StandardEnvironment environment = new StandardEnvironment();
        // 去掉 systemProperties / systemEnvironment:Windows 下它们的名字是大写驼峰(如 XHSMSPATH),
        // ConfigurationPropertyName 不接受大写,会干扰绑定诊断。生产用 SpringApplication 时名字会被归一化。
        environment.getPropertySources()
                .remove(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME);
        environment.getPropertySources()
                .remove(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME);
        List<PropertySource<?>> sources = new YamlPropertySourceLoader()
                .load("message-binding-check.yml", new ClassPathResource("message-binding-check.yml"));
        environment.getPropertySources().addLast(sources.get(0));
 
        Binder binder = new Binder(ConfigurationPropertySources.get(environment));
        RootMessageProperties root = binder
                .bind(ConfigurationPropertyName.EMPTY, Bindable.of(RootMessageProperties.class))
                .orElseGet(RootMessageProperties::new);
        MessageProperties properties = new MessageProperties(root);
 
        // ---- 新华短信网关 ----
        check("xhsmsPath", "http://192.16.4.220:8092/sendSms", properties.getSms().getXhsms().getPath());
        check("xhsmsAccount", "911124", properties.getSms().getXhsms().getAccount());
        check("xhsmsPwd", "zW5eXe", properties.getSms().getXhsms().getPwd());
        check("xhsmsjrm", "1069055", properties.getSms().getXhsms().getExtno());
 
        // ---- 南华附一 MT(用户特别指出的那批配置)----
        check("sms_accountName", "S200232", properties.getSms().getMt().getAccountName());
        check("sms_password", "lD94Yo", properties.getSms().getMt().getPassword());
        check("sms_url", "http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send", properties.getSms().getMt().getUrl());
        check("sms_sourceAddr", "1069100020341", properties.getSms().getMt().getSourceAddr());
        check("sms_serviceCode", "PUSH", properties.getSms().getMt().getServiceCode());
        check("sms_appkey", "ak-BFq4NN0TMf92J7KAioNYGz74", properties.getSms().getMt().getAppkey());
        check("sms_flag", "【南华大学附属第一医院】", properties.getSms().getMt().getFlag());
 
        // ---- 阿里云 ----
        check("accessKeyId", "LTAI5tTestKeyId", properties.getSms().getAliyun().getAccessKeyId());
        check("accessKeySecret", "testSecret", properties.getSms().getAliyun().getAccessKeySecret());
        check("signName", "杭州利湖科技", properties.getSms().getAliyun().getSignName());
 
        // ---- 新增项应回落到默认值 ----
        check("message.sms.shiyi.ws-url 默认值", "http://192.178.0.104:7790/MediInfoHis.svc",
                properties.getSms().getShiyi().getWsUrl());
        check("message.sms.messaging-insert.ws-url 默认值", "http://218.108.11.29:8081/MessagingInsert.asmx",
                properties.getSms().getMessagingInsert().getWsUrl());
        check("message.wechat.shiyi.url 默认值", "http://192.200.54.14:5003/sfjk/SendMessage",
                properties.getWechat().getShiyi().getUrl());
        check("message.wechat.xinhua.service 默认值", "smarthos.pat.notice",
                properties.getWechat().getXinhua().getService());
 
        System.out.println();
        if (failed == 0) {
            System.out.println("===== 配置绑定校验全部通过 =====");
        } else {
            System.out.println("===== 配置绑定校验失败 " + failed + " 项 =====");
            System.exit(1);
        }
    }
 
    private static void check(String key, String expected, String actual) {
        boolean ok = expected == null ? actual == null : expected.equals(actual);
        if (!ok) {
            failed++;
        }
        System.out.println((ok ? "[OK]   " : "[FAIL] ") + key
                + "  期望=" + expected + "  实际=" + actual);
    }
}