Config Server--SpringCloud之七分布式配置中心

学习尚硅谷老师的springcloud,摘抄和总结以及分类笔记!
只要学不死,就往死里学!
全部代码:https://github.com/java-ygj/firstResponsitory/tree/master/microservicecloud
承接自上一篇博文:
https://blog.csdn.net/konmor/article/details/101426282
图片转自网络,侵删
图片转自网络,侵删

一、概述

分布式系统面临的问题:

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件的管理…/(ㄒoㄒ)/~~

SpringCloud Config是什么

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

SpringCloud Config怎么玩

SpringCloud Config分为服务端和客户端两部分
服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

SpringCloud Config能干什么

1.不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release。
2.运行期间动态调整配置,不需要再每个服务部署的机器杀昂编写配置文件,服务会向配置中心统一拉取配置自己的信息。
3.当配置发生变化时,服务不需要重启即可感知到配置的变化并应用新的配置。
4.将配置信息以REST接口的形式暴露。

SpringCloud Config与GitHub整合

由于SpringCloud Config默认使用Git来存储配置文件(也有其它方式,比如支持SVN和本地文件),
但最推荐的还是Git,而且使用的是http/https访问的形式

二、SpringCloud Config服务端配置

2.1.zaigithub上创建新的Responsitory

名字:microservicecloud-config

在这里插入图片描述

2.2.获取ssh协议的地址:

由上一步获取ssh协议的git地址,复制即可
在这里插入图片描述
[email protected]:java-ygj/microservicecloud-config.git

2.3.在本地文件夹下新建配置仓库

本地地址:D:\2\JAVA\springcloudConfigRestory

在此文件下右键选择Git Bash Here
输入命令:git status
出现表示这个文件夹还不是git的仓库。
fatal: not a git repository (or any of the parent directories): .git

在这里插入图片描述
在这里插入图片描述
当前目录下根本没有一个git库
所以执行下一步:
git clone [email protected]:java-ygj/microservicecloud-config.git
这一步才是创建文件夹

在这里插入图片描述
进入空文件夹,选择显示隐藏文件
在这里插入图片描述

2.4.在新建的文件夹下新建application.yml文件

在D:\2\JAVA\springcloudConfigRestory\microservicecloud-config文件下新建文件application.yml
ps:新建一个txt,将格式和名字改为application.yml
一定一utf-8格式保存,一定一utf-8格式保存,一定一utf-8格式保存

给application.yml文件添加内容:注意缩进,注意存储格式
配置文件用—将彼此一个个不同的配置分割开来

spring:
  profiles:
    active:
    - dev
---
spring:
  profiles: dev     #开发环境
  application: 
    name: microservicecloud-config-atguigu-dev
---
spring:
  profiles: test   #测试环境
  application: 
    name: microservicecloud-config-atguigu-test
#  请保存为UTF-8格式

选择"文件"“另存为”
在这里插入图片描述
注意保存之后的格式可能变成application.yml.txt
修改一下格式即可
将此yml文件上传到网上git仓库

git命令介绍链接:https://www.yiibai.com/git/git_status.html
git命令
$ pwd 当前目录
$ git status 命令用于显示工作目录和暂存区的状态。
下图application.yml文件名字变为红色表示检测到了此文件
在这里插入图片描述

2.5.开始上传:

注意add后面的空格,注意填写备注信息
git add .
git commit -m “备注信息”
git push origin master
在这里插入图片描述
刷新网络可以看到已经上传了
在这里插入图片描述

2.6.新建module模块microservicecloud-config-3344

新建Module模块microservicecloud-config-3344
它即为Cloud的配置中心模块
第一步修改pom文件
主要添加内容:

  <!-- springcloud config -->
<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
				<!-- 避免出现Config的Git插件报错:org/eclipse/jgit/apiTransportConfigCallback -->
		<dependency>
			<groupId>org.eclipse.jgit</groupId>
			<artifactId>org.eclipse.jgit</artifactId>
			<version>4.10.0.201712302008-r</version>
		</dependency>

