技术标签: spring spring-cloud SpringCloud config
前路艰难,但谨记,你并不孤独。
Spring Cloud如火如荼,抽空研究研究Spring大家族中的新份子。具体的介绍不会粗线在本系列博文中,如需要理论等知识直接百度or谷歌。
Spring Cloud中保护N多已构建好的微服务,可以做到即插即用,其中大致包含几种服务:Config、Eureka、Ribbon、Hystrix、Feign、Bus等,具体介绍及开源地址请见:Spring Cloud中文官网
今天让我们一起研究下Config,让你发现Spring Cloud的美,也许仅仅因为这一个小小的功能就会让你对Spring Cloud爱不释手,有木有呀?
本文中为一个Maven工程cloud-demo,包含多个maven module工程,其中一个配置的集中服务cloud-demo-config,一个使用配置服务的简单Spring Boot工程cloud-demo-helloword,一个存放配置的文件夹cloud-demo-repo。
所有代码地址:https://github.com/S1ow/cloud-demo.git 持续更新
Now show code
第一步,创建主工程,方便管理
主工程是一个简单Maven工程,创建成功后删除所有文件,只留下pom文件,并创建cloud-demo-repo文件夹(此文件夹需要上传到git/svn上,用于配置服务的读取与集中管理),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>cloud</groupId>
<artifactId>cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cloud-demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>cloud-demo-config</module>
<module>cloud-demo-helloword</module>
</modules>
</project>
第二步,创建配置“服务中心”,cloud-demo-config工程
会发现创建一个Spring Cloud Config配置服务是多么的轻量级,以后的代码会不会变成傻瓜式编程呢?
1、右键cloud-demo工程new –> Mvane Module工程即可,这也是一个Spring Boot应用程序,所有的Spring Cloud的启动方式全部采用Spring boot,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>cloud</groupId>
<artifactId>cloud-demo-config</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>cloud-demo-config</name>
<description>cloud-demo-config</description>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- 配置服务所需的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- 暴露服务的一些管理功能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 测试组件,权重test -->
<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>
<defaultGoal>compile</defaultGoal>
</build>
</project>
使用的Spring的Brixton配置
2、下面需要创建一个启动类,随着启动类的创建,配置服务也即将搭建完毕了,就是这么so easy:
package org.cloud.demo.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* 配置服务中心
* */
@SpringBootApplication
//只需要一个注解即开启了配置服务的管理
@EnableConfigServer
public class ConfigApplication{
public static void main( String[] args ){
SpringApplication.run(ConfigApplication.class, args);
}
}
@EnableConfigServer:顾名思义告诉Spring Boot我要开启配置服务,请给我让路好吗?好的!
3、还记得刚开始我们创建的需要上传到git/svn上的文件夹cloud-demo-repo么?这里存放是配置文件,配置服务cloud-demo-config需要知道文件在哪呀,对吧?所以需要修改cloud-demo-config工程的application.properties告诉配置服务,去哪里找配置文件:
#配置服务的启动端口,此处可不使用远程配置
server.port=8888
#配置服务的名称,总之你喜欢就好
spring.application.name=cloud-demo-config
#配置服务去哪里找配置文件
spring.cloud.config.server.git.uri=https://github.com/S1ow/cloud-demo.git
#去哪个文件夹找配置文件
spring.cloud.config.server.git.searchPaths=cloud-demo-repo
4、这样配置服务就搭建好了,先别着急启动,让我们创建一份远程配置cloudhello-test.properties,这里的配置文件命名是很有讲究的,A-B-C.type的命名方式:
#这里的配置跟配置服务没有半毛钱关系,用于配置服务的消费应用的
config.server.ip=127.0.0.1
config.server.port=8888
app.profile=test
#测试环境
app.hello=\u6D4B\u8BD5\u73AF\u5883\uFF01
再创建一个cloudhello-dev.properties,方便后面配置消费的调用:
config.server.ip=127.0.0.1
config.server.port=8888
app.profile=dev
#开发环境
app.hello=\u5F00\u53D1\u73AF\u5883
配置服务就搞定了,有木有很简单,可以启动配置服务工程,并可以通过http://ip:port/A/B 来看看读取回来的配置信息啦,其中ip和port为配置服务的,A/B就是上面提到的A/B。
第三步,创建配置的消费,cloud-demo-helloword工程
1、pom.xml,这里不做过多描述,与cloud-demo-config工程配置几乎相同:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- <parent>
<groupId>cloud</groupId>
<artifactId>cloud-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent> -->
<groupId>cloud-demo-helloword</groupId>
<artifactId>cloud-demo-helloword</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloud-demo-helloword</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath />
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<snapshots>
<enabled>true</enabled>
</snapshots>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、创建hello工程的启动类:
package org.cloud.demo.helloword;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloApplication {
public static void main( String[] args ){
SpringApplication.run(HelloApplication.class, args);
}
}
3、创建一个Controller用于获取远程配置:
package org.cloud.demo.helloword;
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.RestController;
@RestController
@RefreshScope
public class HelloController {
//将从远程配置获取app.hello这个key
@Value("${app.hello}")
String bar;
//根据配置的不同输出不同
@RequestMapping("/")
String hello(){
return "This is " + bar;
}
}
4、hello工程的application.properties:
#配置服务的名称,与cloudhello-test.properties中的cloudhello相同
spring.application.name=cloudhello
#hello工程启动端口
server.port=9999
#告诉springcloud去哪里找配置,这里的config.server.ip与#config.server.port均为远程配置
spring.cloud.config.uri=http://${config.server.ip}:${config.server.port}
#读取那个服务的配置
spring.cloud.config.name=cloudhello
获取哪个profile,如果获取不到默认为test
spring.cloud.config.profile=test
Ok,下面启动hello工程,访问http://127.0.0.1:9999/ 可以得到返回
This is 测试环境
将上述配置文件中的spring.cloud.config.profile修改为dev,重启服务,访问上述地址,可以得到返回:
This is 开发环境
从这个简单的例子中,可以发现切换配置的快速,对于有多个环境需要维护的企业,减低了极大的成本,带来更短的时间,更高的安全性。
快去试试吧。
什么是WEB2.0? 要理解WEB2.0,先得看WEB的历史。 World Wide Web,简称WWW,是英国人TimBerners-Lee 1989年在欧洲共同体的一个大型科研机构任职时发明的。通过WEB,互联网上的资源,可以在一个网页里比较直观的表示出来;而且资源之间,在网页上可以链来链去。在WEB1.0上做出巨大贡献的公司有Netscape,Yahoo和Google。 Netscape
\cdot输入的点比较小,\bullet输入的点比较大.示例:\cdot x⋅x=x2x\cdot x=x^2x⋅x=x2\bullet f(∙)f({\bullet})f(∙)_latex原点
从小型企业到全球企业,云都是一个非常热门的话题,它是一个非常广泛的概念,涵盖了很多在线领域。 无论是应用程序还是基础架构部署,当您开始考虑将业务转移到云时,了解各种云服务的差异和优势比以往任何时候都更加重要。通常有三种云服务模型:SaaS(软件即服务),PaaS(平台即服务)和IaaS(基础架构即服务)。 每个都有自己的好处和差异。为了您的组织能作出最佳选择,您有必要了解SaaS,PaaS和IaaS之间的差异。下图总结了三种模型的主要差别:SaaS:软件即服务软件..._数据应该是放iaas还是paas
参考:Linux中编译squash文件系统出错补充:(1)最新的软件包下载地址:https://packages.ubuntu.com/focal/i386/liblzma5/download(2)在Linux环境下解压命令:得到目录:lib/和usr/ ,需要的库liblzma.so.5.2.4就在lib/目录下:ar -xliblzma5_5.2.4-1_i386.deb; tar -xJfdata.tar.xz;...
问题 cnpm i 的时候报错起因:南瑞项目需要私服下载前端依赖,通过npm私服下载,首先需要设置私服下载源:npm config set registry http://26.196.217.222/repository/npm-public/,,随后cnpm install 报错原因查询中。。。通过nrm ls 查询出已经注册的源列表npm -------- https://registry.npmjs.org/ yarn ------- https://registry.ya..._npm 配置了内网源 安装还是 显示的 淘宝
VBoxManage命令详解技术文章VBoxManage[-v|-version]显示virtualbox的版本号VBoxManage-nologo隐藏logoVBoxManage-convertSettings允许自动转换设置文件VBoxManage-convertSettingsBackup允许自动转换设置文件,并在转换前作备份VBoxManage-convertSett..._vboxmanagecontrolvm
代码实现#include<iostream>using namespace std;/*单链表的逆置 :利用辅助指针,把下一节点用r指针提前保存,然后修改指向关系即可*/struct Node{ int data; Node *next;};void CreateList(Node *Head)//创建链表 { Node *p=Head; do { Node *NewNode=new Node; cin>>NewNode->data;._c++ 单链表的逆置
Xcode是Apple官方IDE,功能非常强大,是开发Mac和IOS App的必选装备,而且是免费的。它集成了Git和一些插件,但是安装起来很大。Xcode安装完太大,占用空间,如果不需要安装Xcode,最好选择方式一安装git。git官方下载地址: https://git-scm.com/download。下载地址: https://git-scm.com/download/mac。打开终端 输入 git 会弹出安装Xcode和安装git。Git官网下载最新git Mac版本安装。_mac安装git
视频由心声网友@代码科学家及华为北京研究所制作1024程序员节刚过带火了一篇文章以及下面两个短视频+一首歌最火的一首程序猿歌曲,虽然我已经分享过2次了,不过还是再发一..._程序员短视频
一、HTML Snippets 在vscode中把这个插件下载了并且启用,然后翻阅插件的ReadMe,我们可以看到如下图得FAQ: 这段代码是提示我们需要在settings.json中配置files.associations的属性。二、settings.json中配置files.associations对象 首先,依次打开“文件 –> 首选项 –> 设置”,就会看到set..._vscodehtml snipp
如何根据lattice准确create原子数,定制data文件为了使得初始模型更加稳定,不会出现重叠或者长程力无法计算(particle-particle-particle mesh)以及image flage 并行出错等问题。通常根据lattice,并设置region,采用create_atom命令创建原子(气、液体)。制作成下图模型:(粗粒化气体)但是我们发现无法准确的定义原子个数,比如准确create 3000个。如果采用随机放置,又会造成体系不稳定。如果采用另一个方法:1、先cr.
一个域名可以识别一个节点。每一个节点是资源信息的集合,当然也能是空的。资源信息的集合和特定的名字相关,由单独的资源记录组成。集合中资源记录的顺序并不重要,也没有必要有name server ,resolver,或者DNS其他部分保存。当我们谈论某一个特定的资源记录时,我们做如下假定:onwer 指的是域名,可以找到资源记录。type 的是16位的值,指