SpringCloud学习笔记(十)分布式配置实战

配置客户端创建步骤

1、创建一个子项目mycloud-config-client-3355,添加依赖

<dependencies>
    <!-- SpringCloud Config客户端 -->
    <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-hystrix</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-jetty</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>springloaded</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
	</dependency>
</dependencies>

2、在H:\git\mySpringCloud\mycloud-config路径下创建mycloud-config-client.yml提交到github上

spring:
  profiles:
    active:
    - dev
---
server:
  port: 8201
spring:
  profiles: dev
  application: 
    name: mycloud-config-client
eureka:
  client:
    service-url: 
      defaultZone: http://eureka-dev.com:7001/eureka/
---
server:
  port: 8202
spring:
  profiles: test
  application: 
    name: mycloud-config-client
eureka:
  client:
    service-url:
      defaultZone: http://eureka-test.com:7001/eureka/

3、创建bootstrap.yml

spring:
  cloud:
    config:
      name: mycloud-config-client #需要从github上读取的资源名称,注意没有yml后缀名
      profile: test   #本次访问的配置项
      label: master   
      uri: http://config-3344.com:3344  #本微服务启动后先去找3344号服务,通过SpringCloudConfig获取GitHub的服务地址

application.yml

spring:
  application:
    name:mycloud-config-client

application.yml是用户级的资源配置项,bootstrap.yml是系统级的,优先级更高

SpringCloud会创建一个‘Bootstrap Context’作为Spring应用的Application Context的父上下文,初始化的时候‘bootstrap Context’负责从外部源加载配置属性并解析配置。这两个上下文共享一个外部获取的Environment。Bootstrap属性有高优先级,默认情况下不会被本地配置覆盖。bootstrap context和Application Context有着不同的约定,所有增加一个bootstrap.yml文件保证bootstrap context和Application Context配置分离。

4、hosts添加映射

127.0.0.1              client-config.com

5、新建ConfigClientRest类,用于验证读取的配置

@RestController
public class ConfigClientRest {

	@Value("${spring.application.name}")
	private String applicationName;

	@Value("${eureka.client.service-url.defaultZone}")
	private String eurekaServers;

	@Value("${server.port}")
	private String port;

	@RequestMapping("/config")
	public String getConfig()
	{
		String str = "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port;
		System.out.println("******str: " + str);
		return "applicationName: " + applicationName + "\t eurekaServers:" + eurekaServers + "\t port: " + port;
	}
}

6、添加启动主类

@SpringBootApplication
public class ConfigClientStartSpringCloud3355 {
	public static void main(String[] args) {
		SpringApplication.run(ConfigClientStartSpringCloud3355.class, args);
	}
}

7、测试

启动mycloud-config-3344以及mycloud-config-client-3355,

访问http://config-3344.com:3344/master/mycloud-config-client-test.yml

访问http://config-3344.com:8202/config

修改mycloud-config-client-3355配置文件bootstrap.yml ,并重启

profile: dev

 

配置实战

添加本地配置文件,并提交到git

1、mycloud-config-eureka-client.yml

spring:
  profiles:
    active:
    - dev
---
server:
  port: 7001
spring:
  profiles: dev
  application: 
    name: mycloud-config-eureka-client
eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false 
    fetch-register: false
    service-url:
      defaultZone: http:// eureka7001.com/eureka/
---
server:
  port: 7001
spring:
  profiles: test
  application: 
    name: mycloud-config-eureka-client
eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false 
    fetch-register: false
    service-url:
      defaultZone: http:// eureka7001.com/eureka/

2、mycloud-config-dept-client.yml  

dev数据库连的是cloudDB01,test数据库连的是cloudDB02

spring:
  profiles:
    active:
    - dev
---
server:
  port: 8001
spring:
  profiles: test
  application: 
    name: mycloud-config-dept-client
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
    url: jdbc:mysql://localhost:3306/cloudDB01             # 数据库名称
    username: root
    password: root
    dbcp2:
      min-idle: 5                                           # 数据库连接池的最小维持连接数
      initial-size: 5                                       # 初始化连接数
      max-total: 5                                          # 最大连接数
      max-wait-millis: 200                                  # 等待连接获取的最大超时时间
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径
  type-aliases-package: com.atguigu.springcloud.entities    # 所有Entity别名类所在包
  mapper-locations:
  - classpath:mybatis/mapper/**/*.xml
eureka: 
  client: #客户端注册进eureka服务列表内
    service-url: 
       defaultZone: http://eureka7001.com:7001/eureka
  instance: 
      instance-id: dept-8001.com
      prefer-ip-address: true     #访问路径可以显示IP地址
info:
  app.name: atguigu-microservicecloud
  company.name: www.atguigu.com
  build.artifactId: $project.artifactId$
  build.version: $project.version$ 
---
server:
  port: 8001
spring:
  profiles: dev
  application: 
    name: mycloud-config-dept-client
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource         
    driver-class-name: org.gjt.mm.mysql.Driver           
    url: jdbc:mysql://localhost:3306/cloudDB02          
    username: root
    password: root
    dbcp2:
      min-idle: 5                                      
      initial-size: 5                                 
      max-total: 5                 
      max-wait-millis: 200                    
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml
  type-aliases-package: com.atguigu.springcloud.entities
  mapper-locations:
  - classpath:mybatis/mapper/**/*.xml
eureka: 
  client: 
    service-url: 
       defaultZone: http://eureka7001.com:7001/eureka
  instance: 
      instance-id: dept-8001.com
      prefer-ip-address: true 
info:
  app.name: atguigu-microservicecloud
  company.name: www.atguigu.com
  build.artifactId: $project.artifactId$
  build.version: $project.version$ 

 Config版的eureka服务端

1、新建项目mycloud-config-eureka-client-7001,并添加依赖

<dependencies>
	<!-- SpringCloudConfig配置 -->
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka-server</artifactId>
	</dependency>
	<!-- 热部署插件 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>springloaded</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
	</dependency>
</dependencies>

2、添加bootstrap.yml

spring: 
  cloud: 
    config: 
      name: mycloud-config-eureka-client     #需要从github上读取的资源名称,注意没有yml后缀名
      profile: dev 
      label: master 
      uri: http://config-3344.com:3344      #SpringCloudConfig获取的服务地址

3、添加application.yml

spring:
  application:
    name: mycloud-config-eureka-client

4、添加主启动类,并启动测试

配置读取正确

eureka启动成功

Config版的Dept微服务

1、新建项目mycloud-config-dept-client-8001,引入依赖

<dependencies>
     <!-- SpringCloudConfig配置 -->
     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
             <groupId>cn.it.tencent</groupId>
             <artifactId>mycloud-api</artifactId>
             <version>${project.version}</version>
         </dependency> 
</dependencies>

2、application.yml

spring:
  application:
    name: mycloud-config-dept-client

 bootstrap.yml

spring:
  cloud:
    config:
      name: mycloud-config-dept-client 
      profile: test
      label: master
      uri: http://config-3344.com:3344  

3、主启动类

@EnableEurekaClient
@SpringBootApplication
public class ConfigDeptApp8001 {
	public static void main(String[] args) {
		SpringApplication.run(ConfigDeptApp8001.class, args);
	}
}

4、复制项目的mycloud-provider8001其他业务代码

5、测试,先启动mycloud-config-3344、在启动mycloud-config-eureka-client-7001和mycloud-config-dept-client-8001

6、访问http://localhost:8001/dept/list

把 bootstrap.yml中profile改成dev

我们也可以修改远程的mycloud-config-dept-client.yml文件达到修改配置文件的目的。

发布了188 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_36154832/article/details/103714864