在configserver中配置eureka可以使用eureka来查找所需要的配置,不用自己每一个单独配置。

首先是configserver中的pom.xml中使用的jar包。使用的springboot版本为1.5.10.RELEASE

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-config-server</artifactId>
		<version>1.4.1.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		<version>1.4.1.RELEASE</version>
	</dependency>

然后是application.yml中的配置内容:

spring:
  application:
    name: spring-cloud-config-server-eureka
  cloud:
    config:
      server:
        git: #设置git仓库的位置,上面有配置文件。
          uri: https://github.com/XXXXXXX/spring-cloud-config-server-test.git 

server:
  port: 8058
  
#设置eurekaclient的注册地址。

eureka:
  client: 
    service-url:
      defaultZone: http://localhost:80/eureka/
  instance:
     prefer-ip-address: true

然后在启动类上面写上@EnableConfigServer @EnableDiscoveryClient,前面一个是开启configserver后面一个是eureka的客户端。

启动后在eurekaserver的界面中能看到,启动成功。

然后配置client端jar中的需要换为client:

		<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
		<version>1.4.1.RELEASE</version>
	</dependency>
	

由于configclient不是一个独立的jar在搜索框中能够看到,被集成在了spring-cloud-starter-config

然后在bootstrap.yml中的配置内容。

spring: 
  cloud: 
    config:
      discovery:
        enabled: true
        service-id: spring-cloud-config-server-eureka
#当使用了eureka后就不需要config来配置,会通过application.name的值在configserver中查找相应的配置文件。  
#    config: 
#      uri: http://localhost:8052
#      profile: production
#      label: master  #当configserver的后端存储是Git时,默认是master
  application:
    name: foobar #会在git上找和name相同的配置文件,如果找不到,就是默认的配置文件。也将名字改为foobar-dev就可以命中相应的配置文件,这样感觉不是很好。
    
    
eureka:
  client: 
    service-url:
      defaultZone: http://localhost:80/eureka/
  instance:
     prefer-ip-address: true

server.port被我单独配置在了application.yml中

server:
  port: 8059

为了测试configclient的配置成功,还简单的写了一个controller。

@RestController
public class ConfigClientController {

	@Value("${profile}")
	private String profile;
	
	@RequestMapping("/profile")
	public String getProfile() {
		return this.profile;
		
	}
	
}

用于获取配置文件中的profile属性的值。

启动时报错,启动失败,说明配置失败或configserver未启动导致启动失败。原因是找不到配置的该属性,如下:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'profile' in value "${profile}"

在启动configserver和configclient的时候需要注意,要先启动configserver然后启动configclient,不然也会启动失败,因为没有上面配置的profile属性而失败。

 

如果启动成功在日志中会有如下内容:

上面信息说明了本项目的名称和从configserver中获取到的内容。

然后再访问controller中的/profile。

说明配置成功了。

最后是git上面的内容:

application.yml中的内容:

foobar-dev.yml中的内容:

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