如何从外部 api 读取一个 属性 并在 springboot 中将其设置为应用程序上下文以使其全局可用?

How to read a property from external api and set it to application context in springboot to make it available globally?

我必须在我的 Springboot java 应用程序中的多个位置调用外部 api。外部 api 始终只是 return 一个静态常量字符串值。

请在下面找到示例代码,以更好地解释我的意图以及我希望在一天结束时实现的目标


我的示例代码调用外部 api 使用 RestTemplate 来检索字符串值。

ResponseEntity<String> result = new RestTemplate().exchange("http://localhost:7070/api/test/{id}", 
                          HttpMethod.GET, entity, String.class, id);

JSONObject jsonResponse = new JSONObject(result.getBody());

String  reqVal  = jsonResponse.getString("reqKey");

现在,我的目的是使此字符串在应用程序中全局可用,以避免多次调用此 api。

我正在考虑在应用程序启动时调用此扩展 api 并在 Springboot 应用程序上下文中设置此字符串值,以便可以从应用程序的任何位置检索它。

任何人都可以建议,我怎样才能达到我的上述要求? 或者还有其他更好的选择吗?

提前致谢!

我会将其存储在调用外部 API 的 Spring 托管 Bean 的内存中,然后允许任何其他 Spring 托管 Bean 从该组件获取它。

@Service
public class ThirdPartyServiceClient implements ApplicationListener<ContextRefreshedEvent> {

    private String reqKey = null;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        (...)
        ResponseEntity<String> result = new RestTemplate()
            .exchange("http://localhost:7070/api/test/{id}", HttpMethod.GET, entity, String.class, id);
        JSONObject jsonResponse = new JSONObject(result.getBody());
        this.reqKey = jsonResponse.getString("reqKey");
    }

    public String getKey() {
        return reqKey;
    }
}

现在您只需将 ThirdPartyServiceClient Spring 管理的 bean 注入到任何其他能够调用 getKey() 方法的 bean 中。