1. 属性spring.application.name与eureka.instance.appname区别

    在eureka界面显示的是eureka.instance.appname,而消费者向访问服务提供者时用到的应用名是spring.application.name

    比如:在消费者这一侧,有方法:

    @RequestMapping(value="/ribbon-consumer")
        public String helloconsumer(){
            return restTemplate.getForEntity("http://***/hello", String.class).getBody();
       
        }

    这里的***就是spring.application.name。 所以当spring.application.name与eureka.instance.appname不相同时就比较坑,因为我们不能使用eureka界面显示的应用名去访问应用。

    一般情况下,我们只配置spring.application.name就好,它可以为appname赋值:(但是,如果用户两个都配了,那就无法覆盖appname的值了,结果appname就是eureka.instance.appname的值,因为系统先调用setEnvironment方法,后调用setAppname方法,如果eureka.instance.appname不配置,setAppname方法就不调了,下断点试过,服了,所以以后只配置spring.application.name即可。)

    @ConfigurationProperties("eureka.instance")
    public class EurekaInstanceConfigBean
            implements CloudEurekaInstanceConfig, EnvironmentAware {

        public void setEnvironment(Environment environment) {
            this.environment = environment;
            // set some defaults from the environment, but allow the defaults to use relaxed
            // binding
            String springAppName = this.environment.getProperty("spring.application.name",
                    "");
            if (StringUtils.hasText(springAppName)) {
                setAppname(springAppName);
                setVirtualHostName(springAppName);
                setSecureVirtualHostName(springAppName);
            }
        }

    }

  2. @EnableEurekaClient与@EnableDiscoveryClient区别