zoukankan      html  css  js  c++  java
  • SpringBoot | 第三章:springboot配置详解

    基于springboot的约定优于配置的原则,在多数情况下,启动一个应用时,基本上无需做太多的配置,应用就能正常启动。但在大部分开发环境下,添加额外配置是无所避免的,比如自定义应用端口号(比较在机器比较少的情况下,一台机器还是需要部署多个应用的,当然利用docker的话,是可避免的,这是后话了)、mq的服务地址、缓存服务的服务地址、数据库的配置等,都或多或少的需要一些外部的配置项。

    配置文件格式简要说明

    springboot默认的全局配置文件名为application.properties或者application.yml(spring官方推荐使用的格式是.yml格式,目前官网都是实例都是使用yml格式进行配置讲解的),应用启动时会自动加载此文件,无需手动引入。除此之外还有一个bootstrap的全局文件,它的加载顺序在application配置文件之前,主要是用于在应用程序上下文的引导阶段,在后期讲解springCloudConfig时,主要是利用此特性,进行配置文件的动态修改,在此不表,在通常情况下,此两个配置文件是没有差别的,所以一般上都只需要配置application即可。

    自定义属性值

    application.properties配置文件支持自定义属性的支持,比如

    blog.address=https://blog.lqdev.cn
    blog.author=oKong
    

    然后可通过@Value("${blog.author}")的形式获取属性值。

    @RestController
    public class DemoController {
    
        @Value("${blog.address}")
        String address;
        
        @Value("${blog.author}")
        String author;
        
        @Value("${blog.desc}")    
        String desc;
        
        @RequestMapping("/")
        public String demo() {
            return desc;
        }
    }
    

    这里提醒下,在填写一些默认的比如,数据库属性时,可使用alt+/的方式,IDE会自动显示提示,避免了手动嵌入属性值或者忘记属性的尴尬。

    关于自定义属性时,特别是一些公用包,会使用到属性值时,建议在创建additional-spring-configuration-metadata.json属性元文件,这样在使用上述快捷方式时,会进行提示,包括属性名和属性说明,这样也方便调用者询问属性名是啥。

    相关configuration-metadata说明可查看:https://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html

    属性引用

    在配置文件中,各个属性参数可进行引用的,比如:

    blog.address=https://blog.lqdev.cn
    blog.author=oKong
    blog.desc=${blog.author},${blog.address}
    

    最后blog.desc的值即可:oKong,https://blog.lqdev.cn。利用此特性,并可实现一些特殊的功能。比如后期讲解spring cloud时,注册eurka注册中心的实例名时,并会使用类似如下配置,使得实例名一眼就知道哪台服务地址:

    eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}
    
    

    这里需要注意,由于springboot在读取properties文件时,使用的是PropertiesPropertySourceLoader类进行读取,默认读取的编码是ISO 8859-1,故在默认的配置文件中使用中文时,会出现乱码,此时可以将中文转成Unicode编码或者使用yml配置格式(默认就支持utf-8),再不济可以将作为配置写入到一个自定义配置文件,利用@PropertySource注解的encoding属性指定编码

    随机数

    Spring Boot的属性配置文件中可以通过${random}来产生int值、long值或者string字符串,来支持属性的随机值。

    # 随机字符串
    .blog.value=${random.value}
    # 随机int
    .blog.number=${random.int}
    # 随机long
    .blog.bignumber=${random.long}
    # 10以内的随机数
    .blog.test1=${random.int(10)}
    # 1-20的随机数
    .blog.test2=${random.int[1,20]}
    
    

    自定义配置文件

    在多数情况下,配置信息基本上都是放入application.properties文件中,但在一些场景下,比如某个配置项比较多时,为了分开存放,也可自定义配置文件,如my.properties。由于自定义的文件,系统不会自动加载,这个时候就需要手动引入了。
    利用@PropertySource注解既可以引入配置文件,需要引入多个时,可使用@PropertySources设置数组,引入多个文件。

    @SpringBootApplication
    @PropertySource(value="classpath:my.properties",encoding="utf-8")
    public class Chapter3Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Chapter3Application.class, args);
        }
    }
    

    配置绑定对象

    虽然使用@Value()方式,能方便的引入自定义的属性值,但在多某个配置项属于某一配置时,希望对应到一个实体配置类中,springboot也提供了支持。利用@ConfigurationProperties属性,即可完成
    my.properties配置文件:

    config.code=code
    config.name=趔趄的猿
    config.hobby[0]=看电影
    config.hobby[1]=旅游
    

    实体类:

    @Component
    //@EnableConfigurationProperties(value= {Config.class})
    @ConfigurationProperties(prefix="config")
    @Data
    public class Config {
        
        String code;
        
        String name;
        
        List<String> hobby;
    }
    

    这里可直接加入@Component使其在启动时被自动扫描到,或者使用@EnableConfigurationProperties注解注册此实体bean.
    其次,在引入@ConfigurationProperties时,IDE会提示你引入spring-boot-configuration-processor依赖,前面提到,在自定义属性时,创建additional-spring-configuration-metadata.json可进行属性提示,而此依赖功能类似,会编译时自动生成spring-configuration-metadata.json文件,此文件主要给IDE使用,用于提示使用。添加后在配置文件点击属性时,会自动跳转到对应绑定的实体类中

    数组形式

    配置了以下配置,然后利用List<String>就能获取hobby的值了。

    config.code=code
    config.name=趔趄的猿
    config.hobby[0]=看电影
    config.hobby[1]=旅游
    

    总结

    目前互联网上很多大佬都有springboot系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是亲身实际过的。若文中有所错误之处,还望提出,谢谢。

    老生常谈

    • 个人QQ:499452441
    • 微信公众号:lqdevOps

    个人博客:https://blog.lqdev.cn

    完整实例地址:chapter-3

    原文地址:http://blog.lqdev.cn/2018/07/14/springboot/chapter-third/


    作者:oKong | 趔趄的猿
    出处:blog.lqdev.cn
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    本文如对您有帮助,还请多帮 【推荐】 下此文。
    如果喜欢我的文章,请关注我的公众号

  • 相关阅读:
    Working with macro signatures
    Reset and Clear Recent Items and Frequent Places in Windows 10
    git分支演示
    The current .NET SDK does not support targeting .NET Core 2.1. Either target .NET Core 2.0 or lower, or use a version of the .NET SDK that supports .NET Core 2.1.
    Build website project by roslyn through devenv.com
    Configure environment variables for different tools in jenkins
    NUnit Console Command Line
    Code Coverage and Unit Test in SonarQube
    头脑王者 物理化学生物
    头脑王者 常识,饮食
  • 原文地址:https://www.cnblogs.com/okong/p/springboot-hird.html
Copyright © 2011-2022 走看看