spring boot配置(一)

配置文件

spring boot使用一个全局配置文件(文件名固定),分两种application.propertiesapplication.yml,用于修改spring boot自动配置的默认值。

YAML(YAML Ain't Markup Language)

标记语言:

  • 以前的配置文件大多使用xml文件
  • YAML以数据为中心,比json、xml等更适合做配置文件

基本语法:

  • k:(空格)v : 表示一对键值对
    以空格的缩进来控制层级关系,只要是左对齐的一列数据都是同一层级的
server:
  port: 8080

属性和值大小写敏感
值得写法:

  • 字面量:普通的值(数字、字符串、布尔)
    k: v :字面直接来写;字符串默认不用加上单引号或者双引号;
    "" 双引号:不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。
    name:"zhangsan\n lisi": 输出:zhangsan换行 lisi
    '' 单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
    name: 'zhangsan\n lisi':输出:zhangsan \n lisi
  • 对象、Map:
    k: v : 在下一行写对象的属性和值的关系
    对象还是k: v的形式
    friends:
      lastName: zhangsan
      age: 20
    
    行内写法
    friends: {lastName: zhangsan,age: 18}
    
  • 数组(List、Set):用-值表示数组中的元素
    pets:
      - cat
      - dog
      - pig
    
    行内写法
    pets: {cat,dog,pig}
    

实例:配置文件值注入
在bean包下创建两个javabean,PersonDog

  • javabean
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;

(将配置文件中配置的每个属性值映射到这个组件中)
@ConfigurationProperties(prefix = "person"):该注解告诉spring boot将本类中的所有属性和配置文件中相关的配置进行绑定;prefix = "person"指定配置文件下哪个标签下面的属性进行一一映射。
@Component:标注这是一个组件,只有容器中的组件才能使用容器提供的@ConfigurationProperties功能。

  • 配置文件
person:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2019/2/1
  maps: {k1: v1,k2: 18}
  lists:
    - lisi
    - lili
  dog:
    name: 小狗
    age: 12
  • 配置文件处理器
    IDE提醒添加的依赖,这样在配置文件中编写代码时就有提示了
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

@ConfigurationProperties和@Value

@Value用法:

public class Person {
    @Value("小明")  //直接赋值
    private String lastName;
    @Value("#{11 * 2}")     //表达式
    private Integer age;
    @Value("${person.boss}")    //从配置文件中获取值
    private Boolean boss;
    private Date birth;

使用@Value需要在javabean中一个一个配置。

. @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个一个配置
松散绑定(松散语法) 支持 不支持
SpEL(表达式) 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持
  • 松散绑定:形如person.last-name,用 - 代替驼峰
  • JSR303数据校验
    @Validated
    public class Person {
        @Email   //指定只能赋Email格式的值
        @Value("${person.lastName}")
        private String lastName;
    
  • 复杂类型封装:@Value无法配置Map、List等复杂类型的属性

小结:

  • 如果只是要用一个配置文件中的某个值,则用@Value
  • 如果写了个javabean来和配置文件中的属性进行绑定,则用@ConfigurationProperties

@PropertySource和@ImportResource

  • @PropertySource
    @ConfigurationProperties注解默认使用全局配置文件对JavaBean进行配置,而@PropertySource注解可以指定一个配置文件来为JavaBean配置。
    @PropertySource(value = {"classpath:person.properties"})
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
    

只支持.properties文件)

  • @ImportResource
    导入spring的配置文件,让配置文件里的内容生效;
    spring boot中没有spring的配置文件,它无法识别我们编写的配置文件,因此需要在主配置类上使用@ImportResource将spring配置文件加载进来
    @ImportResource(locations = {"classpath:beans.xml"})
    @SpringBootApplication
    public class ConfigurationApplication {
    

spring boot推荐使用全注解的方式添加组件

  • 用配置类代替spring配置文件
  • @Bean将对象添加到容器中
    如下是一个配置类
/**
 * @Configuration  指明该类是一个配置类,替代了之前spring的配置文件
 * 以前使用<bean></bean>添加组件
 */
@Configuration
public class MyAppConfig {
    @Bean   //将方法返回值添加到容器中,默认id是方法名
    public HelloService helloService(){
        return new HelloService();
    }
}

配置文件的占位符

person.lastName = 李四${random.int}
person.age = ${random.int}
person.boss = false
person.birth = 2017/12/12
person.maps.k1 = v1
person.maps.k2 = 12
person.lists = lisi,zhaoliu
person.dog.name = ${person.lastName}_小狗
person.dog.age = 2

${}可以用于获取之前配置过的值,如person.dog.name = ${person.lastName}_小狗
如果没有值,可以指定默认值,如person.dog.name = ${person.lastName:李四}_小狗

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容