mysql 实现配置中心
本公司配置数据的管理是通过 mysql 进行配置管理, 因为已经搭建好了, 所以自己动手重新搭建一遍, 熟悉整个流程. 有关项目源码后期会补上 github 地址
微服务要实现集中管理微服务配置, 不同环境不同配置, 运行期间也可动态调整, 配置修改后可以自动更新的需求, Spring Cloud Config 同时满足了以上要求.
一, 项目搭建
本次主要用三个微服务
(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)
来源: https://www.cnblogs.com/qdhxhz/p/9624386.html