gossip 應用程式中有資料庫連線與郵件寄送的相關組態資訊,若這些資訊在其他應用程式或服務中也會用到,直接複製組態,或許已經造成管理上的困擾,來試著把組態分離出來。
組態伺服器的部份,在這邊直接使用〈Git 組態來源〉成果的 configsvr,因為其中的組態,正好就是 gossip 中需要的組態。
基本上,Spring Cloud 應該也可以與 WebFlux 結合運用,不過為了避免遇上問題時缺少管道或資料能解決,在這邊還是使用〈套用 Spring Data JDBC〉 的 gossip 成果來修改。
首先,必須加入 Spring Cloud Config 的相依,不過,除了加入 org.springframework.cloud:spring-cloud-starter-config
之外,在撰寫本文的這個時間點上,mavenCentral
中沒有 Spring Cloud 的相關相依程式庫,你必須增加 repositories
等額外資訊,不然會抓不到相關 JAR 檔案。例如:
...略
repositories {
mavenCentral()
maven { url "https://repo.spring.io/milestone" }
}
ext['springCloudVersion'] = 'Greenwich.RC2'
dependencies {
...略
implementation('org.springframework.cloud:spring-cloud-starter-config')
...略
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
組態伺服器上的會是服務之間共用的組態,個別應用程式需要的組態,還是放在個別應用程式中,例如,gossip 的 application.properties 中放了:
spring.thymeleaf.cache=false
這是為了頁面修改後,能馬上看到變化,當然實際應用程式上線後,不需要這個特性的話就可以拿掉;頁面路徑相關的組態,在這邊獨立出來成為 path.properties:
path.url.member=/member
path.url.index=/
path.view.register_success=register_success
path.view.register_form=register
path.view.verify=verify
path.view.forgot=forgot
path.view.reset_password_form=reset_password
path.view.reset_password_success=reset_success
path.view.index=index
path.view.user=user
path.view.member=member
為了能讀取 path.properties,要在 GossipApplication
上加註 @PropertySource
:
...略
@PropertySource("classpath:path.properties")
public class GossipApplication {
...略
}
然後,在 bootstrap.properties 中設定應用程式名稱、組態伺服器等資訊:
spring.application.name=gossip
spring.profiles.active=default
spring.cloud.config.uri=http://localhost:8888
接著啟動組態伺服器與 gossip 應用程式(以及 H2 資料庫),應該就可以運行程式了,你可以在 gossip 中找到以上的範例專案。