接續昨天
根據規格書,我們要用永豐提供的四組hash值拼出hash id
可以看出,hash id會是個固定值,所以其實也可以先計算出結果再把那個hash id塞到DB就可以了
不過為了避免未來這四組hash有異動,又要再重新計算,或許把4個hash值放入DB,由程式啟動時自行計算HASH ID放到memory才是比較好的做法,另外,JWT的私鑰、API的url等value也都應該要放在DB比較安全、也好統一管理
因此我想在DB增加一個collection、並實作一個讀參數的class方便未來使用
首先一樣先建立entity:
@Data //lomobk
@Document //Collection
public class SysConf {
@Id
private String id;
@NonNull
@Indexed(unique = true)
private String configKey;
private String configValue;
private String comment;
public SysConf(String configKey, String configValue, String comment) {
this.configKey = configKey;
this.configValue = configValue;
this.comment = comment;
}
}
建repostory介面
public interface SysConfRepo extends MongoRepository<SysConf,String>{
}
建立service,把所有sysconf參數存進SystemConfigUtil.systemConfMap←這個等下新增
@RequiredArgsConstructor
public class SysConfService {
private final SysConfRepo sysConfRepo;
@EventListener(ApplicationReadyEvent.class)
public void reloadAllConfig(){
List<SysConf> sysConf=sysConfRepo.findAll();
for (SysConf sysConf2 : sysConf) {
String key=sysConf2.getConfigKey();
String value=sysConf2.getConfigValue();
SystemConfigUtil.systemConfMap.put(key, value);
}
}
}
加上@EventListener(ApplicationReadyEvent.class)
可以讓這段程式在Spring Boot啟動後先跑一次,避免systemConfMap是空的情況發生
新增一個SystemConfigUtil.java
public class SystemConfigUtil {
public static Map<String,String> systemConfMap = new HashMap<String,String>();
}
本來想說直接把這個Map直接加在SysConfService就好,不過想想還是分出來好了
寫得很陽春,其實就是先把資料存在Map裡面而已,要取參數時直接從Map拿就行了
這麼做的好處是減少對DB的存取,
雖然MongoDB很快,不過程式能盡量減少對外部的依賴是最好的
接下來就可以開始將要串的永豐API流程寫成一個class了