iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
1

寫到第九天了, 你可能寫了一些 Rest API 給前端在用, 也透過 Swagger 提供前端同事方便測試跟看規格, 也加上了 Cache 或是 Retry 來加強體驗, 也開始準備發佈到正式環境上....

but....千萬不要把你正式環境的帳號密碼 commit 到 git 裡啊, 也不要就這麼打包到 jar 裡面啊....XD

你會想說啊這樣不就每次上版都要去改設定檔...

但其實 spring boot 有一套抓取變數的規則, 以及切換的功能 來提供我們使用, 詳細可以看下面兩個說明
Externalized Configuration
Set the active Spring profiles

如果不想看那麼多字....

其實間單說就兩個重點

在啟動命令列可以切換不同的配置組態

組態檔位置可以透過命令列提供給SpringBoot

提供我目前的用法給大家參考

首先先從配置檔的檔名開始
我的 application.yml 都會只放些通用的 像下面這樣

spring:
  application:
    name: KpiServer
  profiles:
    active: dev
  jackson:
    date-format: com.fasterxml.jackson.databind.util.ISO8601DateFormat
    time-zone: UTC
  thymeleaf:
    mode: LEGACYHTML5
  resources:
    chain:
      cache: true
      enabled: true
      gzipped: true
    cache-period: 604800

server:
  port: ${port:8080}
  compression:
    enabled: true

例如一些 time-zone(時域), date-format(時間格式), resources.chain.cache(資源的快取)...等等

這邊要注意的是 spring.profiles.active 這邊指定 SpringBoot 啟動時要載入不同的設定檔
像我這邊是 active=dev , 所以他就會去找 application-dev.yml 這個檔案吃裡面的參數設定
你也可以不只一種....可以用 application-test.yml, application-docker.yml 等等來方便的切換
然後在我的 application-dev.yml 裡面你就可以看到不同環境的不同組態 像下面

application-dev.yml

spring:
  datasource:
    url: ${dburl:jdbc:mysql://10.0.0.162:3306/kpim?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&preferredTestQuery=select now()}
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: ${dbusername:root}
    password: ${dbpassword:123456}
  jpa:
    show-sql: false
  mail:
    host: 'mail.ooxx.com'
    username: 'admin@ooxx.com'
    password: 'AdminIsMe'

部署的時候我會在正式機上面放一份 application-prod.yml

然後我的 shell 會這樣下

sudo nohup java -jar nt-ask.jar --spring.profiles.active=prod --spring.config.location=application-prod.yml

這樣就可以了


上一篇
Day 08 - 如何在 SpringBoot 中使用 Retry & Cache
下一篇
Day 10 - 上線前增加 SpringBoot Admin 來做監控
系列文
30天從零開始 使用 Spring Boot 跟 Spring Cloud 建構完整微服務架構35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Yanagi
iT邦新手 5 級 ‧ 2021-10-25 14:47:53

請問「--config.location」是不是應該改成「--spring.config.location」?

Sam iT邦新手 4 級 ‧ 2021-10-26 14:20:35 檢舉

的確是筆誤, 感謝提醒/images/emoticon/emoticon12.gif

我要留言

立即登入留言