全部内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-config-3344</artifactId>
  <dependencies>
  <!-- springcloud config -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<!-- 避免出现Config的Git插件报错:org/eclipse/jgit/apiTransportConfigCallback -->
		<dependency>
			<groupId>org.eclipse.jgit</groupId>
			<artifactId>org.eclipse.jgit</artifactId>
			<version>4.10.0.201712302008-r</version>
		</dependency>
		<!-- actuator开始:主管监控和信息配置-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- :actuator结束 -->
		
		<!-- Eureka开始:将微服务provider注册进Eureka -->
		<!-- 必须写成-netflix-eureka-client -->
		<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>
		<!-- Euraka注册结束; -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<!-- 使用内嵌的jetty容器,,服务器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- test测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<!-- 热加载 ,这里不知道为什么必须要指定版本<version>1.2.6.RELEASE</version> -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
</project>

注意:org.eclipse.jgit是为了解决Config的Git插件报错
第二步:
添加application.yml文件
内容如下:

server: 
 port: 3344 
 
spring:
  application:
   name: microservicecloud-config
  cloud:
    config:
      server:
        git:
          uri: [email protected]:java-ygj/microservicecloud-config.git #GitHub上面的git仓库名字

[email protected]:java-ygj/microservicecloud-config.git #GitHub上面的git仓库名字
第三步:
启动类:注解:@EnableConfigServer

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

2.7.测试

http://config-3344.com:3344/application-dev.yml
解释config-3344是localhost的映射
3344是端口号
application-固定写法
dev是本地仓库/github上的spring:profiles:选择对应配置
.yml固定写法
http://config-3344.com:3344/application-test.yml
http://config-3344.com:3344/application-xxx.yml(不存在的配置)

不存在的配置仅显示头文件:如下图第一排第三列
在这里插入图片描述

2.8.配置读取规则

/{application}-{profile}.yml
/{application}/{profile}[/{label}]
/{label}/{application}-{profile}.yml
依次对应上图的三类

以上成功实现了用SpringCloud Config通过GitHub获取配置信息

三、SpringCloud Config客户端配置与测试

3.1.在本地仓库下新建配置文件

D:\2\JAVA\springcloudConfigRestory\microservicecloud-config下
新建文件:microservicecloud-config-client.yml
内容如下:

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

配置文件设置了端口号,application.name,以及url,为后文中上传配置和获取网上配置做准备。

3.2.提交到GitHub中

第一步:git add .
第二步:git commit -m “备注内容”
第三步:git push origin master

3.3.新建Module

新建microservicecloud-config-client-3355

pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-config-client-3355</artifactId>
  <dependencies>
		
		<!-- 避免出现Config的Git插件报错:org/eclipse/jgit/apiTransportConfigCallback -->
		<dependency>
			<groupId>org.eclipse.jgit</groupId>
			<artifactId>org.eclipse.jgit</artifactId>
			<version>4.10.0.201712302008-r</version>
		</dependency>
		<!-- actuator开始:主管监控和信息配置 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- :actuator结束 -->

		<!-- Eureka开始:将微服务provider注册进Eureka -->
		<!-- 必须写成-netflix-eureka-client -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<!-- springcloud 客户端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<!-- Euraka注册结束; -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<!-- 使用内嵌的jetty容器,,服务器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- test测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<!-- 热加载 ,这里不知道为什么必须要指定版本<version>1.2.6.RELEASE</version> -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
</project>

application.yml:

spring:
 application:
  name: microservicecloud-config-client #这里的名字要和bootstrap.yml里面的一样

bootstrap.yml是什么?

applicaiton.yml是用户级的资源配置项
bootstrap.yml是系统级的,优先级更加高
Spring Cloud会创建一个Bootstrap Context,作为Spring应用的Application Context的父上下文。初始化的时候,Bootstrap Context负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的EnvironmentBootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。 Bootstrap contextApplication Context有着不同的约定,
所以新增了一个bootstrap.yml文件,保证Bootstrap ContextApplication Context配置的分离。
bootstrap.yml:

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

主启动类:

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

Rest测试类

@RestController
public class ConfigClientRest {
	//这里获取配置文件的参数并自动赋值给加了@Value注解的参数
	@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;
	}
}

3.4.测试:

启动Config配置中心3344微服务并自测
在这里插入图片描述
自测:http://config-3344.com:3344/application-dev.yml
启动3355作为Client准备访问
注意:在启动config client模块时根据bootstrap里面的配置文件
找到3344端口然后从网上GitHub获取配置参数内容,并赋给3355模块的配置。
dev默认在github上对应的端口就是8201
访问:http://client-config.com:8201/config
结果如下:
在这里插入图片描述
以上内容:成功实现了客户端3355访问SpringCloud Config3344通过GitHub获取配置信息

