首頁 > 軟體

springboot中.yml檔案引數的讀取方式

2022-02-16 10:03:09

yml檔案引數的讀取

附上一個較為常見的application.yml檔案範例

server:
  port: 9999
  use-forward-headers: true
  tomcat:
    remote-ip-header: X-Real-IP
    protocol-header: X-Forwarded-Proto
spring:
  #  datasource:
  #    type: com.alibaba.druid.pool.DruidDataSource    # 設定當前要使用的資料來源的操作型別
  #    driver-class-name: org.gjt.mm.mysql.Driver      # 設定MySQL的驅動程式類
  #    url: jdbc:mysql://127.0.0.1:3306/drink?useUnicode=true&characterEncoding=UTF-8           # 資料庫連線地址
  #    username: root                                  # 資料庫使用者名稱
  #    password: root                                  # 資料庫連線密碼
  #    dbcp2:                                          # 進行資料庫連線池的設定
  #      min-idle: 5                                   # 資料庫連線池的最小維持連線數
  #      initial-size: 5                               # 初始化提供的連線數
  #      max-total: 5                                  # 最大的連線數
  #      max-wait-millis: 200                          # 等待連線獲取的最大超時時間
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/drink-bar?useUnicode=true&characterEncoding=utf8
      username: root
      password: 123456
      # 初始化時建立的連線數
      initial-size: 5
      # 最大連線數
      max-active: 20
      # 最小連線數
      min-idle: 5
      # 獲取連線最大等待時間,單位:毫秒
      max-wait: 2000
      # 是否快取preparedStatement
      pool-prepared-statements: false
      # 最大preparedStatement快取數,當pool-prepared-statements=true時需要大於0
      max-pool-prepared-statement-per-connection-size: -1
      # 檢測連線是否失效的sql
      validation-query: SELECT 'x'
      # 檢測連線是否失效的超時時間,單位:秒
      validation-query-timeout: 2
      filters: stat,wall,log4j2,config
      time-between-log-stats-millis: 604800000
      #      connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAI0Q56HOXI2Z33kNpgOxvMbaE7BRUw0pZMLPZA0Pe+J/6R7Cq97BUCDygkzL7evUfQmPprNh6KKaSKXV0dBVghcCAwEAAQ==
      # Spring aop監控的包路徑
      aop-patterns: cn.greedystar.springbootdemo.modules.service.*
      filter:
        config:
          enabled: true
        # 監控統計
        stat:
          enabled: true
          db-type: mysql
          # 列印慢sql
          log-slow-sql: true
          # 超過200毫秒即為慢sql
          slow-sql-millis: 200
        # sql防火牆
        wall:
          enabled: true
          db-type: mysql
          # 對認定的攻擊sql進行紀錄檔輸出
          log-violation: true
          # 對認定的攻擊sql丟擲異常
          throw-exception: true
          config:
            # 是否允許下述操作
            alter-table-allow: false
            truncate-allow: false
            drop-table-allow: false
            update-where-none-check: true
            # metadata會暴露資料的表結構
            metadata-allow: true
        # 紀錄檔
        log4j2:
          enabled: true
          # log4j2僅記錄druid的sql執行紀錄檔
          statement-log-enabled: false
          connection-log-enabled: false
          result-set-log-enabled: false
          statement-executable-sql-log-enable: true
      # 資料庫連線池監控統計外掛
      web-stat-filter:
        enabled: true
        url-pattern: /*
        # 過濾掉如下請求
        exclusions: '*.gif,*.png,*.jpg,*.html,*.js,*.css,*.ico,/druid/*'
      # 資料庫連線池監控頁面外掛
      stat-view-servlet:
        enabled: true
        url-pattern: '/druid/*'
        reset-enable: true
        login-username: admin
        login-password: admin
        allow:
        deny:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
  redis:
    database: 2
    host: www.mist1.com
    port: 9000
    password: mistone23s
    jedis:
      pool:
        max-idle: 1000
        max-wait: -1
        min-idle: 2
        max-active: 10
mybatis:
  mapper-locations:
#    - classpath:mapper/*.xml
    - classpath*:mapper/*.xml
# 紀錄檔組態檔
logging:
  config: classpath:log4j2/log4j2.xml
# 分頁設定
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql
# JWT
jwt:
  header: Authorization
  secret: mySecret
  #token有效期一天
  expiration: 86400
  tokenHead: "Bearer "
filePath: E://upload
fileServerUrl: http://file.mist1.com
env: dev1
dada:
  shopNo: 21443-254867
  sourceId: 21443
  isPrepay: 1
debug: true
wx:
  template-msg:
    appid: wx092f89864f7afb50
    take_out_success: HS5BpCEGQkf-6fKjn0YeVKpEfqe_5WzmaGgNX1-sdT4
    self_take_success: HS5BpCEGQkf-6fKjn0YeVIEfy8nc_ZIm0QkqhTcBg2g
    remind_take: E7Oe-OBFh8ABAWudkti1MTUB7mXOOPTZoGTr5J0Um4Y
    order_delivery: rYSNmi-tn-HS_68S2vmFrTlfbgD-MhWse3RS21GSFWs
    evaluate_wait: kZg0wJ8cXDSQVlWBxVkNbdHSvF8_tEZRoKf0yzQCUTQ
    ticketUrl: http://localhost:9999/api/v1/print/printTicketByJson
    tipUrl: http://localhost:9999/api/v1/print/printTipByJson
  miniapp:
    configs:
      - appid: #微信小程式appid
        secret: #微信小程式secret
        token: #微信小程式訊息伺服器設定的token
        aesKey: #微信小程式訊息伺服器設定的EncodingAESKey
        msgDataFormat: JSON
      - appid: #微信小程式appid
        secret: #微信小程式secret
        token: #微信小程式訊息伺服器設定的token
        aesKey: #微信小程式訊息伺服器設定的EncodingAESKey
        msgDataFormat: JSON
  pay:
    appId: #微信小程式APPID
    mchId: #商戶號
    mchKey: #商戶號祕鑰
    subAppId: #服務商模式下的子商戶公眾賬號ID
    subMchId: #服務商模式下的子商戶號
    keyPath: classpath:cert/apiclient_cert.p12
    notifyUrl: http://wx.mist1.com/wx/api/pay/notify/order
    refundUrl: http://wx.mist1.com/wx/api/pay/notify/refund
    tradeType: JSAPI

正常在controller中

可以通過@Value註解機型獲取

 @Value("${jwt.header}")
  private String token_header;

但是在service,serviceImpl等層中,沒辦法通過這種方式獲取,可以通過另外一種方式進行獲取

通過config檔案的讀取

package com.drink.admin.core.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "wx.template-msg")
public class WxTemplateProperties {
  private String appid;
  private String take_out_success;
  private String self_take_success;
  private String remind_take;
  private String order_delivery;
  private String evaluate_wait;
  private String ticketUrl;
  private String tipUrl;
}

使用@ConfigurationProperties註解讀取

在service中通過@Autowired載入即可

 @Autowired
    private WxTemplateProperties wxTemplateProperties;

關於yml檔案書寫的注意事項

現在大家發現,在springboot裡還是要用到組態檔的。 除了使用.properties外,springboot還支援 yml格式。

個人覺得yml格式的可讀性和..properties比起來差不多,有時候還沒有不如properties 看起來那麼規整。 

但是考慮到很多springboot專案會使用yml格式,還是簡單講講,主要目的還是為了讀懂其他人的專案。

如圖所示,左邊是application.properties的寫法,右邊是application.yml的寫法,他們達到的效果是相同的

在application.yml 檔案書寫注意:

1. 不同“等級” 用冒號隔開

2. 次等級的前面是空格,不能使用製表符(tab)

3. 冒號之後如果有值,那麼冒號和值之間至少有一個空格,不能緊貼著

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com