Пользовательский класс конфигурации, параметры чтения в Application.properties

Java
Пользовательский класс конфигурации, параметры чтения в Application.properties

Сцены

В процессе разработки нам может понадобиться указать некоторые фиксированные параметры или настроить некоторые другие сторонние параметры. Однако в более позднем приложении может потребоваться время от времени изменять содержимое. Снизить стоимость перераспределения проекта. Мы можем записать это содержимое непосредственно как конфигурацию вapplication.yml, удобно потом чинить, и заодно добавляется класс сущности, что удобно для чтения параметров конфигурации

практическое применение

1. Добавьте параметры конфигурации

Например, моя связь здесь Huawei.vcmМодуль, настроить часто используемые параметры снаружи

# 自定义配置 写在最外层,不要写在任意节点下面
face:
  huaweihost: https://172.19.59.241
  account: admin
  password: huawei@admin
  uploadhost: https://172.19.59.236:18444
  rootpath: E:\\FileUpload\\

2. Создайте класс сущности

в проектеconfigсоздать папкуHuaweiVCMConfigurationсвоего рода

// 这里根据你在配置类中最外层节点匹配查找`face`
@ConfigurationProperties(prefix = "face", ignoreUnknownFields = true)
public class HuaweiVCMConfiguration implements InitializingBean {

    private String huaweihost;

    private String account;

    private String password;

    private String uploadhost;

    private String rootpath;

    //错误检查  项目启动即可检查该配置内容是否读取到或者参数名称是否有错误
    @Override
    public void afterPropertiesSet() throws Exception {
        if (StringUtils.isBlank(getHuaweihost())) {
            throw new IllegalStateException("Property \"face.host\" cannot not be blank");
        }
        if (StringUtils.isBlank(getAccount())) {
            throw new IllegalStateException("Property \"face.account\" cannot not be blank");
        }
        if (StringUtils.isBlank(getPassword())) {
            throw new IllegalStateException("Property \"face.password\" cannot not be blank");
        }
        if (StringUtils.isBlank(getUploadhost())) {
            throw new IllegalStateException("Property \"face.uploadhost\" cannot not be blank");
        }
        if (StringUtils.isBlank(getRootpath())) {
            throw new IllegalStateException("Property \"face.rootpath\" cannot not be blank");
        }
    }

    public String getHuaweihost() {
        return huaweihost;
    }

    public void setHuaweihost(String huaweihost) {
        this.huaweihost = huaweihost;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getUploadhost() {
        return uploadhost;
    }

    public void setUploadhost(String uploadhost) {
        this.uploadhost = uploadhost;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRootpath() {
        return rootpath;
    }

    public void setRootpath(String rootpath) {
        this.rootpath = rootpath;
    }
}


3. Добавьте аннотации к классу запуска@EnableConfigurationProperties

Очень важно, если эту аннотацию не добавить, будет выдано сообщение об ошибке, если она единичная, то ее можно написать напрямую@EnableConfigurationProperties(HuaweiVCMConfiguration.class)

если более одного@EnableConfigurationProperties({HuaweiVCMConfiguration.class,HuaweiVCMConfiguration.class})

4. Чтение параметров (mainМетод не может быть прочитан, и служба должна быть запущена способом springboot)

    @Autowired
    private HuaweiVCMConfiguration config;
    
    
    public void test (){
        String host = config.getHuaweiHost();
    }

Пополнить

Некоторым может показаться, что писать так хлопотно, но код очень удобен в обслуживании, и код очень чистый.Конечно, вы можете напрямую использовать аннотации для чтения содержимого конфигурации, например

    @Value("${face.huaweihost}")
    private static final String host
    
    //这样可取 但是不可避免的会出现书写错误  代码优雅度也没有那么高 如果参数比较多