- 2023-07-03 12:15:40
- 6868 热度
- 0 评论
在之前的《Spring Cloud构建微服务架构:分布式配置中心》一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储。这一设计巧妙的利用Git自身机制以及其他具有丰富功能的Git服务端产品,让Spring Cloud Server在配置存储和管理的上避开了很多与管理相关的复杂实现,使其具备了配置中心存储配置和读取配置的基本能力;而更上层的管理机制,由于不具备普遍适用性,所以Spring Cloud Server并没有自己去实现这部分内容,而是通过Git服务端产品来提供一部分实现,如果还需要更复杂的功能也能自己实现与定义。即便如此,对于Spring Cloud Server默认使用Git来存储配置的方案一直以来还是饱受争议。所以,本文将介绍一下Spring Cloud Config从Edgware版本开始新增的一种配置方式:采用数据库存储配置信息。
构建配置中心服务端
第一步:创建一个基础的Spring Boot项目,在pom.xml中引入几个主要依赖:
spring-cloud-config-server
:配置中心的基础依赖spring-boot-starter-jdbc
:由于需要访问数据库,所以需要加载jdbc的依赖mysql-connector-java
:MySQL数据库的连接包flyway-core
:该内容非强制,主要用来管理schema(如果您不了解可以看一下这篇文章)
<parent> |
第二步:准备schema创建文件。在resources
下创建schema
目录,并加入V1__Base_version.sql
文件,具体内容如下:
CREATE TABLE `properties` ( |
该脚本会在程序运行时由flyway自动执行
第三步:创建应用主类,具体如下:
@EnableConfigServer |
这里增加了一些测试用数据,以便于后续的配置读取验证。
第四步:配置application.properties
,具体内容如下:
spring.application.name=config-server-db |
这里主要涉及几个配置:
spring.profiles.active=jdbc
:必须设置,将配置中心的存储实现切换到jdbc的方式spring.cloud.config.server.jdbc.sql
:非必须,这里由于采用mysql数据源,key
、value
是保留关键词,原生的实现语句会报错,所以需要重写一下这句查询语句(如果存储的表结构设计不同于上面准备的内容,也可以通过这个属性的配置来修改配置的获取逻辑)spring.datasource.*
:存储配置信息的数据源配置,这里采用mysql,开发者根据自己实际情况修改flyway.locations
:flyway加载schema创建sql的位置
服务端配置验证
完成了上一节内容之后,我们就已经构建一个通过数据酷来存储配置内容的配置中心了,下面我们可以通过配置中心暴露的端点来尝试读取配置。
第一步:先将上面构建的配置中心启动起来。
第二步:验证配置信息获取:
curl http://localhost:10020/config-client/stage/
,获取信息config-client
服务stage
环境的配置内容,根据上面的数据准备,我们会获得如下返回内容:
{ |
curl http://localhost:10020/hello-service/stage/develop
,获取信息hello-service
服务,stage
环境,develop
标签的配置内容,根据上面的数据准备,我们会获得如下返回内容:
{ |
关于如何访问Spring Cloud Config构建配置中心获取配置信息的详细内容
,可以查看前文:《Spring Cloud构建微服务架构:分布式配置中心》,本文不做详细介绍。
总结
本文主要具体介绍了在Spring Cloud Config在Edgware版本开始新增的JDBC存储的使用思路,具体使用实际上还有很多可以优化的空间,比如:索引的优化、查询语句的优化;如果还需要进一步定制管理,对于表结构的优化也是很有必要的。
最后,安利一个基于Spring Cloud Config的配置管理项目:https://github.com/dyc87112/spring-cloud-config-admin,正在紧锣密鼓的开发中,尽情期待!
本文示例
读者可以根据喜好选择下面的两个仓库中查看config-server-db
和config-client
两个项目:
- Github:https://github.com/dyc87112/SpringCloud-Learning/
- Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!
- Spring(403)
- Boot(208)
- Spring Boot(187)
- Java(82)
- Cloud(82)
- Spring Cloud(82)
- Security(60)
- Spring Security(54)
- Boot2(51)
- Spring Boot2(51)
- Redis(31)
- SQL(29)
- Mysql(25)
- IDE(24)
- Dalston(24)
- MVC(22)
- JDBC(22)
- IDEA(22)
- mongoDB(22)
- Web(21)
- CLI(20)
- SpringMVC(19)
- Alibaba(19)
- SpringBoot(17)
- Docker(17)
- Git(16)
- Eclipse(16)
- Vue(16)
- ORA(15)
- JPA(15)
- Apache(15)
- Mybatis(14)
- Oracle(14)
- jdk(14)
- Tomcat(14)
- Linux(14)
- HTTP(14)
- XML(13)
- JdbcTemplate(13)
- OAuth(13)
- Nacos(13)
- Pro(13)
- Data(12)
- JSON(12)
- OAuth2(12)
- stream(11)
- int(11)
- Myeclipse(11)
- Bug(10)
- not(10)
- ast(9)
- maven(9)
- Map(9)
- Hystrix(9)
- Swagger(8)
- APP(8)
- Bit(8)
- API(8)
- session(8)
- Window(8)
- HTML(7)
- Github(7)
- JavaMail(7)
- Cache(7)
- File(7)
- IntelliJ(7)
- mail(7)
- windows(7)
- too(7)
- RabbitMQ(6)
- and(6)
- star(6)
- Excel(6)
- Log4J(6)
- pushlet(6)
- apt(6)
- read(6)
- Freemarker(6)
- WebFlux(6)
- JSP(6)
- Bean(6)
- error(6)
- nginx(6)
- Server(6)
- jar(6)
- ueditor(6)
- ehcache(6)
- UDP(6)
- JWT(5)
- rdquo(5)
- PHP(5)
- Struts(5)
- string(5)
- Syntaxhighlighter(5)
- script(5)
- Tool(5)
- Controller(5)
- swagger2(5)
- ldquo(5)
- input(5)