覆盖spring-boot EurekaInstanceConfigBean

德克·拉乔夫斯基(Dirk Lachowski)

我正在构建一个基于dockerized的基于spring-cloud的微服务,该微服务已在eureka注册。注册过程的一部分是要求主机提供映射到容器的端口,以便docker可以为容器化服务选择一个空闲的主机端口。

我有一个基于主机的服务,dockerized服务可以请求端口映射,现在正尝试使用外部端口向eureka注册微服务。

我在微服务中获得正确的端口,但无法覆盖EurekaInstanceConfig

我试过的

@SpringBootApplication
@EnableEurekaClient
public class ApplicationBootstrapper {

    @Value("${containerIp}")
    private String containerIp;

    @Bean
    public EurekaInstanceConfigBean eurekaInstanceConfigBean() {
        EurekaInstanceConfigBean config = new EurekaInstanceConfigBean();
        String hostPort = new RestTemplate().getForObject(
            "http://{hostname}:7691/container/{id}/hostPort", 
            String.class, 
            containerIp, 
            config.getHostname());

        config.setPreferIpAddress(true);
        config.setIpAddress(containerIp);
        config.setNonSecurePort(Integer.valueOf(hostPort));

        return config;
}

EurekaInstanceConfigBean创建了我的自定义,但未获取配置(该服务向其内部容器端口注册)。

问题是:如何覆盖EurekaInstanceConfigBean

编辑(2):

正如Steve指出的那样,现在可以使用spring-cloud-1.0.0.RELEASE了,我以前的大多数解决方案现在已经过时了。我附上了我的最终解决方案,以防有人尝试类似的操作:

@Configuration
public class EurekaConfig {

    private static final Log logger = LogFactory.getLog(EurekaConfig.class);

    @Value("${containerIp}")
    private String containerIp;

    @Value("${kompositPort:7691}")
    private String kompositPort;

    @Bean
    public EurekaInstanceConfigBean eurekaInstanceConfigBean() {
        Integer hostPort = new RestTemplate().getForObject(
            "http://{containerIp}:{port}/container/{instanceId}/hostPort",
            Integer.class, 
            containerIp, 
            kompositPort, 
            getHostname());

        EurekaInstanceConfigBean config = new EurekaInstanceConfigBean();
        config.setNonSecurePort(hostPort);
        config.setPreferIpAddress(true);
        config.setIpAddress(containerIp);
        config.getMetadataMap().put("instanceId", getHostname());
        return config;
    }

