spring config
概念
Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。通过Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念与Spring Environment和PropertySource抽象,因此它们非常适合Spring应用程序,但可以与任何运行在任何语言的应用程序一起使用。随着应用程序从开发到测试转移到部署管道中,您可以管理这些环境之间的配置,并确保应用程序具有迁移时所需的所有内容。服务器存储后端的默认实现使用git,因此它可以轻松支持配置环境的标签版本,并且可以用于管理内容的各种工具。使用Spring配置很容易添加替代实现并将其插入。在微服务架构中,需要用到两个角色,一个是config server,一个是config client。而config client 就是如订单服务,用户服务等。
图解
快速开始
config server
- 创建一个spring boot项目。该项目的pom.xml文件所依赖的jar包如下。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--config服务需要用这个包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- application.yml文件如下
#server config
server:
port: 7600
session:
timeout: 1800
#
spring:
application:
name: demo-config
cloud:
config:
server:
git:
#配置git仓库地址
uri: https://gitee.com/lvhaibao/springcloud-demo-config.git
#配置仓库路径
search-paths: respo
#如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写
username:
password:
#配置仓库的分支
label: master
# eureka 注册的配置,把该服务注册到服务中心
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
- 创建spring boot启动类。只需要加上@EnableConfigServer注解即可
package org.lhb.demo.config;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @Author lvhaibao
* @Date 2018/6/13 22:26
*/
@EnableConfigServer
@SpringBootApplication
public class ConfigController {
public static void main(String[] args){
new SpringApplicationBuilder(ConfigController.class).web(true).run(args);
}
}
- 启动应用程序,在浏览器打开http://localhost:7600/foo/dev
如出现以下
{"name":"foo","profiles":["dev"],"label":"master",
"version":"792ffc77c03f4b138d28e89b576900ac5e01a44b","state":null,"propertySources":[]}
则表示配置成功。
config client
在创建config client的时候,笔者就具体到用户服务中。服务名为demo-config。
1.创建spring boot项目。所需要依赖的包如下:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置config client必须需要这个包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- bootstrap.xml文件如下:
由于用到统一配置服务。所以application.xml文件可以省略。采用bootstrap.xml文件
#server config
server:
port: 7300
session:
timeout: 1800
#
spring:
application:
name: demo-user
cloud:
# config 配置
config:
# 选择的分支
label: master
# 选择的开发版本
profile: dev
# config服务的地址
uri: http://localhost:7600/
# eureka config
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
- 启动类配置
package org.lhb.demo.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Author lvhaibao
* @Date 2018/6/6 22:43
*/
@SpringBootApplication
@EnableEurekaClient
public class UserApplication {
public static void main(String[] args){
SpringApplication.run(UserApplication.class,args);
}
}
- 在https://gitee.com/lvhaibao/springcloud-demo-config.git 创建一个名为demo-user-dev.yml文件。里面的配置如下:
aa: ddd
5.编写一个controller类。
package org.lhb.demo.user.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @Author lvhaibao
* @Date 2018/6/6 22:45
*/
@RestController
@RequestMapping("user")
public class UserController {
@Value("${server.port}")
private String serverPort;
@Value("${aa}")
private String aa;
@RequestMapping("/getAll")
public List<String> getAll(){
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("serverPort"+serverPort);
return list;
}
@RequestMapping("/getAa")
public Object getAa(){
return aa;
}
}
- 先启动config servr。然后启动demo-user服务。
在浏览器访问http://localhost:7300/user/getAa。
如果页面显示ddd.则表示配置成功。
参考资料:http://projects.spring.io/spring-cloud/spring-cloud.html#_spring_cloud_config