我们在之前学习了:
最近由于项目的开始,组长要我搞个从本地统一读取配置文件,通过查看文档发现
springboot自带的有一个配置为:
spring.config.location
具体使用过程,大家可以查看相关文档,该配置可以读取磁盘上的配置文件,亲自测试在maven骨架搭建的项目中完全可以,在gradle构建的项目中是无法加载配置的,具体原因不清楚,由于我们的项目是gradle构建的,所以这里还有第二种方案.
通过springcloud config来实现
本篇教程也就是通过springcloud config的方案来实现高可用的配置,这种方案也是推荐使用的,接下来我们来看具体的实现过程:
项目搭建
在我们之前的项目consul-server中,我们创建module为consul-config的配置中心服务,创建过程就不过说了,我们来看所需依赖:
- pom.xml文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cacmp</groupId>
<artifactId>consul-config</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consul-config</name>
<description>搭建springcloud Config配置中心</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
接着来看配置文件,代码如下:
server:
port: 9000
spring:
application:
name: consul-config
#环境配置
profiles:
active: native
#注册中心的配置
cloud:
consul:
host: 127.0.0.1
port: 8500
discovery:
service-name: ${spring.application.name}
#配置中心的配置
config:
server:
native:
search-locations: classpath:/config
配置文件写的很清楚,注意:这里要写成bootstrap.yml或者是bootstrap.properties,目的是为了项目启动时最先加载该配置文件
- 然后我们在resources目录下创建一个config目录,用来存放本地到的配置文件,这是springcloud官方的教程.如图:
- 来看我们的启动类,代码如下:
package com.cacmp.consul.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @author cb
*/
@EnableConfigServer
@SpringBootApplication
public class ConsulConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConsulConfigApplication.class, args);
}
这样我们的配置中心搭建完毕,启动服务可以发现:
服务已经注册到了我们的注册中心consul中,我们访问http://127.0.0.1:9000/consul-consumer/dev,会得到配置文件中的内容:
注意:配置文件中访问的URL为:
-
{profile}
官方推出了四种,这里就不一一说了,想了解的可以自己去看看,接着我们来通过客户端获取我们配置文件中的内容,在我们之前的consul-consumer中加入相关依赖,代码如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
再来看我们的配置文件,代码如下:
server:
port: 9001
spring:
application:
name: consul-consumer
#注册中心
cloud:
consul:
host: 127.0.0.1
port: 8500
discovery:
service-name: ${spring.application.name}
config:
format: YAML
#配置中心
config:
name: ${spring.application.name}
profile: ${spring.profiles.active}
fail-fast: true
discovery:
enabled: true
service-id: consul-config
profiles:
active: dev
再来写一个接口来获取配置中心的属性的值,代码如下:
package com.consul.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author cb
*/
@RestController
@RefreshScope
public class TestConfigController {
@Value("${config.user}")
private String user;
@RequestMapping("user")
@ResponseBody
public String getUsername(){
System.out.println("姓名为:"+user);
return user;
}
启动我们的服务,控制台有如下的日志信息:
接着访问http://127.0.0.1:9001/user,会得到
来看我们的配置文件的内容:
以后需要的配置都可以在这里配置即可,关于配置中心简单的使用就是这样的....