SpringBoot配置文件(熱部署、Properties和YAML、自定義屬性對象集合)


1、熱部署

  修改完代碼,想讓SpringBoot自動加載我們修改的內容(pom.xml添加依賴)

<!-- spring-boot的開發工具,可以在修改代碼時,不需要手動重啟服務器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

2、 配置文件:Properties和YAML

  SpringBoot是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,

就可以使用application.properties或者application.yml/application.yaml(官方推薦使用的格式)進行配置。

  SpringBoot默認會從Resources目錄下加載application.properties或application.yml(application.yaml)文件

Application屬性文件:按優先級排序,位置高的將覆蓋位置低的

# tomcat 端口號
server.port=18081
# 配置項目所在的根目錄
server.servlet.context-path=/springboot-demo02

yml配置文件

簡介:

  YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據為核心的,比傳統的xml方式更加簡潔

server:
  port: 8899

冒號(:)與value之間必須有一個空格,另起一行時盡量不要用tab,推薦使用空格空行

properties文件與yml文件之間的區別:

  • properties文件中,配置屬性的方式是key=value的方式
  • yml文件中,配置屬性的方式是: key: value

application.properties的配置方式:

server.port=8999

yml文件的配置方式:

server:
  port: 8899

  將yml與properties對比之后發現,yml最大的好處在於其擁有天然的樹狀結構,所以着手嘗試將properties文件更改為yml文件,發現了幾個要注意的地方:

  • 1、在properties文件中是以”.”進行分割的, 在yml中是用”:”進行分割; 
  • 2、yml的數據格式和json的格式很像,都是K-V格式,並且通過”:”進行賦值; 
  • 3、在yml中縮進一定不能使用TAB,否則會報很奇怪的錯誤;(縮進特么只能用空格!!!!) 
  • 4、每個k的冒號后面一定都要加一個空格; 

在線的properties文件與yml文件的轉換:https://www.toyaml.com/index.html

yml自定義屬性:

application.yml

user: 
   id: 1001
   username: laosan

controller.java

@Controller
public class controller {
    @Value("${user.id}")
    private Integer id;
    @Value("${user.username}")
    private String usernmae;

配置隨機值

  通過${random}來產生int值,long值或者String字符串,來支持屬性的隨機值.

yml中

#隨機字符串
suke.secret=${random.value}
#隨機int
suke.number=${random.int}
#隨機long
suke.bignumber=${random.long}
#10以內的隨機數
suke.number.less.than.ten=${random.int(10)}
#12-65的隨機數
suke.number.in.range=${random.int[12,65]}

讀取使用注解:@Value( "${suke.secret}")

屬性占位符

  當application.properties里的值被使用時,它們會被存在的Environment過濾,所以你能夠引用先前定義的值(比如,系統屬性)

suke.name=www.suke.com
suke.desc=${suke.name} is a domain name

最后suke.desc的值是: www.suke.com is a domin name

配置綁定對象,數組

user.java實體類:

@Data
@ToString
@Component
@ConfigurationProperties(prefix = "user")//綁定配置類中的user屬性 public class User {
    private Integer id;
    private String username;
    private Integer age;
    private Date nowtime = new Date();
    private String random;
    
    private List<Integer> list = new ArrayList<>();
    private List<User> users = new ArrayList<>();
}

如果@ConfigurationProperties(prefix = "user") 報警告

//解決這個警告,我們只需要配一個依賴,點擊提示自動生成 <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <optional>true</optional>
</dependency>

application.yml配置文件

server:
 port: 8899

spring:
  jackson:
    time-zone: Asia/Shanghai  //時區時間
    date-format: yyyy-MM-dd HH:mm:ss  //顯示日期格式
 
  #json對屬性值為null 忽略
    default-property-inclusion: NON_NULL
user:
  id: 1002
  username: zhangsan
  age: 18
  random: ${random.value} //隨機生成一個String隨機數
  list:
    - 123 //集合中的第一個值
    - 234
    - 345
  users:
    - id: 1003 //對象集合中的第一個對象
      username: lisi
      age: 28
      random: ${random.value}
    - id: 1004
      username: wangwu
      age: 38
      random: ${random.value}

測試類:

    @Autowired
    private User user;
    
    @RequestMapping("hello")
    @ResponseBody
    public User helloTest() {
        System.out.println(user);
        return user;
    }

自定義配置文件@propertySources

  application.properties文件中,但是在一些場景下,比如某個配置項比較多時,為了方便區分,我們會分開存放

可使用@propertySources設置數組,引入多個文件.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM