美文网首页
springboot yaml配置文件---不同类型数据的写法

springboot yaml配置文件---不同类型数据的写法

作者: 金1746 | 来源:发表于2018-12-06 21:17 被阅读0次

    一、yaml中的不同类型数据的写法

    支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所有配置。

    1.字符串数字:

    # 报文版本号,固定5.1.0,请勿改动
    
    version: '5.1.0'
    
    # 签名方式,证书方式固定01,请勿改动
    
    signMethod: '01'
    

    2.单个数组:(以- 开头的,就是代表着数组)

    方式一:

    card-expire-notify:
    
      templateIds: [95,96,97,98,99,100]
    

    方式二:

    card-expire-notify:
    
      templateIds:
    
       - 95
    
       - 96
    
       - 97
    
       - 98
    
       - 99
    
       - 100
    

    读取方法:

    @Configuration
    
    @ConfigurationProperties(prefix = "card-expire-notify")
    
    @Data
    
    public class NotifyConfig {
    
        private String getActivityCardUrl;
    
        private String wechatTemplateId;
    
        private String accessToken;
    
       ** private List<Long> templateIds;**
    
    }
    

    注意:yaml中的数组,map,list 只能用对象去接收,不能用@Value直接注入,需要通过配置类去接收

    image.png

    对象数组:

    umsPay:
    
      msgSrc: ccccccc
    
      msgSrcId: 6788
    
      businessTypes:
    
        - type: qrCode
    
          instMid: yuiuiyiuiy
    
          msgType: bills.getQRCode
    
          payUrl:
    
          notifyUrl: ${server.host}ums/v0/api/qr-code/call-back
    
          returnUrl:
    
        - type: h5AliPay
    
          instMid: yiyuiyi
    
          msgType: trade.h5Pay
    
          payUrl: ${umsPay.ums-host}netpay-portal/webpay/pay.do
    
          notifyUrl: ${server.host}ums/v0/api/wap/call-back
    
          returnUrl: ${server.host}pay/success/
    
        - type: wxPublic
    
          instMid: tyfthhfh
    
          msgType: WXPay.jsPay
    
          payUrl: ${umsPay.ums-host}netpay-portal/webpay/pay.do
    
          notifyUrl: ${server.host}ums/v0/api/wap/call-back
    
          returnUrl: ${server.host}pay/success/
    

    读取方法:

    @Component
    
    @ConfigurationProperties(prefix = "umsPay")
    
    @Data
    
    public class PayConfig {
    
        /**
    
         * 消息来源编号
    
         */
    
        private String msgSrcId;
    
        /**
    
         * 消息来源
    
         */
    
        private String msgSrc;
    
        /**
    
         * 终端号
    
         */
    
        private String tid;
    
        /**
    
         * 加密私钥
    
         */
    
        private String privateKey;
    
        /**
    
         * 业务类型
    
         */
    
       ** private List<BusinessType> businessTypes = new ArrayList<>();**
    
    }
    

    二、应用中对yaml配置文件的读取方法

    应用配置文件

    属性配置文件的位置

    spring会从classpath下的/config目录或者classpath的根目录查找application.properties或application.yml。

    /config优先于classpath根目录

    @PropertySource

    这个注解可以指定具体的属性配置文件,优先级比较低。

    SpringApplication.setDefaultProperties

    例如:

    SpringApplication application = new SpringApplication(Application.class);
    
    Map<String, Object> defaultMap = new HashMap<String, Object>();
    
    defaultMap.put("name", "Isea-Blog");
    
    //还可以是Properties对象
    
    application.setDefaultProperties(defaultMap);
    
    application.run(args);
    

    应用(使用)属性

    一、@Value(“${xxx}”)

    这种方式是最简单的,通过@Value注解可以将属性值注入进来。

    yaml:
    
    xxl:
    
      job:
    
        accessToken:
    
        admin:
    
          addresses: http://10.0.0.26:30104/
    
        executor:
    
          appname: carowner-common-set-meal-notify
    
          ip:
    
          port: 9999
    
          logretentiondays: -1
    
          logpath: /data/logs/lms-dmp-service/xxl-job/jobhandler
    

    配置类:

    @Component
    
    @Configuration
    
    public class XxlJobConfig {
    
        @Value("${xxl.job.admin.addresses}")
    
        private String adminAddresses;
    
        @Value("${xxl.job.executor.appname}")
    
        private String appName;
    
        @Value("${xxl.job.executor.ip}")
    
        private String ip;
    
        @Value("${xxl.job.executor.port}")
    
        private int port;
    
        @Value("${xxl.job.accessToken}")
    
        private String accessToken;
    
        @Value("${xxl.job.executor.logpath}")
    
        private String logPath;
    
        @Value("${xxl.job.executor.logretentiondays}")
    
        private int logRetentionDays;
    
    }
    

    二、@ConfigurationProperties

    Spring boot 应用中,当使用注解方式定义一个Bean时,同时可以利用@ConfigurationProperties导入外部属性填充到这个Bean的实例。本文通过例子介绍了几种用法可以达到这种效果 :

    方式1 : @ConfigurationProperties + @Component 注解到bean定义类上

    方式2 : @ConfigurationProperties + @Bean注解在配置类的bean定义方法上

    方式3 : @ConfigurationProperties注解到普通类然后通过@EnableConfigurationProperties定义为bean

    方式1 : @ConfigurationProperties + @Component 注解到bean定义类上

    类定义为Bean
    // 将类定义为一个bean的注解,比如 @Component,@Service,@Controller,@Repository
    
    // 或者 @Configuration
    
    @Component
    
    // 表示使用配置文件中前缀为 section1 的属性的值初始化该bean定义产生的的bean实例的同名属性
    
    // 在使用时这个定义产生的bean时,其属性 name 会是 Tom
    
    @ConfigurationProperties(prefix = "section1")
    
    public class Bean1 {
    
    public String getName() {
    
    return name;
    
    }
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
    private String name;
    
    }
    

    方式2 : @ConfigurationProperties + @Bean注解在配置类的bean定义方法上

    Bean来自一个普通类
    // 这是一个一般java类,POJO,没有任何注解
    
    public class Bean2 {
    
    public String getName() {
    
    return name;
    
    }
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
    private String name;
    
    }
    
    使用@Bean注解将一个配置类的方法定义为一个bean

    在项目的某个@Configuration配置类中通过@Bean注解在某个方法上将上面的POJO类定义为一个bean,并使用配置文件中相应的属性初始化该bean的属性。

    这里所说的@Configuration配置类可以是直接通过@Configuration注解的配置类,也可以是隐含使用了@Configuration注解的类,比如下面的例子中,@SpringBootApplication隐含了@Configuration。

    // 声明为Spring boot 应用,隐含了注解@Configuration

    @SpringBootApplication
    
    public class Application {
    
        // @Bean 注解在该方法上定义一个bean,这种基于方法的Bean定义不一定非要出现在
    
        // @SpringBootApplication 注解的类中,而是出现在任何@Configuration注解了
    
        // 的类中都可以
    
    @Bean
    
    // 使用配置文件中前缀为section2的属性的值初始化这里bean定义所产生的bean实例的同名属性,
    
    // 在使用时这个定义产生的bean时,其属性 name 会是 Jerry
    
    @ConfigurationProperties(prefix = "section2")
    
    public Bean2 bean2() {
    
         // 注意,这里的 Bean2 是上面所示的一个POJO类,没有任何注解
    
    return new Bean2();
    
    }
    
    public static void main(String[] args) throws Exception {
    
    SpringApplication.run(Application.class, args);
    
    }
    
    }
    

    方式3 : @ConfigurationProperties注解到普通类然后通过@EnableConfigurationProperties定义为bean

    注解一个普通类的属性将会来自外部属性文件
    // 该注解声明如果该类被定义为一个bean,则对应的bean实例的属性值将来自配置文件中前缀为
    
    // section3的同名属性。但是这个注解本身并不会导致该类被作为一个bean注册
    
    @ConfigurationProperties(prefix = "section3")
    
    public class Bean3 {
    
    public String getName() {
    
    return name;
    
    }
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
    private String name;
    
    }
    
    使用@EnableConfigurationProperties将上述类定义为一个bean
    @SpringBootApplication
    
    // 该注解会将类Bean3作为一个bean定义注册到bean容器,而类Bean3上的注解
    
    // @ConfigurationProperties(prefix = "section3")会导致目标bean
    
    // 实例的属性值使用配置文件中前缀为section3的同名属性值来填充,也就是目标
    
    // bean的属性name的值会是Dog
    
    @EnableConfigurationProperties({Bean3.class})
    
    public class Application {
    
    public static void main(String[] args) throws Exception {
    
    SpringApplication.run(Application.class, args);
    
    }
    
    }
    

    相关文章

      网友评论

          本文标题:springboot yaml配置文件---不同类型数据的写法

          本文链接:https://www.haomeiwen.com/subject/lhyacqtx.html