【问题标题】:Initialize spring cloud config client, for SDK development初始化spring cloud config客户端,用于SDK开发
【发布时间】:2016-11-25 19:35:00
【问题描述】:

这个问题和这个existing question有点相似

我仍在尝试导航或尝试找到可以自定义的正确 Spring Boot 代码。我需要开发与现有配置服务器连接并为键提供值的 java SDK。此 SDK 将用于 java 应用程序,可能是也可能不是 Spring 应用程序。 QA 将使用相同的 SDK 对配置服务器进行回归测试。

所以问题是,如果给定

  1. 配置服务器网址
  2. 应用名称
  3. 活动配置文件(不需要标签,它将是默认主), 我可以初始化一些配置客户端类,它会给我简单的方法,如 public String getKeyValue(final String key)

我正在查看诸如 ConfigServicePropertySourceLocator、CompositePropertySource、ConfigClientAutoConfiguration、ConfigServiceBootstrapConfiguration 等类的来源。 p>

我需要手动构建环境对象吗?如果是,怎么做?

【问题讨论】:

  • 我不太确定你的问题在哪里。本质上,您可以通过 URL 访问配置服务器,该 URL 具有给出的三项内容并以您喜欢的格式(yaml、json)检索。所以你需要的一切都是HttpUrlConnection,也许还有一个 JSON 库,就是这样。
  • 我试图避免解析 JSON 并自己获取值。客户端应用程序也可以提供 cmdLine 覆盖参数。为了使它完美,我可能最终会重新发明轮子。因此,我想使用配置客户端库作为 SDK 来配置服务器。
  • 但是我没有得到你的目标。你想保持尽可能低调还是重复使用现有的东西?如果第一次看到上面的评论,如果第二次你可能无法在没有 Spring 的情况下使用它。
  • 嗨,丹,正如我所说,它可能与现有问题重复。为了回答你,我需要在非 spring 环境中运行这个 SDK(配置客户端)。不过,我可以在 spring boot 上添加依赖项。我还需要重写一些方法来自定义我们如何获取值和文件内容。 (配置服务器也支持提供文件内容)

标签: spring spring-boot spring-cloud-config


【解决方案1】:

我取得了一些成功。发布可能的答案供其他人进一步微调。

@SpringBootApplication
public class ConfigSDKApp {

    @Autowired
    public SomeSpringBean someBean = null;

    private static ConfigSDKApp INSTANCE = null;

    public synchronized static ConfigSDKApp getInstance(String[] args) {
        if (null != INSTANCE) {
            return INSTANCE;
        }

        SpringApplication sprApp = new SpringApplication(ConfigSDKApp.class);
    sprApp.setWebEnvironment(false);
    ConfigurableApplicationContext appContext = sprApp.run(args);
    ConfigSDKApp app = appContext.getBean(ConfigSDKApp.class);//new ConfigSDKApp();

        INSTANCE = app;
        return INSTANCE;
    }
}

这是一种单例类(但公共构造函数)。因此代码气味。 另外,如果这个 SDK 在 springboot 客户端中运行怎么办。 ApplicationContext 和环境已经初始化。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2020-06-27
    • 1970-01-01
    • 2016-02-18
    • 2021-01-13
    相关资源
    最近更新 更多