SpringBoot | 第三章:springboot配置详解
source link: http://www.importnew.com/29352.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
基于springboot的 约定优于配置
的原则,在多数情况下,启动一个应用时,基本上无需做太多的配置,应用就能正常启动。但在大部分开发环境下,添加额外配置是无所避免的,比如自定义应用端口号(比较在机器比较少的情况下,一台机器还是需要部署多个应用的,当然利用 docker
的话,是可避免的,这是后话了)、mq的服务地址、缓存服务的服务地址、数据库的配置等,都或多或少的需要一些外部的配置项。
配置文件格式简要说明
springboot
默认的全局配置文件名为application.properties或者application.yml(spring官方推荐使用的格式是 .yml
格式,目前官网都是实例都是使用yml格式进行配置讲解的),应用启动时会自动加载此文件,无需手动引入。除此之外还有一个 bootstrap
的全局文件,它的加载顺序在 application
配置文件之前,主要是用于在应用程序上下文的引导阶段,在后期讲解 springCloudCofnig
时,主要是利用此特性,进行配置文件的动态修改,在此不表,在通常情况下,此两个配置文件是没有差别的,所以一般上都只需要配置 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]=旅游
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK