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包外面的配置文件
相關文章
相關標籤/搜索