springboot配置文件

1.两种全局配置文件

application.properties
application.yml或者后缀为yaml
注意:
1.配置文件的名字是固定的
2.YAML是一种新的语法格式
做用:
1.修改springboot自动配置的默认值

2.YAML语法

2.1基本语法

k:(空格) v: 表示一对键值对(空格必须有)
以**空格**的缩进来控制层级关系,只要是左对齐的一列数据,都是同一层级的
属性和值大小写敏感
<!-- 注意:“:”后面要有空格 -->
server:
	port: 8081
	path: /hello

2.2值的写法

1.字面量:普通的值(数字、字符串、布尔)
k: v: 字面直接写

2.对象、Map(属性和值)(键值对)
例如:
user:
	name: tom
	age: 20

行内写法 user:{name: tom,age: 20}

3.数组(List、Set)
用“- 值”的方式表示数组中的一个元素
例如:
students:
	- tom
	- jack
	- nicy

行内写法:students: [tom,jack,nicy]

2.3配置文件占位符

1.随机数
${random.uuid}    //取随机数
${}后面能够直接拼接
例:
person.lastName=zhangsan${random.uuid} 
获得的结果就是zhangsan*************

2.占位符获取以前配置的值,若是没有可使用:指定默认值
${person.lastName}   //取值
${person.hello}    //没有配置这个值,因此获得的值就为“${person.hello}”
${person.hello: hello}  //若是没有给person.hello赋值,则person.hello的值为默认值hello

3.配置文件的使用

3.1 注解@ConfigurationProperties

/**
做用:告诉springboot将本类中的全部属性和配置文件中相关的配置进行绑定
(prefix=" "):配置文件下哪一个下面的属性进行一一映射
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
用@Component注解来注释为容器中的组件
*/
@Component
@ConfigurationProperties(prefix=" ")默认从全局文件中获取

package com.zlj.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 做用:告诉springboot将本类中的全部属性和配置文件中相关的配置进行绑定
 (prefix=" "):配置文件下哪一个下面的属性进行一一映射
 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
 用@Component注解来注释为容器中的组件
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private int age;
    private boolean boss;
    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;


    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}

3.2 须要导入依赖

<!--  导入配置文件处理器,配置文件进行绑定就会有提示 -->
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
</dependency>

3.3 或者使用@Value()注解

例1:java

结果: spring

例2:数组

结果:springboot

@ConfigurationProperties和@Value获取值比较

若是说,咱们只是在某个业务逻辑中须要获取配置文件中的某个值,那么用@Value
若是说,咱们专门写了javaBean来和配置文件进行映射,咱们就是用@ConfigurationProperties

4.配置文件的其余注解

1.加载指定的配置文件
@PropertySource(value={"classpath: "})
将与springboot关系不大的配置提取出来

2.导入spring的配置文件,让配置文件里面的内容生效
springboot里面没有spring配置文件,咱们本身编写的配置文件不能被自动识别,想让spring配置文件生效,用@ImportSource标志在一个配置类上
@ImportSource(locations={“classpath: ”})

5.配置类

/**
 * 指明当前类是一个配置类,就是来替代以前的spring配置文件
 * 在配置文件中使用<bean></bean>标签添加组件
 */
@Configuration
public class MyAppConfig {
    //将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService2(){
        return new HelloService();
    }
}
@SpringBootTest
class SpringBootPropertiesDemoApplicationTests {

    @Autowired
    ApplicationContext ioc;

    @Test
    public void testHelloService(){
        boolean flag = ioc.containsBean("helloService2");
        System.out.println(flag);
    }
}

6.Profile

6.1 多Profile文件

咱们在主配置文件编写的时候,文件名能够是 application-{profile}.properties/yml
默认使用application.properties的配置

#application.yml
server:
  port: 8080
spring:
  profiles:
    active: dev
#application-dev.yml
server:
  port: 8081
#application-prod.yml
server:
  port: 8082

6.2 激活指定Profile

1.在配置文件(yml、properties均可)中指定
spring.profiles.active=dev
2.命令行方式激活

命令行输入app

D:\idea_java\spring-boot-properties-demo\target>java -jar spring-boot-properties-demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

3.修改program arguments

4.修改VM options(虚拟机参数)
-Dspring.profiles.active=dev

6.3 yml支持多文档块方式

#applcation.yml
#默认使用第一个文档块
spring:
  profiles:
    active: prod

server:
  port: 8080

---
server:
  port: 8085

spring:
  profiles: dev     #指定这个文档块属于dev(开发)模式
---
server:
  port: 8086

spring:
  profiles: prod

7.配置文件的加载位置

1.配置文件的位置
springboot启动会扫描如下位置的application.properties/application.yml文件做为springboot的默认配置文件:
- file:./config/
- file:./
- classpath:/config/
- classpath:/
2.优先级
按照以上顺序优先级从高到低,全部位置的文件都会被加载,高优先级配置内容会**覆盖****低优先级配置内容
3.修改默认配置
能够经过配置spring.config.location来改变默认配置
项目打包好之后(只会将类路径里的打包),咱们可使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定的配置文件和默认加载的这些配置文件共同起做用造成互补配置
java -jar *****.jar --spring.config.location=文件路径

8.SpringBoot支持多种外部配置方式

能够用命令行修改配置,若是有多个配置要更改用空格隔开
例如:
修改端口
java -jar ****.jar --server.port=8088
能够在jar包外面写配置文件 命令行java -jar ****.jar 会自动扫描jar包外面的配置文件
相关文章
相关标签/搜索