spring-boot-将所有自动连接的配置变量放在一个类中

gwo2fgha  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(386)

我正在SpringBoot中开发一个微服务,我有一个公共配置类,其中存储了从application.properties文件获得的所有配置变量。它看起来像这样:
配置.java

package programming

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonConfiguration {

    @Value("${user-pool.id}")
    private String userPoolId;

    @Value("${client.id}")
    private String clientId;
    ...
    ...
    ...
}

然后,每当我在其他类中需要这些变量时,我都会自动连接config.java类,并像这样使用它:

@Autowired
private Config config;

public void method1() {
    ...
    String key = items.get(config.getClientId()).toString();
}

在spring boot中,使用一个公共配置类来存储所有的自动连接变量,并在需要时在其他类中使用这些变量,这是一个好的做法吗?如果不是,那最好的办法是什么?任何帮助都将不胜感激。谢谢您!

9rbhqvlz

9rbhqvlz1#

在spring boot中,使用一个公共配置类来存储所有的自动连接变量,并在需要时在其他类中使用这些变量,这是一个好的做法吗?如果不是,那最好的办法是什么?任何帮助都将不胜感激。
我的回答是:绝对不!
您为所有需要配置的类引入了一个真正的类依赖关系。有了它,您实际上正在反转spring提供的配置注入。
关键是能够直接在目标类的字段中只注入所需的特定配置部分(例如,通过使用@value(“${foo.bar}”私有字符串foobar;))
因此,您还禁用了特定功能的使用(例如,在不同的类中使用@profile的不同配置文件),我确信还有更多的示例表明您实际上限制了灵活性。
我看不出你的方法有什么好处——你不妨解释一下为什么你需要:)

kmbjn2e3

kmbjn2e32#

更好的办法是这样做

@ConfigurationProperties(prefix = "optional.key")
Public class MyProperties{
    Int example;
    String example2;
    Getters/setters
}

在application.properties中,现在可以键入

optional.key.example=5

你可以在任何你需要的地方使用我的汽车
编辑将以下依赖项添加到maven也很好,它会生成一个helper文件,以便您的想法能够识别已定义的属性

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
</dependency>

除了在评论中重播这个问题之外,你可以把前缀留空,只需要用@configurationproperties注解你的类如果你不想有一个通用键子键可以很容易地用子类处理我将在这里发布我的一个项目的例子

@ConfigurationProperties(prefix = "swagger")
public class SpringFoxProperties {
    private Info info = new Info();
    private Config config = new Config();

    public Info getInfo() {
        return info;
    }

    public void setInfo(Info info) {
        this.info = info;
    }

    public Config getConfig(){
        return config;
    }

    public void setConfig(Config config) {
        this.config = config;
    }

    public static class Config {
        private String paths = "";
        private String documentationType = "openApi";

        public String getPaths() {
            return paths;
        }

        public void setPaths(String paths) {
            this.paths = paths;
        }

        public String getDocumentationType() {
            return documentationType;
        }

        public void setDocumentationType(String documentationType) {
            this.documentationType = documentationType;
        }
    }

    public static class Info {
        private String title = "";
        private String description = "";
        private String version = "";
        private String termsOfServiceUrl = "";
        private Contact contact = new Contact();
        private License license = new License();

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getVersion() {
            return version;
        }

        public void setVersion(String version) {
            this.version = version;
        }

        public String getTermsOfServiceUrl() {
            return termsOfServiceUrl;
        }

        public void setTermsOfServiceUrl(String termsOfServiceUrl) {
            this.termsOfServiceUrl = termsOfServiceUrl;
        }

        public Contact getContact() {
            return contact;
        }

        public void setContact(Contact contact) {
            this.contact = contact;
        }

        public License getLicense() {
            return license;
        }

        public void setLicense(License license) {
            this.license = license;
        }

        public static class Contact {
            private String name  = "";
            private String url  = "";
            private String email  = "";

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getUrl() {
                return url;
            }

            public void setUrl(String url) {
                this.url = url;
            }

            public String getEmail() {
                return email;
            }

            public void setEmail(String email) {
                this.email = email;
            }
        }

        public static class License {
            private String name  = "";
            private String url  = "";

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public String getUrl() {
                return url;
            }

            public void setUrl(String url) {
                this.url = url;
            }
        }
    }
}

示例应用程序.yml

swagger:
  info:
    title: title
    description: description
    version: version
    termsOfServiceUrl: termsOfServiceUrl
    contact:
      name: name
      url: url
      email: email
    license:
      name: name
      url: url
  config:
    paths: /api/.*
    documentation-type: swagger

相关问题