SpringCloud之自动化配置-config
编程开发的时候有没有觉得很多配置文件需要维护,比如,修改了数据库连接,所有用到该数据库的服务配置都得替换,是不是超级的麻烦呢
下面,给大家介绍一下Spring提供的配置自动化组件-spring cloud config
config也就是配置的意思,springcloud也是想尽办法帮助大家节约开发和发布成本,这也是为什么大家喜欢用他的原因,并且这个配置中心也是极其的简单。
首先,所有的配置文件有两部分组成,第一:文件名 第二:所属的环境(即本地环境,测试环境或者线上环境,通常用dev,sit或者uat表示)
存储配置文件需要有个存储的地方,目前用的比较多的是数据库和远程仓库git
这次我已git为例,首先看下目录结构
是不是非常的简单,一个目录下,就只有配置文件,文件格式命名: {profile}-{env}.properties
这里我推荐用properties后缀(因为我用yml文件试了很多次,都没有读取到数据,有机会再试试吧,大家知道的话也可以下方评论留言哈!)
该配置文件目录建好后,上传提交到git
git地址为:
http://chengjq@192.168.129.200:8089/r/java/springConfig.git
新建配置中心服务config-server
还是先来看下目录结构,仍然是最简单的ConfigServerApplication.java , application.yml , pom.xml三个文件
1.pom.xml
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- spring boot test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
config-server主要依赖于spring-cloud-starter-eureka-server,spring-cloud-starter-config这两个包
2.application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8888 spring:
cloud:
config:
server:
git:
uri: http://chengjq@192.168.129.200:8089/r/java/springConfig.git
searchPaths: /**
username: chengjq
password: 123456
label: master application:
name: config-server
spring.cloud.config.server.git.uri:git的地址,即上面的 http://chengjq@192.168.129.200:8089/r/java/springConfig.git
searchpath:目录 /** 搜索所有
username:git的用户名
password:git的密码
当然,公开的git可以不填username和password
application.name:该应用的名字
3.ConfigServerApplication.java
@EnableEurekaServer
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
@EnableConfigServer:作为配置中心的标志
启动该项目,发现在eureka中已经注册成功,端口为配置文件中定义的8888
ok,至此,配置中心已经搭建成功
下面,我们来写个例子,看下是否可以从git的配置文件中读取到该属性
配置客户端 config-client
首先,还是看下目录结构
结构还是很简单,就这三个文件,ConfigClientApplication.java , application.yml , pom.xml
1.pom.xml
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- spring boot test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
想要使用配置中心,还是得有依赖:spring-cloud-starter-config
2. application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/ spring:
cloud:
config:
name: ceshi
profile: dev
label: master
discovery:
enabled: true
service-id: config-server # uri: http://localhost:8888/ application:
name: config-client server:
port: 8089 management:
security:
enabled: false
这块多了些参数
spring.cloud.config.name:文件名(我的文件名叫ceshi)
profile:适用的环境(我的是开发环境 简称dev)
label:分支(目前是master,即为主干)
uri:定义的config服务地址(我这里的是http://localhost:8888/,即为配置中心的地址)
discovery.enabled:服务发现(true or false )
discovery.service-id:服务名
正常情况下,uri和discovery.enabled,discovery.service-id任选其一就行,如果git会经常换地址,可以使用服务名
3.ConfigClientApplication.java
@SpringBootApplication
@EnableEurekaClient
@RestController
@RefreshScope
public class ConfigClientApplication { @Value("${name}")
String name; @Value("${age}")
String age; public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
} @RequestMapping(value = "/hi")
public String hi(){
return "我是"+name+",今年"+age+"岁";
}
}
启动该客户端,看到应用已被注册成功
浏览器输入:http://localhost:8089/hi.发现获取到了数据
至此,已经可以从配置中心获取到数据了
但是,大家会发现,如果我去修改配置文件信息,并且提交到git后,没法实施刷新页面信息,无法做到自动化配置
当然,springcloud还是提供了解决方案
看config-client中的配置文件,发现有个依赖:spring-boot-starter-actuator 该以来就是提供实时刷新,在需要获取配置数据的类上加上@RefreshScope
然后在postman或者其他api接口调用工具上使用刷新接口即可,注意是post请求,这应该算是半自动化,如果想实现全自动化,可以实施监控git的push操作。
再次去刷新地址,发现数据修改了
至此,半自动化的spring cloud config配置已完成,如有问题,请下方评论,谢谢!
SpringCloud之自动化配置-config的更多相关文章
- springcloud的分布式配置Config
1.为什么要统一配置管理? 微服务由多个服务构成,多个服务多个配置,则对这些配置需要集中管理.不同环境不同配置,运行期间动态调整,自动刷新. 统一管理微服务的配置:分布式配置管理的一些组件: zook ...
- SpringCloud入门(十): Config 统一配置中心
SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...
- Spring Boot 探索系列 - 自动化配置篇
26. Logging Prev Part IV. Spring Boot features Next 26. Logging Spring Boot uses Commons Logging f ...
- springcloud(七):配置中心svn示例和refresh
上一篇springcloud(六):配置中心git示例留了一个小问题,当重新修改配置文件提交后,客户端获取的仍然是修改前的信息,这个问题我们先放下,待会再讲.国内很多公司都使用的svn来做代码的版本控 ...
- springcloud(九):配置中心和消息总线(配置中心终结版)
我们在springcloud(七):配置中心svn示例和refresh中讲到,如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端 ...
- 【Spring】多数据源导致自动化配置失败问题
一.问题描述 笔者根据需求在开发过程中,需要在原项目的基础上(单数据源),新增一个数据源C,根据C数据源来实现业务.至于为什么不新建一个项目,大概是因为这只是个小功能,访问量不大,不需要单独申请个服务 ...
- Linux小记 — Ubuntu自动化配置
前言 工欲善其事,必先利其器.经过多次的重复配置ubuntu开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,python. ...
- Linux 小记 — Ubuntu 自动化配置
前言 工欲善其事,必先利其器.经过多次的重复配置 ubuntu 开发坏境,我终于决定花点时间总结一下,并将其写成一个自动化配置脚本.服务器实例:ubuntu 16.04,技术栈:shell,pytho ...
- [转]springcloud(九):配置中心和消息总线(配置中心终结版)
https://www.cnblogs.com/ityouknow/p/6931958.html springcloud(九):配置中心和消息总线(配置中心终结版) 我们在springcloud(七) ...
随机推荐
- streamsets Executors 说明
执行程序阶段在收到事件时触发任务.执行者不会写入或存储事件. 将执行程序用作事件流中数据流触发器的一部分,以执行事件驱动的与管道相关的任务,例如在目标关闭时移动完全写入的文件. 可以使用的execut ...
- Java 的Integer、int与new Integer到底怎么回事?
先做一些总结,询问了些经验比较多的师傅,在这里表示感谢,然后自己总结下,今天的收获分享给大家: 1. int 和Integer在进行比较的时候,Integer会进行拆箱,转为int值与int进行比较. ...
- QQ空间点赞代码
jQuery("a.qz_like_btn_v3[data-clicklog='like']").each(function(index,item){ console.log(it ...
- c# 爬虫(二) 模拟登录
有了上一篇的介绍,这次我们来说说模拟登录,上一篇见 :c# 爬虫(一) HELLO WORLD 原理 我们知道,一般需要登录的网站,服务器和客户端都会有一段时间的会话保持,而这个会话保持是在登录时候建 ...
- Python 迭代对象、迭代器、生成器
原文出处: liuzhijun 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文 ...
- SIM800/SIM900/SIM7000/SIM7600底层操作接口_句柄方式完全分离通信底层
使用SIMCOM公司通信模块将底层的通信与应用完全进行了分离,便于移植. SIMCOM.h //定义了相关的结构体与类型. SIMCOM_AT.c//定义了底层的AT接口 SIMCOM_GSM.c// ...
- 智能家居入门DIY——【三、GP2Y10之颗粒物传感器】
这个传感器接线算比较简单的,程序也不麻烦.不过这东西是颗粒物传感器吧,不是神马PM2.5(总悬浮颗粒物),不是神马PM10(可吸入颗粒物).插个螺丝刀进去度数也是变的,不是说的很清楚原理是反光嘛……… ...
- nginx 点播mp4方法
1.配置文件 配置文件中rmtp部分: application vod { play html; } 配置文件中http部分: location ~ .mp4$ { root html; mp4; l ...
- File根据inputstream复制文件到临时目录,使用完之后删除
项目中有这个需求: 1)上传文件通过公司平台的校验,校验成功后,通过接口,返回文件流: 2)我们根据这个文件流进行操作.这里,先将文件流复制文件到项目临时目录WEB-INF/temp;文件使用完毕,删 ...
- POJ 1061 青蛙的约会(拓展欧几里得求同余方程,解ax+by=c)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 122871 Accepted: 26147 Descript ...