SpringCloud(9)---mysql实现配置中心
mysql实现配置中心
本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程。有关项目源码后期会补上github地址
微服务要实现集中管理微服务配置、不同环境不同配置、运行期间也可动态调整、配置修改后可以自动更新的需求,Spring Cloud Config同时满足了以上要求。
项目代码GitHub地址:https://github.com/yudiandemingzi/spring-cloud-study
一、项目搭建
本次主要用三个微服务
(1)Eureka-server: 7001 注册中心
(2)config-server : 5001 配置中心
(3)product-server : 8001 商品微服务
1、Eureka-server注册中心
注册中心很简单,这里不在重复些,注册中心没有变化。可以看之前写的博客 : SpringCloud(3)---Eureka服务注册与发现
2、配置中心微服务
1、pom.xml
<!--服务中心jar包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--配置中心jar包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <!--连接msql数据库相关jar包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
2、application.yml
#服务名称 server: port: 5001 #连接配置信息 spring: application: name: config-server-jdbc profiles: active: jdbc cloud: config: server: default-label: dev jdbc: sql: SELECT akey , avalue FROM config_server where APPLICATION=? and APROFILE=? and LABEL=? ##################################################################################################### # mysql 属性配置 datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test username: root password: root ##################################################################################################### #指定注册中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:7001/eureka/
这里主要讲下连接配置信息
(1)spring.profiles.active=jdbc,自动实现JdbcEnvironmentRepository。
(2)sql语句自定义,否则会默认为“SELECT KEY, VALUE from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?”,具体可以参考JdbcEnvironmentRepository实现。
(3)本人数据库建表为config_server,由于key,value和profile是mysql关键字,所以我都在最前面加了a。当然表名字段名都可以自定义。
(4) {application} 对应客户端的"spring.application.name"属性;
{aprofile} 对应客户端的 "spring.profiles.active"属性(逗号分隔的列表); 和
{label} 对应服务端属性,这个属性能标示一组配置文件的版本.
(5)只要select出来是两个字段,框架会自动包装到environment的map<key,value>。
3、mysql数据
4、springboot启动类
添加@EnableConfigServer注解
@SpringBootApplication @EnableConfigServer public class ConfigserverApplication { public static void main(String[] args) { SpringApplication.run(ConfigserverApplication.class, args); } }
3、product-service微服务
1、pom.xml
<!--服务中心jar--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--配置中心客户端jar--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId>
2、bootstrap.yml
#指定注册中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:7001/eureka/ #服务的名称 spring: application: name: product-service #指定从哪个配置中心读取 cloud: config: discovery: service-id: config-server-jdbc enabled: true profile: dev label: dev server: port: 8001
这里为什么用bootstrap.yml而不用application.yml,是因为若application.yml 和bootStrap.yml 在同一目录下,
则bootStrap.yml 的加载顺序要高于application.yml,即bootStrap.yml 会优先被加载。
为何需要把 config server 的信息放在 bootstrap.yml 里?
当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。
因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。
3、ConfigController类(测试用)
@RestController @RequestMapping("/api/v1/product") public class ConfigController { @Value("${item_url}") private String url; /** * 输出url */ @RequestMapping("url") public void list(){ System.out.println(url); }
4、测试
通过访问:http://localhost:8001/api/v1/product/url 进入断点。
我只是偶尔安静下来,对过去的种种思忖一番。那些曾经的旧时光里即便有过天真愚钝,也不值得谴责。毕竟,往后的日子,还很长。不断鼓励自己,
天一亮,又是崭新的起点,又是未知的征程(上校11)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了