四、SpringCloud Config 配置实战

4.1.在本地仓库下新建配置文件并上传

D:\2\JAVA\springcloudConfigRestory\microservicecloud-config

Euraka服务配置文件:

spring: 
 profiles: 
  active: 
    - dev
---
server: 
 port: 7001 #注册中心占用7001端口,冒号后面必须要有空格
spring: 
 profiles: dev
 application:
  name: microservicecloud-config-eureka-client
eureka: 
 instance: 
  hostname: eureka7001.com #冒号后面必须要有空格
 client: 
  register-with-eureka: false #当前的eureka-server自己不注册进服务列表中
  fetch-registry: false #不通过eureka获取注册信息
  service-url: 
   defaultZone: http://eureka7001.com:7001/eureka/
---
server: 
 port: 7001 #注册中心占用7001端口,冒号后面必须要有空格
spring: 
 profiles: test
 application:
  name: microservicecloud-config-eureka-client
eureka: 
 instance: 
  hostname: eureka7001.com #冒号后面必须要有空格
 client: 
  register-with-eureka: false #当前的eureka-server自己不注册进服务列表中
  fetch-registry: false #不通过eureka获取注册信息
  service-url: 
   defaultZone: http://eureka7001.com:7001/eureka/

provider工程配置文件:
注意数据库名字和username以及pwd:

spring: 
 profiles:
  active:
    - dev
--- 
server:
 port: 8001
spring: 
 profiles: dev
 application: 
  name: microservicecloud-config-dept-client
 datasource:
   type: com.alibaba.druid.pool.DruidDataSource
   driver-class-name: org.gjt.mm.mysql.Driver
   url: jdbc:mysql://localhost:3306/cloudDB01
   username: root
   password: 123
   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: #客户端注册进eureka服务列表内
  service-url: 
   defaultZone: http://eureka7001.com:7001/eureka
 instance:
  instance-id: dept-8001.com
  prefer-ip-address: true
info:
 app.name: atguigu-microservicecloud-springcloudconfig01
 company.name: www.atguigu.com
 build.artifactId: $project.artifactId$
 build.version: $project.version$
---
server:
 port: 8001
spring: 
 profiles: test
 application: 
  name: microservicecloud-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: 123
  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: #客户端注册进eureka服务列表内
  service-url: 
   defaultZone: http://eureka7001.com:7001/eureka
 instance:
  instance-id: dept-8001.com
  prefer-ip-address: true
info:
 app.name: atguigu-microservicecloud-springcloudconfig02
 company.name: www.atguigu.com
 build.artifactId: $project.artifactId$
 build.version: $project.version$

上传:
git add .
git commit -m “备注内容”
git push origin master

4.2.新建Euraka工程

命名为:microservicecloud-config-eureka-client-7001
pom文件:
和前面euraka唯一不同的是要加入spring-cloud-starter-config依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-config-eureka-client-7001</artifactId>
  <dependencies>
	<!--  euraka server服务器-netflix-eureka替代-eureka -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
		<dependency><!-- boot,1.5.9不需要制定版本<version>1.2.6.RELEASE</version> -->
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
		</dependency>
		<!-- 热加载,修改后立即reload -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
		<!-- springcloud 客户端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
	</dependencies>
</project>

bootstrap.yml:

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

application.yml:

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

主启动类:
命名为:Config_Git_EurekaServerApplication
由于是eurakaServer端口要加上@EnableEurekaServer
内容:

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

4.3.测试Euraka服务启动:

先,启动3344
再,启动ruraka服务:
一定注意先后顺序,注意一定等3344端口完全启动才可以启动下一个工程
在这里插入图片描述
测试网址:http://eureka7001.com:7001/
在这里插入图片描述

4.4.provider工程

provider工程的名字:
microservicecloud-config-dept-client-8001
还是老三样:pom,application.ym,主启动类
pom:文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.atguigu.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>microservicecloud-config-dept-client-8001</artifactId>
  <dependencies>
		<!-- 引入自己定义的api通用包,可以使用Dept的Entity -->
		<dependency>
			<groupId>com.atguigu.springcloud</groupId>
			<artifactId>my-microservicecloud-api</artifactId>
			<version>${project.version}</version>
		</dependency>
		<!-- actuator开始:主管监控和信息配置 --><!-- Hystris的监控也有用 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- :actuator结束 -->
		<!-- Eureka开始:将微服务provider注册进Eureka -->
		<!-- 必须写成-netflix-eureka-client -->
		<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>
		<!-- Euraka注册结束; -->

		<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>
		<!--mybatis整合springboot -->
		<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>
		<!-- 使用内嵌的jetty容器,,服务器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- test测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<!-- 热加载 ,这里不知道为什么必须要指定版本<version>1.2.6.RELEASE</version> -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>

		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
  
