springCloud 读取Github配置文件的实例应用

前言:

   1 系统默认的配置文件一般命名为application,也常命名为bootstrap引导应用程序名称,当同时存在application和bootstrap
 两种配置文件时,系统会优先读取application配置文件的信息。

   2 spring cloud 读取配置文件,一般采取服务端和客户端微服务集群方式,服务端配置资源来源类型(profile),默认从git读取,还有从SVN和native(本地文件系统读取)与vault(一款资源控制工具)的读取类型,服务端还有主要配置资源来源的地址、用户名、密码、资源文件所在文件夹目录名称;客户端配置服务端地址,文件的前缀名称,文件所属仓库(git为例),文件所属环境,环境一般分为四种,test测试环境,外部用户无法访问,专门给测试人员使用的,版本相对稳定;dev开发环境,外部用户无法访问,开发人员使用,版本变动很大;pre灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样;pro生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。客户端可以通过添加actuator端点的依赖使用httpclient对配置文件的更新进行动态刷新,以免每一次对配置文件的修改就要重启服务,造成比较大的代价!

 

本例的git文件结构:

     

 

 

服务端实例:

   服务端主要做添加依赖和服务配置工作,其他不需要添加任何功能,代码如下

  

pom.xml 依赖:

<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
</dependencies>


yml 配置:

server:
  port: 8888
management:
  security:
    enabled: false
spring:
  application:
     name: configserver
  cloud:
    config:
      server:
         git:
          uri: https://github.com/higherzjm/mynew2019 # 配置文件所在git地址
          search-paths: myconfig # 配置文件所在文件夹目录名称
          username: higherzjm
          password: ****

  启动类:

@SpringBootApplication
@EnableConfigServer //启动配置服务
public class ConfigApp {
	public static void main(String[] args) {
		new SpringApplicationBuilder(ConfigApp.class).run(args);
	}
}
服务端启动之后可以通过在浏览器验证是否可以读取到配置文件,如访问 http://localhost:8888/zjm-config/dev 验证是否可以在配置目录下读取zjm-config-dev配置文件,如可以会返回如下类似结果

 

 

客户端实例:

     客户端配置较为复杂,需要配置服务端地址或服务id,文件所属git仓库,文件名称(前缀),文件所属环境,添加的依赖除了基本的spring cloud依赖外,还可以添加spring-boot-starter-actuator端点依赖,对配置文件的修改进行动态刷新,可通过httpclient访问refresh端点进行刷新操作,详细代码如下:

pom.xml 依赖:

   <dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>1.5.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
			<version>1.5.4.RELEASE</version><!--进行端口操作的依赖-->
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.3</version>
		</dependency>
	</dependencies>

 

yml 配置:

management:
  security:
    enabled: false
spring:
  #application:
    #name: zjm-config
  cloud:
    config:
      #url: http://localhost:8888/  #读取配置文件服务端的地址
      profile: dev # 文件所属环境
      name: zjm-config #文件名称(前缀),跟profile结合在一起就是zjm-config-dev.yml 或zjm-config-dev.properties
      # 没有 cloud.config.name,也没有 application.name,则读取 application-dev.yml 或application-dev.properties
      # 如果没有cloud.config.name,也没有 application.name,也没有 cloud.config.profile 则读取 application.yml 或application.properties
      # 如果存在一样前缀名称的properties和yml文件,会优先读取properties为后缀的文件
      label: master #所属仓库
      discovery:
        service-id: configserver #服务端应用id,如果没有配置服务端的URL地址,直接读取服务端id也行



控制器代码:

@RestController
public class ClientController {

	@Autowired
	private Environment env;
	@RequestMapping(value = "/gp", method = RequestMethod.GET)
	public String getProp() {
		System.out.println("获取参数值");
		String value=env.getProperty("springcloud.username");
		if (value==null){
			value=env.getProperty("springcloud.config.username");
		}
		System.out.println("value:"+value);
		return value;
	}

	/**
	 * 调用刷新git配置的端点,当git配置文件有更改时,
	 * 只要调用该方法就可以刷新,不要重启客户端和服务端程序
	 * @return
	 */
	@RequestMapping(value = "/refreshConfig", method = RequestMethod.GET)
	public String refreshConfig() {
		String  value="";
		try {
			CloseableHttpClient client = HttpClients.createDefault();
			HttpPost post = new HttpPost("http://localhost:8080/refresh");
			HttpResponse response = client.execute(post);
			value="刷新成功:"+EntityUtils.toString(response.getEntity());
		}catch (Exception e){
			e.printStackTrace();
			value="刷新异常";
		}
		System.out.println("value:"+value);
		return value;
	}
}

客户端在浏览器调用刷新配置文件端点的示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值