详解SpringCloud mysql实现配置中心

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringCloud用Zookeeper搭建配置中心的方法

    本文介绍了SpringCloud +Zookeeper完成配置中心,分享给大家,具有如下: 使用场景 项目配置更改不需要打包,重启 提供配置文件的可视化界面 和springcloud快速整合 为什么使用zookeeper Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用主要是用来维护和监控存储的数据的状态变化,通过监控这些数据状态的变化,从而达到基于数据的集群管理. 怎么使

  • spring cloud config分布式配置中心的高可用问题

    在前面的文章中,我们实现了配置文件统一管理的功能,但是我们可以发现,我们仅仅只用了一个server,如果当这个server挂掉的话,整个配置中心就会不可用,下面,我们就来解决配置中心的高可用问题. 下面我们通过整合Eureka来实现配置中心的高可用,因为作为架构内的配置管理,本身其实也是可以看作架构中的一个微服务,我们可以把config server也注册为服务,这样所有客户端就能以服务的方式进行访问.通过这种方法,只需要启动多个指向同一Gitlab仓库位置的config server端就能实现

  • Spring Cloud之配置中心的搭建

    Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现.消息总线.熔断机制等. 配置中心在Spring Cloud的众多组件中是比较基础的,它提供了配置文件的统一管理,可以很轻松的切换不通的环境. 它的具体结构如下: 存储配置文件的文件系统(通常使用git) 配置中心服务端(从文件系统获取最新的配置文件,为客户端提供配置信息) 配置客户端(从配置中心获取配置信息) Spring Cloud是建立在Spring Boot基础上的,Sprin

  • SpringCloud之分布式配置中心Spring Cloud Config高可用配置实例代码

    一.简介 当要将配置中心部署到生产环境中时,与服务注册中心一样,我们也希望它是一个高可用的应用.Spring Cloud Config实现服务端的高可用非常简单,主要有以下两种方式. 传统模式:不需要为这些服务端做任何额外的配置,只需要遵守一个配置规则,将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护.而客户端在指定Config Server位置时,只需要配置Config Server上层的负载均衡设备地址即可, 就如下图所示的结构. 服

  • 利用Spring Cloud Config结合Bus实现分布式配置中心的步骤

    概述 假设现在有个需求: 我们的应用部署在10台机器上,当我们调整完某个配置参数时,无需重启机器,10台机器自动能获取到最新的配置. 如何来实现呢?有很多种,比如: 1.将配置放置到一个数据库里面,应用每次读取配置都是直接从DB读取.这样的话,我们只需要做一个DB变更,把最新的配置信息更新到数据库即可.这样无论多少台应用,由于都从同一个DB获取配置信息,自然都能拿到最新的配置. 2.每台机器提供一个更新配置信息的updateConfig接口,当需要修改配置时,挨个调用服务器的updateConf

  • Spring Cloud微服务架构的构建:分布式配置中心(加密解密功能)

    前言 要会用,首先要了解.图懒得画,借鉴网上大牛的图吧,springcloud组建架构如图: 微服务架构的应用场景: 1.系统拆分,多个子系统 2.每个子系统可部署多个应用,应用之间负载均衡实现 3.需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现. 4.所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理.请求转发到服务上的时候也使用负载均衡. 5.服务之间有时候也需要相互访问.例如有一个

  • Spring Cloud 配置中心内容加密的配置方法

    从配置获取的配置默认是明文的,有些像数据源这样的配置需要加密的话,需要对配置中心进行加密处理. 下面使用对称性加密来加密配置,需要配置一个密钥,当然也可以使用RSA非对称性加密,但对称加密比较方便也够用了,这里就以对称加密来配置即可. 1.安装JCE JDK下的JCR默认是有长度限制的,需要替换没有长度限制的JCE版本. http://www.oracle.com/technet... 把下载包里面的两个jar文件复制替换到JAVA_HOME/jre/lib/security目录下. 2.添加加

  • springcloud使用consul作为配置中心

    Spring Cloud 中文手册: https://springcloud.cc/spring-cloud-consul.html 也就是说在我们使用consul config时最好在consul 建立相应的目录结构 适用于某一个服务的目录结构以及适用于所有的服务的目录结构 本列consul web UI :springboot为我们提供了三种环境dev:默认开发环境  test:测试环境  prod:生产环境 PS: 1.每次当我们修改consul上面的配置信息的时候,会向我们的代码发送一个

  • 详解spring cloud config整合gitlab搭建分布式的配置中心

    在前面的博客中,我们都是将配置文件放在各自的服务中,但是这样做有一个缺点,一旦配置修改了,那么我们就必须停机,然后修改配置文件后再进行上线,服务少的话,这样做还无可厚非,但是如果是成百上千的服务了,这个时候,就需要用到分布式的配置管理了.而spring cloud config正是用来解决这个问题而生的.下面就结合gitlab来实现分布式配置中心的搭建.spring cloud config配置中心由server端和client端组成, 前提:在gitlab中的工程下新建一个配置文件config

  • Spring Cloud Config实现分布式配置中心

    在分布式系统中,配置文件散落在每个项目中,难于集中管理,抑或修改了配置需要重启才能生效.下面我们使用 Spring Cloud Config 来解决这个痛点. Config Server 我们把 config-server 作为 Config Server,只需要加入依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-ser

随机推荐