</project>

配置文件
bootstrap.yml:

spring:
 cloud:
  config:
   name: microservicecloud-config-dept-client #需要从github上读取的资源名称,注意没有yml后缀名
#profile配置是什么就取什么配置dev or test
#profile: dev
   profile: test
   label: master
   uri: http://config-3344.com:3344  #SpringCloudConfig获取的服务地址

application.yml:

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

主启动类:

@SpringBootApplication/*主启动类*/
@EnableEurekaClient   /*本服务启动后会自动注册进入Euraka*/
@EnableDiscoveryClient/*服务发现注解*/
public class DeptProvider8001_App {

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

以下内容为对数据库的操作
以及controller:

@RestController // 包含这个responsebody,前后端分离开发,所以一般用的都是restcontroller
public class DeptController {
	@Autowired
	private DeptService deptService;
	//服务发现
	@Autowired
	private DiscoveryClient discoveryClient;

	@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
	public boolean add(@RequestBody Dept dept) {
		return deptService.add(dept);
	}

	// @PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值,占位符
	@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
	public Dept get(@PathVariable Long id) {
		return deptService.get(id);
	}

	@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
	public List<Dept> find(Dept dept) {
		return deptService.list();
	}
	//服务发现
	//		@Autowired
	//		private DiscoveryClient discoveryClient;
	@RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
	public Object discovery() {
		//获取的所有的微服务
		List<String> list = discoveryClient.getServices();
		System.out.println("**********" + list);
		
		//报错Type mismatch: cannot convert from element type Object to Document
		//加上泛型才行,找到一个名字叫做MICROSERVICECLOUD-DEPT的微服务spring.application.name 
		List<ServiceInstance> srvList = discoveryClient.getInstances("MICROSERVICECLOUD-DEPT");
		for (ServiceInstance element : srvList) {
			System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
					+ element.getUri());
		}
		return this.discoveryClient;//有问题,返回的是接口,所以返回其实现类对象;也可以自己组装返回对象。
	}

}

service:

public interface DeptService {
	public boolean add(Dept dept);

	public Dept get(Long id);

	public List list();
}

serviceImpl:

@Service
public class DeptServiceImpl implements DeptService {
	@Autowired
	private DeptDao deptDao;

	@Override
	public boolean add(Dept dept) {
		return deptDao.addDept(dept);
	}

	@Override
	public Dept get(Long id) {
		return deptDao.findById(id);
	}

	@Override
	public List list() {
		return deptDao.findAll();
	}

}

dao:

@Mapper//注意添加@Mapper注解
public interface DeptDao {
	public boolean addDept(Dept dept);

	public Dept findById(Long id);

	public List findAll();
}

映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.springcloud.dao.DeptDao">
	<select id="findById" resultType="Dept" parameterType="Long">
		select deptno,dname,db_source from dept where deptno=#{deptno};
	</select>
	<select id="findAll" resultType="Dept">
		select deptno,dname,db_source from dept;
	</select>
	<insert id="addDept" parameterType="Dept">
		INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());
	</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 大部分内容被整合进了spring里面 -->
	<settings>
		<setting name="cacheEnabled" value="true" /><!-- 二级缓存开启 -->
	</settings>
</configuration>

在这里插入图片描述

测试:

完全启动3344端口工程
再启动euraka工程
再启动provider工程
测试:http://localhost:8001/dept/list
结果:
因为默认的是dev配置所以数据库是cloud01
在这里插入图片描述

在这里插入图片描述
注意修改项目配置时,热加载不会重新去网上下载配置,必须关掉重启项目。
在这里插入图片描述
实际修改:
第一步、操作本地配置文件,
第二步、上传,
第三步、再启动工程

发布了18 篇原创文章 · 获赞 11 · 访问量 1206

猜你喜欢

转载自blog.csdn.net/konmor/article/details/101530177