您可以使用 ACM Java Native SDK 來擷取、監聽、發布和刪除配置。
添加依賴
在 pom.xml 檔案中添加以下依賴,即可開始使用 ACM Java Native SDK。
<dependency>
<groupId>com.alibaba.edas.acm</groupId>
<artifactId>acm-sdk</artifactId>
<version>1.0.9</version>
</dependency>
<!-- 如果已有日誌實現,則可去除以下依賴 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
重要 如需使用以 KMS AES-128 方式加密的配置,則依賴的 acm-sdk 版本不可低於 1.0.9。
範例程式碼
添加依賴後,即可在程式中使用 ACM Java Native SDK 提供的介面。
說明 請將代碼中的 $regionId、$endpoint、$namespace、$accessKey、$secretKey 分別替換為 ACM 控制台上命名空間詳情對話方塊內的地區 ID、End Point、命名空間 ID、AccessKey、SecretKey。
import java.util.Properties;
import com.alibaba.edas.acm.ConfigService;
import com.alibaba.edas.acm.exception.ConfigException;
import com.alibaba.edas.acm.listener.ConfigChangeListener;
import com.alibaba.edas.acm.listener.PropertiesListener;
// 範例程式碼,僅用於樣本測試
public class ACMTest {
// 屬性/開關
private static String config = "DefaultValue";
private static Properties acmProperties = new Properties();
public static void main(String[] args) {
try {
// 從控制台命名空間管理中拷貝對應值
Properties properties = new Properties();
properties.put("endpoint", "$endpoint");
properties.put("namespace", "$namespace");
// 通過 ECS 執行個體 RAM 角色訪問 ACM
// properties.put("ramRoleName", "$ramRoleName");
properties.put("accessKey", "$accessKey");
properties.put("secretKey", "$secretKey");
// 如果是加密配置,則添加下面兩行進行自動解密
//properties.put("openKMSFilter", true);
//properties.put("regionId", "$regionId");
ConfigService.init(properties);
// 主動擷取配置
String content = ConfigService.getConfig("${dataId}", "${group}", 6000);
System.out.println(content);
// 初始化的時候,給配置添加監聽,配置變更會回調通知
ConfigService.addListener("${dataId}", "${group}", new ConfigChangeListener() {
public void receiveConfigInfo(String configInfo) {
// 當配置更新後,通過該回呼函數將最新值返回給使用者。
// 注意回呼函數中不要做阻塞操作,否則阻塞通知線程。
config = configInfo;
System.out.println(configInfo);
}
});
/**
* 如果配置值的內容為properties格式(key=value),可使用下面監聽器。以便一個組態管理多個配置項
*/
/**
ConfigService.addListener("${dataId}", "${group}", new PropertiesListener() {
@Override
public void innerReceive(Properties properties) {
// TODO Auto-generated method stub
acmProperties = properties;
System.out.println(properties);
}
});
**/
} catch (ConfigException e) {
e.printStackTrace();
}
// 測試讓主線程不退出,因為訂閱配置是守護線程,主線程退出守護線程就會退出。 正式代碼中無需下面代碼
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 通過get介面把配置值暴露出去使用
public static String getConfig() {
return config;
}
// 通過get介面把配置值暴露出去使用
public static Object getPorpertiesValue(String key) {
if (acmProperties != null) {
return acmProperties.get(key);
}
return null;
}
}
傳參方式
為了協助您快速入門,以上範例程式碼中採用了以代碼初始化參數的方式。但是,實際生產中可能有不同環境,例如不同的帳號、地區或命名空間,而參數因環境而異,因此需要通過變數傳入。為了方便配置入參和降低配置成本,ACM 提供了多種傳參方式。
說明 在 EDAS 環境下發布需要注意,EDAS 沒有公網環境。
初始化參數 | 傳參方法 |
endpoint | 優先順序由高到低:
|
namespace | 優先順序由高到低:
|
ramRoleName | 優先順序由高到低:
說明 ramRoleName 的鑒權優先順序高於 accessKey/ secretKey。 |
accessKey/secretKey | 優先順序由高到低:
|