簡體   English   中英

來自 Spring 引導的 Amazon AppConfig

[英]Amazon AppConfig from Spring Boot

如何在我的 spring 啟動應用程序中從 aws appconfig 訪問配置?

由於 appconfig 是一項新服務,是否有我們可以使用的 java sdk,因為我在https://github.com/aws/aws-sdk-java/tree/master/src/samples中還沒有看到 appconfig 的任何內容

以下是我如何將 AWS AppConfig 集成到我的 Spring Boot 項目中。

首先,讓我們確保我們的 pom.xml 中有這個依賴項:

 <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-appconfig</artifactId>
      <version>1.12.134</version>
 </dependency>

接下來,讓我們創建一個我們自己的 AWS AppConfig Client 的簡單配置類:

@Configuration
public class AwsAppConfiguration {

    private static final Logger LOGGER = LoggerFactory.getLogger(AwsAppConfiguration.class);

    private final AmazonAppConfig appConfig;
    private final GetConfigurationRequest request;

    public AwsAppConfiguration() {
        appConfig = AmazonAppConfigClient.builder().build();
        request = new GetConfigurationRequest();
        request.setClientId("clientId");
        request.setApplication("FeatureProperties");
        request.setConfiguration("JsonProperties");
        request.setEnvironment("dev");
    }

    public JSONObject getConfiguration() throws UnsupportedEncodingException {
        GetConfigurationResult result = appConfig.getConfiguration(request);
        String message = String.format("contentType: %s", result.getContentType());
        LOGGER.info(message);

        if (!Objects.equals("application/json", result.getContentType())) {
            throw new IllegalStateException("config is expected to be JSON");
        }

        String content = new String(result.getContent().array(), "ASCII");
        return new JSONObject(content).getJSONObject("feature");
    }
}

最后,讓我們創建一個從 AWS AppConfig 輪詢配置的計划任務:

@Configuration
@EnableScheduling
public class AwsAppConfigScheduledTask {

    private static final Logger LOGGER = LoggerFactory.getLogger(AwsAppConfigScheduledTask.class);

    @Autowired
    private FeatureProperties featureProperties;

    @Autowired
    private AwsAppConfiguration appConfiguration;

    @Scheduled(fixedRate = 5000)
    public void pollConfiguration() throws UnsupportedEncodingException {
        LOGGER.info("polls configuration from aws app config");
        JSONObject externalizedConfig = appConfiguration.getConfiguration();
        featureProperties.setEnabled(externalizedConfig.getBoolean("enabled"));
        featureProperties.setLimit(externalizedConfig.getInt("limit"));
    }

}

我遇到了這個問題,因為我還試圖弄清楚如何最好地將 AWS AppConfig 集成到 Spring Boot 中。

這是我創建的一篇文章。 你可以在這里訪問它: https : //levelup.gitconnected.com/create-features-toggles-using-aws-appconfig-in-spring-boot-7454b122bf91

此外,源代碼可在 github 上獲得: https : //github.com/emyasa/medium-articles/tree/master/aws-spring-boot/app-config

首先我添加了依賴項

    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>appconfig</artifactId>
        <version>2.18.41</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/software.amazon.awssdk/appconfigdata -->
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>appconfigdata</artifactId>
        <version>2.19.4</version>
    </dependency>

然后構建客戶端

        client = AppConfigDataClient.builder()
            .credentialsProvider(() -> AwsBasicCredentials.create("<your id>", "your secret key"))
            .region(Region.<your region>)
            .build();

使用客戶端啟動配置session

        StartConfigurationSessionRequest startConfigurationSessionRequest = StartConfigurationSessionRequest.builder()
            .applicationIdentifier("<your application id>")
            .environmentIdentifier("your environment id")
            .configurationProfileIdentifier("your config id")
            .build(); 

一開始獲取 session 令牌並將其用於初始調用。

String sessionToken = client.startConfigurationSession(startConfigurationSessionRequest).initialConfigurationToken();
    
    
    GetLatestConfigurationRequest latestConfigurationRequest = GetLatestConfigurationRequest.builder()
            .configurationToken(sessionToken)
            .build();
    GetLatestConfigurationResponse latestConfigurationResponse = client.getLatestConfiguration(latestConfigurationRequest);
    String response =  latestConfigurationResponse.configuration().asUtf8String();

您可以使用響應中可用的下一個令牌進行下一次調用。 可以根據需要緩存令牌。

2023,使用aws-java-sdk-appconfigdata

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-appconfigdata</artifactId>
    <version>1.12.394</version>
</dependency>

例子:

@Slf4j
@Configuration
@EnableScheduling
public class AWSAppConfig {

    private String token;
    private final AWSAppConfigData client;

    public AWSAppConfig() {
        log.info("init app config");
        var client = AWSAppConfigDataClient.builder().build();
        var request = new StartConfigurationSessionRequest();
        request.setEnvironmentIdentifier("prod");
        request.setApplicationIdentifier("my-app");
        request.setConfigurationProfileIdentifier("my-config");
        request.setRequiredMinimumPollIntervalInSeconds(15);
        var result = client.startConfigurationSession(request);
        this.client = client;
        this.token = result.getInitialConfigurationToken();
    }

    @Scheduled(fixedRate = 20000)
    public void pollConfiguration() {
        var request = new GetLatestConfigurationRequest();
        request.setConfigurationToken(token);
        var result = client.getLatestConfiguration(request);
        this.token = result.getNextPollConfigurationToken();
        var configuration = StandardCharsets.UTF_8.decode(result.getConfiguration()).toString();
        log.info("content type: {}", result.getContentType());
        log.info("configuration: {}", configuration);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM