spring boot 教程(三)配置詳解

 2023-12-06 阅读 27 评论 0

摘要:在大部分情況下,我們不需要做太多的配置就能夠讓spring boot正常運行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性。 Spring Boot 支持多種外部配置方式 這些方式優先級如下: 命令行參數來自java:comp/env的JNDI屬性Ja
在大部分情況下,我們不需要做太多的配置就能夠讓spring boot正常運行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性。

Spring Boot 支持多種外部配置方式

這些方式優先級如下:

  1. 命令行參數
  2. 來自java:comp/env的JNDI屬性
  3. Java系統屬性(System.getProperties()
  4. 操作系統環境變量
  5. RandomValuePropertySource配置的random.*屬性值
  6. jar包外部的application-{profile}.propertiesapplication.yml(帶spring.profile)配置文件
  7. jar包內部的application-{profile}.propertiesapplication.yml(帶spring.profile)配置文件
  8. jar包外部的application.propertiesapplication.yml(不帶spring.profile)配置文件
  9. jar包內部的application.propertiesapplication.yml(不帶spring.profile)配置文件
  10. @Configuration注解類上的@PropertySource
  11. 通過SpringApplication.setDefaultProperties指定的默認屬性

命令行參數

?與類C語言一樣,main函數都可以傳入參數,這被稱為命令行參數。
比如配置文件配置服務端口好是:
server.port=8081
那么對應的命令行就是:
mvn?spring-boot:run?-Drun.arguments="--server.port=8081"

系統參數

系統參數也分為很多種的,首先如果是使用main方法的話。點擊run as選擇run config然后配置系統參數

可以使用的參數可以是我們自己定義的,也可以是Spring Boot中默認的參數。

很多人可能會關心如web端口如何配置這樣的問題,這些都是Spring Boot中提供的參數,部分可用參數如下:

  1. # LOGGING
  2. logging.path=/var/logs
  3. logging.file=myapp.log
  4. logging.config= # location of config file (default classpath:logback.xml for logback)
  5. logging.level.*= # levels for loggers, e.g. "logging.level.org.springframework=DEBUG" (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)
  6. # EMBEDDED SERVER CONFIGURATION (ServerProperties)
  7. server.port=8080
  8. server.address= # bind to a specific NIC
  9. server.session-timeout= # session timeout in seconds
  10. server.context-parameters.*= # Servlet context init parameters, e.g. server.context-parameters.a=alpha
  11. server.context-path= # the context path, defaults to '/'
  12. server.servlet-path= # the servlet path, defaults to '/'
如果我們是用mvn打包的話,系統參數就配置在我們的mvaen里面。如果是用tomcat打包的話,系統參數就配置在我們
的tomcat里面。

操作系統環境變量

配置過JAVA_HOME的應該都了解這一個。

這里需要注意的地方,有些OS可以不支持使用.這種名字,如server.port,這種情況可以使用SERVER_PORT來配置。

具體名字如何匹配,看本文后面。

RandomValuePropertySource

系統中用到隨機數的地方,例如:

random.int*支持value參數和,max參數,當提供max參數的時候,value就是最小值。

應用配置文件(.properties或.yml)

當我們創建一個springboot項目的時候,系統默認會為我們在src/main/Java/resources目錄下創建一個application.properties。
或者application.yml。yml的語法比properties簡單,而且優先級要比proper高。建議使用yml;
先創建一個配置文件。
  1. name: java core
  2. price: 35.4

如果你需要讀取配置文件的值只需要加@Value(“${屬性名}”)
  1. @RestController
  2. public class BookController {
  3. @Value("${name}")
  4. private String name;
  5. @Value("${price}")
  6. private Double price;
  7. @RequestMapping(value = "/book")
  8. public String bookToString(){
  9. return "圖書名稱:"+name+",圖書價格:"+":"+price;
  10. }
  11. }
這里直接訪問會出現

將配置文件的屬性賦給實體類

當我們有很多配置屬性的時候,這時我們會把這些屬性作為字段來創建一個javabean,并將屬性值賦予給他們。
  1. book.name: javacore
  2. book.price: '35.4'
  1. @ConfigurationProperties(prefix = "book")
  2. @Component
  3. public class Book {
  4. private String name;
  5. private Double price;
  6. public String getName() {
  7. return name;
  8. }
  9. public void setName(String name) {
  10. this.name = name;
  11. }
  12. public Double getPrice() {
  13. return price;
  14. }
  15. public void setPrice(Double price) {
  16. this.price = price;
  17. }
  18. @Override
  19. public String toString() {
  20. return "Book [name=" + name + ", price=" + price + "]";
  21. }
  22. }

  1. @Controller
  2. @EnableConfigurationProperties({Book.class})
  3. public class BookController {
  4. @Autowired
  5. private Book book;
  6. @RequestMapping("book")
  7. public String framework(ModelMap map) {
  8. map.addAttribute("book",book);
  9. return "freeMarker/book";
  10. }
  11. }
  1. <!DOCTYPE html>
  2. <html>
  3. <head lang="en">
  4. <meta charset="UTF-8" />
  5. <title></title>
  6. </head>
  7. <body>
  8. <h1>圖書名稱:${book.name}</h1>
  9. <h1>圖書價格:${book.price}</h1>
  10. </body>
  11. </html>
最終結果圖:


這個只是最簡單的注入
Spring Boot 會自動轉換類型,當使用List的時候需要注意在配置中對List進行初始化!
Spring Boot 還支持嵌套屬性注入
  1. book.name: javacore
  2. book.price: '35.4'
  3. book.address:
  4. - '上海圖書館'
  5. - '上海張江高科圖書館'
  6. book.manage.name: '張三'
  7. book.manage.age: 23
這里我們添加了一個地址集合,和一個嵌套類,管理員對象。
  1. @ConfigurationProperties(prefix = "book")
  2. public class Book {
  3. private String name;
  4. private Double price;
  5. private List<String> address=new ArrayList<>();
  6. public Manage manage=new Manage();
  7. class Manage{
  8. private String name;
  9. private Integer age;
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public Integer getAge() {
  17. return age;
  18. }
  19. public void setAge(Integer age) {
  20. this.age = age;
  21. }
  22. @Override
  23. public String toString() {
  24. return "Manage [name=" + name + ", age=" + age + "]";
  25. }
  26. }
  27. public String getName() {
  28. return name;
  29. }
  30. public void setName(String name) {
  31. this.name = name;
  32. }
  33. public Double getPrice() {
  34. return price;
  35. }
  36. public void setPrice(Double price) {
  37. this.price = price;
  38. }
  39. @Override
  40. public String toString() {
  41. return "Book [name=" + name + ", price=" + price + "]";
  42. }
  43. public List<String> getAddress() {
  44. return address;
  45. }
  46. public void setAddress(List<String> address) {
  47. this.address = address;
  48. }
  49. public Manage getManage() {
  50. return manage;
  51. }
  52. public void setManage(Manage manage) {
  53. this.manage = manage;
  54. }
  55. }
記住,集合和對象一定要初始化,不然會報錯。Controller基本不變。
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
  3. xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
  4. <head lang="en">
  5. <meta charset="UTF-8" />
  6. <title></title>
  7. </head>
  8. <body>
  9. <h1>圖書名稱:${book.name}</h1>
  10. <h1>圖書價格:${book.price}</h1>
  11. <#list book.address as address>
  12. 圖書所在地址 : ${address}<br/>
  13. </#list>
  14. <h2>管理員屬性:${book.manage}<h2>
  15. </body>
  16. </html>


屬性占位符

  1. app.name=MyApp
  2. app.description=${app.name} is a Spring Boot application

可以在配置文件中引用前面配置過的屬性(優先級前面配置過的這里都能用)。

通過如${app.name:默認名稱}方法還可以設置默認值,當找不到引用的屬性時,會使用默認的屬性。

由于{}方式改為了@ @方式,例如@name@。

如果你是引入的Spring Boot,你可以修改使用其他的分隔符

通過屬性占位符還能縮短命令參數

server.port=${port:7001}

屬性名匹配規則

例如有如下配置對象:

  1. @Component
  2. @ConfigurationProperties(prefix="person")
  3. public class ConnectionSettings {
  4. private String firstName;
  5. }

firstName可以使用的屬性名如下:

person.firstName,標準的駝峰式命名

person.first-name,虛線(-)分割方式,推薦在.properties和.yml配置文件中使用

PERSON_FIRST_NAME,大寫下劃線形式,建議在系統環境變量中使用


版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/187326.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息