• 使用Java类加载SpringBoot、SpringCloud配置文件


    我们都知道平常在使用SpringBoot和SpringCloud的时候,如果需要加载一两个配置文件的话我们通常使用@Value("${属性名称}")注解去加载。但是如果配置文件属性特别多的时候使用这种方式就显得特别的不友好了。

    比如说,我们要加载下方这个名为application.yml的配置文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20


    kafka:
    brokerAddress: 110.35.113.62:9092,123.27.143.72:9095,180.17.133.52:9096

    smsTopic: testTopic
    smsCosumeGroup: testTopicGroup

    timerTaskTopic: timerTopic
    timerTaskGroup: timerGroup

    jvmNumbers: 3



    security:
    authentication:
    jwt:
    secret: 0550224055e1848081dba46d8ad325f503fa141b
    tokenValidityInSeconds: 86400

    此时我们有两种方式来简化这个加载方式

    1

    这种方式呢,是同过层层嵌套的方式一层一层的按照配置文件属性的方式来进行注入的。大家只要把这个类跟上方提供的配置文件进行对比就会明白它的方式了。(注意,下方的所有属性因为篇幅问题没有增加get、set方法,实际使用过程中请自行添加)

    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
    @ConfigurationProperties(prefix = "application", ignoreUnknownFields = false)
    public class ApplicationProperties1 {

    private final Security security = new Security();

    private final Kafka kafka = new Kafka();

    public static class Kafka {
    private String brokerAddress;
    private String smsTopic;
    private String smsCosumeGroup;
    private String timerTaskTopic;
    private String timerTaskGroup;
    private String jvmNumbers;
    }

    public static class Security {

    private final Authentication authentication = new Authentication();

    public static class Authentication {

    private final Jwt jwt = new Jwt();

    public static class Jwt {

    private String secret;

    private long tokenValidityInSeconds;

    }
    }
    }

    }

    2

    这种方式就是以指定的配置前缀为依据去取配置(同上没有写get、set方法)

    例如:kafka的配置可以这样来

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Configuration
    @ConfigurationProperties(prefix = "kafka",ignoreUnknownFields = false)
    @PropertySource(value = { "classpath:application.yml" },ignoreResourceNotFound=false)
    public class ApplicationProperties {

    private String brokerAddress;
    private String smsTopic;
    private String smsCosumeGroup;
    private String timerTaskTopic;
    private String timerTaskGroup;
    private String jvmNumbers;
    }

    而Security的配置这样来

    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Configuration
    @ConfigurationProperties(prefix = "security.authentication.jwt",ignoreUnknownFields = false)
    @PropertySource(value = { "classpath:application.yml" },ignoreResourceNotFound=false)
    public class ApplicationProperties {

    private String secret;

    private long tokenValidityInSeconds;
    }

    补充

    大家可能会注意到我上方的几个类中都没有写get和set方法,因为那个东西其实所占的篇幅实在是太长了。那么,有什么办法可以补救么,其实是有办法的,一个注解就可以全搞定哟。

    什么?你不信,不信来看看呀:IDEA中使用lombok插件

    结语

    怎么样,学会这个以后Leader还会担心你的代码臃肿么。

    本文出自http://zhixiang.org.cn,转载请保留。

  • 相关阅读:
    《三体》推荐
    低调做人,高调做事
    注意力的培养是学校教学的真正目的
    【RTP.NET入门系列 一】接收第一个RTP包。
    MapX开发日记(三)GPS项目终于有了眉头
    【RTP.NET入门系列 二】接收第一个RTP帧。
    10.04 flash 乱码 问题
    10.04 中文输入发问题。
    通过值类型进行Timer类的线程的同步。
    关于ManualResetEvent信号机制。
  • 原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9490894.html
Copyright © 2020-2023  润新知