怎么在SpringCloud中利用mysql实现配置中心

怎么在SpringCloud 中利用MySQL实现配置中心?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

从事德阳服务器托管,服务器租用,云主机,网络空间,域名注册,CDN,网络代维等服务。

一、项目搭建

本次主要用三个微服务

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

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

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

怎么在SpringCloud 中利用mysql实现配置中心

1、Eureka-server注册中心

2、配置中心微服务

 1、pom.xml



org.springframework.cloud
spring-cloud-starter-netflix-eureka-client




org.springframework.cloud
spring-cloud-config-server




org.springframework.boot
spring-boot-starter-jdbc


mysql
mysql-connector-java
5.1.21

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

 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


    
      org.springframework.cloud
      spring-cloud-starter-netflix-eureka-client
    
    
    
    
      org.springframework.cloud
      spring-cloud-config-client

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实现配置中心

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


网站栏目:怎么在SpringCloud中利用mysql实现配置中心
文章源于:http://scyanting.com/article/gocghh.html