详解SpringCloud mysql实现配置中心

作者:雨点的名字 时间:2023-11-02 05:12:57 

mysql实现配置中心

本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程。有关项目源码后期会补上github地址

微服务要实现集中管理微服务配置、 不同环境不同配置 、 运行期间也可动态调整 、 配置修改后可以自动更新的需求 ,Spring Cloud Config同时满足了以上要求。

一、项目搭建

本次主要用三个微服务

(1)Eureka-server: 7001 注册中心

(2)config-server : 5001 配置中心

(3)product-server : 8001 商品微服务

详解SpringCloud mysql实现配置中心

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数据

详解SpringCloud 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 进入断点。

详解SpringCloud mysql实现配置中心

来源:http://www.cnblogs.com/qdhxhz/p/9624386.html

标签:Spring,Cloud,mysql,配置中心
0
投稿

猜你喜欢

  • C++类的返回值是*this的成员函数问题

    2023-02-01 19:52:50
  • 全面理解java中的异常处理机制

    2023-10-26 04:08:20
  • Android RadioGroup多行显示效果 解决单选问题

    2023-05-28 18:23:55
  • SSh结合Easyui实现Datagrid的分页显示

    2022-01-14 21:46:49
  • Java面向对象之猜拳游戏

    2022-10-29 21:26:45
  • JAVA中 redisTemplate 和 jedis的配合使用操作

    2022-05-01 23:38:46
  • 基于Android10渲染Surface的创建过程

    2022-02-02 12:25:13
  • java实现五子棋小游戏

    2021-12-25 06:58:56
  • 基于Java接口回调详解

    2023-11-09 00:03:11
  • 浅谈Android Classloader动态加载分析

    2022-01-28 13:18:05
  • Springboot使用@Valid 和AOP做参数校验及日志输出问题

    2023-12-05 04:39:12
  • 基于spring security实现登录注销功能过程解析

    2023-11-29 06:09:05
  • SpringBoot使用prometheus监控的示例代码

    2021-05-29 02:37:41
  • springBoot controller,service,dao,mapper,model层的作用说明

    2022-02-28 15:38:49
  • Java 基础语法中的逻辑控制

    2022-11-22 16:30:59
  • Android N获取外置SD卡或挂载U盘路径的方法

    2023-07-14 22:21:03
  • Session过期后自动跳转到登录页面的实例代码

    2022-01-30 13:48:56
  • 详解Spring Data JPA动态条件查询的写法

    2022-03-17 18:26:06
  • C#多线程的Join()方法

    2022-05-08 23:56:13
  • Java使用Jdbc连接Oracle执行简单查询操作示例

    2021-07-25 03:34:25
  • asp之家 软件编程 m.aspxhome.com