Consul3-使用consul作为配置中心
在前面的文章中学习了consul在windows下的安装配置,然后consul作为spring boot的服务发现和注册中心,详细的参考:
https://blog.csdn.net/j903829182/article/details/80960802
https://blog.csdn.net/j903829182/article/details/80960917
在这里将学习consul作为springboot的配置中心,有spring cloud config的功能。这里还是以前面consul文章里面的代码为基础进行学习,不在进行重复的代码。
consul作为配置中心,需要引入配置的jar包,pom.xml的内如修改如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <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>
-
- <groupId>com.jack</groupId>
- <artifactId>consul_study1</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <name>consul_study1</name>
- <description>Demo project for Spring Boot</description>
-
- <!--<parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.3.RELEASE</version>
- <relativePath/> <!– lookup parent from repository –>
- </parent>-->
-
- <parent>
- <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-parent -->
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-parent</artifactId>
- <version>Finchley.RELEASE</version>
- <relativePath/>
- </parent>
- <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
-
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-consul-discovery -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-consul-discovery</artifactId>
- <!--<version>2.0.0.RELEASE</version>-->
- </dependency>
-
- <!--feign依赖 配置-->
- <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-feign</artifactId>
- <version>1.4.5.RELEASE</version>
- </dependency>
-
-
- <dependency>
- <groupId>com.jack</groupId>
- <artifactId>consul-api</artifactId>
- <version>1.0.0</version>
- </dependency>
-
- <!--consul中健康检查需要用到actuator,不添加会check failing-->
- <!--<dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>-->
-
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-consul-config</artifactId>
- </dependency>
-
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
-
-
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
-
- </project>
上面主要是引入了:
- <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-consul-discovery -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-consul-discovery</artifactId>
- <!--<version>2.0.0.RELEASE</version>-->
- </dependency>
1,修改配置文件
1)添加 bootstrap.yml配置文件
- spring:
- cloud:
- consul:
- host: localhost
- #host: 00.0.100.200
- port: 8500
- #enabled将此值设置为“false”禁用Consul配置
- config:
- enabled: true #默认是true --
- format: YAML # 表示consul上面文件的格式 有四种 YAML PROPERTIES KEY-VALUE FILES
- #data-key: configuration #表示consul上面的KEY值(或者说文件的名字) 默认是data
- data-key: data #表示consul上面的KEY值(或者说文件的名字) 默认是data
- #prefix设置配置值的基本文件夹
- #defaultContext设置所有应用程序使用的文件夹名称
- #profileSeparator设置用于使用配置文件在属性源中分隔配置文件名称的分隔符的值
2)添加application-dev.yml配置文件,配置如下:
- spring:
- cloud:
- consul:
- host: localhost
- port: 8500
- discovery:
- #healthCheckPath: ${management.contextPath}/health
- healthCheckPath: /health
- healthCheckInterval: 15s
- instance-id: consul1
- enabled: true
- enabled: true
- application:
- name: consul1
- server:
- port: 8081
3)修改application.yml配置文件
- spring:
- profiles:
- active: dev
以上就是一些配置文件的信息了,都是在resource目录下。
2,java代码
1)添加一个配置类
- package com.jack.consul_study1.config;
-
- import org.springframework.boot.context.properties.ConfigurationProperties;
-
- /**
- * create by jack 2018/7/15
- */
- @ConfigurationProperties(prefix = "student")
- public class StudentConfig {
- private String name;
- private int age;
- private String sex;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- @Override
- public String toString() {
- return "StudentConfig{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", sex='" + sex + '\'' +
- '}';
- }
- }
2)修改测试的控制器,添加测试代码
- package com.jack.consul_study1.controller;
-
- import com.jack.consul_study1.api.Chinese;
- import com.jack.consul_study1.config.StudentConfig;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- /**
- * create by jack 2018/7/8
- */
- @RestController
- @RequestMapping("/test")
- public class TestController {
- @Autowired
- private Chinese chinese;
-
- @Value("${myName}")
- private String myName;
-
- @Autowired
- private StudentConfig studentConfig;
-
- @RequestMapping("/hello")
- public String testHello(String name){
- System.out.println("my name is : "+myName);
- return chinese.sayHello(name);
- }
-
- @RequestMapping("/myname")
- public String testHello(){
- System.out.println("my name is : "+myName);
- return myName;
- }
-
- @RequestMapping("/config")
- public String testConfig(){
- System.out.println(studentConfig.toString());
- return studentConfig.toString();
- }
-
-
-
- }
3)主类添加注解@EnableConfigurationProperties
- package com.jack.consul_study1;
-
- import com.jack.consul_study1.config.StudentConfig;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- import org.springframework.cloud.openfeign.EnableFeignClients;
-
-
- @SpringBootApplication
- @EnableDiscoveryClient
- @EnableFeignClients
- @EnableConfigurationProperties({StudentConfig.class})
- public class ConsulStudy1Application {
-
- public static void main(String[] args) {
- SpringApplication.run(ConsulStudy1Application.class, args);
- }
- }
注意:属性配置类的class需要添加到springboot的属性配置注解里面,eg:
@EnableConfigurationProperties({StudentConfig.class})
不添加的话,不能通过@Autowired注解,注入属性配置类,那么就需要在属性配置类上使用spring的bean注解,标记时一个bean到这里,代码已经完成了,启动consul服务器,下面在consul里面进行配置了
3,consul配置
consul作为配置中心的参考文档:https://springcloud.cc/spring-cloud-dalston.html#spring-cloud-consul-config
1)创建配置,如下图
输入key和value
key为:config/consul1,dev/data
value:
myName: jack
student:
name: jack
age: 18
sex: 男
注意value用的是yml格式的配置,冒号后面有一个空格
4,运行程序测试
1)测试通过@Value注入
- @Value("${myName}")
- private String myName;
测试url:http://localhost:8081/test/myname结果如下:
2)测试通过@ConfigurationProperties进行属性配置
测试url:http://localhost:8081/test/config
总结:
到这里consul的简单使用就完成了,consul有两个功能,一个是consul作为注册中心,另一个是consul作为配置中心。在本文中consul作为配置中心,有一个点需要注意,通过@Value注入的属性,修改consul的配置后,属性不能立即生效,需要服务重启。而通过@ConfigurationProperties注入的属性,修改consul的配置后,属性会立即生效,所以建议如果需要动态生效的配置,最好使使用@ConfigurationProperties进行属性的注入。
源代码地址:源码url
欢迎加群:331227121,一起学习交流
原文地址:https://blog.csdn.net/j903829182/article/details/81050507