我正在尝试创建Spring Application而不引用任何外部文件。这应该是一个模块,然后您将其包含为依赖项,配置和使用将服务插入现有生态系统。这就是我这样做的方式:
Map<String, Object> properties = new HashMap<>();
properties.put("server.address", "0.0.0.0")
properties.put("server.port", 8080)
properties.put("spring.profiles.active", "cloud")
properties.put("spring.application.name", "someApp")
properties.put("spring.cloud.config.failFast", true)
properties.put("spring.cloud.config.discovery.enabled", true)
properties.put("spring.cloud.config.discovery.serviceId", "config")
properties.put("eureka.instance.preferIpAddress", true)
properties.put("eureka.instance.statusPageUrlPath", "/health")
new SpringApplicationBuilder()
.bannerMode(Banner.Mode.OFF)
.properties(properties)
.sources(SpringConfiguration.class)
.web(false)
.registerShutdownHook(true)
.build()
然后我继续通过环境变量在运行命令中提供Eureka默认区域:
--env eureka_client_serviceUrl_defaultZone='http://some-host:8765/eureka/' --env SPRING_CLOUD_CONFIG_LABEL='dev' --env SPRING_CLOUD_INETUTILS_PREFERRED_NETWORKS='10.0'
应用程序在Eureka中成功注册,但遗憾的是它尝试在此之前获取配置,它正在默认URL(http://localhost:8888
)下查找它,而不是从注册表中获取配置服务器IP。是的,如果我将所有这些属性放在bootstrap.yml
文件中,它确实有效。我可以在不使用文件资源的情况下以某种方式使其工作吗?
答案 0 :(得分:0)
您正在使用SpringApplicationBuilder传递属性,SpringApplicationBuilder负责SpringApplication和ApplicationContext实例。
从文档中,此处提供的属性将是ApplicationContext而不是BootstrapContext的一部分。 ApplicationContext是BootstrapContext的子代。
您可以在此处阅读有关Bootstrap上下文的更多信息 -
Bootstrap.yml / properties用于配置Bootstrap上下文。
您可以查看这些属性以更改文件的名称或位置 -
spring.cloud.bootstrap.name - bootstrap(default)
spring.cloud.bootstrap.location
您必须使用文件资源(yml或属性)。