    private static String getHostname() {
        String hostname = null;
        try {
            hostname = InetAddress.getLocalHost().getHostName();
        } catch (UnknownHostException e) {
            logger.error("Cannot get host info", e);
        }
        return hostname;
    }

}
史蒂夫·麦凯

该问题仅在6天前解决在此修复程序之前,您为nonSecurePort设置的任何内容都将被覆盖${server.port}我的建议有点怪异,但是在使用预发布库时您可以做什么,那就是子类化EurekaInstanceConfigBean和实现InitializingBean,因此可以在中设置端口afterPropertiesSet()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring Boot Logging覆盖颜色

来自分类Dev

在Spring-Cloud-Netflix(Brixton.RELEASE)中为AWS配置EurekaInstanceConfigBean

来自分类Dev

在Spring-Cloud-Netflix(Brixton.RELEASE)中为AWS配置EurekaInstanceConfigBean

来自分类Dev

Spring Boot EnvironmentPostProcessor覆盖命令行

来自分类Dev

在Spring Boot中使用@TestPropertySource覆盖@PropertySource

来自分类Dev

Spring Boot-从Webjar覆盖索引页面

来自分类Dev

测试中的Spring Boot覆盖接口

来自分类Dev

Spring Boot-从Webjar覆盖索引页面

来自分类Dev

测试中的Spring Boot覆盖接口

来自分类Dev

如何覆盖默认的 Spring Boot 登录页面?

来自分类Dev

如何在Spring Boot中覆盖Spring Security默认配置

来自分类Dev

Spring Boot覆盖默认的REST异常处理程序

来自分类Dev

如何覆盖默认的activiti spring-boot配置

来自分类Dev

覆盖更高版本的Spring Boot BOM策划的依赖性

来自分类Dev

Spring Boot:从Kubernetes ConfigMap覆盖application.yml属性

来自分类Dev

Spring Boot覆盖第三方依赖版本

来自分类Dev

Spring boot 2.0.0.BUILD-SNAPSHOT rest:无法覆盖_serializer?

来自分类Dev

Spring boot 测试配置不能很好地覆盖正常配置

来自分类Dev

Spring Boot YARN 覆盖配置,连接到 Azure

来自分类Dev

控制器中的 Spring Boot 覆盖功能

来自分类Dev

Spring Boot 应用程序不会覆盖特定属性

来自分类Dev

在Spring-Boot的生产过程中如何覆盖application.properties?

来自分类Dev

Spring Boot:如何在Linux ENV .profile上用破折号“-”覆盖属性?

来自分类Dev

覆盖特定的Spring Boot运行状况指示器

来自分类Dev

Spring Boot命令行属性不覆盖application.properties中定义的属性

来自分类Dev

catalina.base系统属性在spring-boot中覆盖吗?

来自分类Dev

Spring Boot-不覆盖服务器端口属性

来自分类Dev

有没有一种方法可以防止Spring Boot覆盖bean?

来自分类Dev

有没有一种方法可以防止Spring Boot覆盖bean?

Related 相关文章

  1. 1

    Spring Boot Logging覆盖颜色

  2. 2

    在Spring-Cloud-Netflix(Brixton.RELEASE)中为AWS配置EurekaInstanceConfigBean

  3. 3

    在Spring-Cloud-Netflix(Brixton.RELEASE)中为AWS配置EurekaInstanceConfigBean

  4. 4

    Spring Boot EnvironmentPostProcessor覆盖命令行

  5. 5

    在Spring Boot中使用@TestPropertySource覆盖@PropertySource

  6. 6

    Spring Boot-从Webjar覆盖索引页面

  7. 7

    测试中的Spring Boot覆盖接口

  8. 8

    Spring Boot-从Webjar覆盖索引页面

  9. 9

    测试中的Spring Boot覆盖接口

  10. 10

    如何覆盖默认的 Spring Boot 登录页面?

  11. 11

    如何在Spring Boot中覆盖Spring Security默认配置

  12. 12

    Spring Boot覆盖默认的REST异常处理程序

  13. 13

    如何覆盖默认的activiti spring-boot配置

  14. 14

    覆盖更高版本的Spring Boot BOM策划的依赖性

  15. 15

    Spring Boot:从Kubernetes ConfigMap覆盖application.yml属性

  16. 16

    Spring Boot覆盖第三方依赖版本

  17. 17

    Spring boot 2.0.0.BUILD-SNAPSHOT rest:无法覆盖_serializer?

  18. 18

    Spring boot 测试配置不能很好地覆盖正常配置

  19. 19

    Spring Boot YARN 覆盖配置,连接到 Azure

  20. 20

    控制器中的 Spring Boot 覆盖功能

  21. 21

    Spring Boot 应用程序不会覆盖特定属性

  22. 22

    在Spring-Boot的生产过程中如何覆盖application.properties?

  23. 23

    Spring Boot:如何在Linux ENV .profile上用破折号“-”覆盖属性?

  24. 24

    覆盖特定的Spring Boot运行状况指示器

  25. 25

    Spring Boot命令行属性不覆盖application.properties中定义的属性

  26. 26

    catalina.base系统属性在spring-boot中覆盖吗?

  27. 27

    Spring Boot-不覆盖服务器端口属性

  28. 28

    有没有一种方法可以防止Spring Boot覆盖bean?

  29. 29

    有没有一种方法可以防止Spring Boot覆盖bean?

热门标签

归档