微服务架构中Springboot配置文件繁多,Apollo统一高效的管理Springboot配置文件。前端
简单说就是说全部Springboot项目本地再也不须要配置文件,全部配置文件由Apollo统一管理,讲的高大上点叫作云配置。java
Apollo优势:mysql
其余的技术git
不用docker搭建,docker搭建有问题的,须要调节一些参数。
百度网盘下载github
在你的Apollo界面中,新建一个项目,配置中只有AppId重要,其余随意选。在你的Springboot添加Maven依赖,2019年11为止最新的Apollo client jar包版本。web
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.5.0</version>
</dependency>
复制代码
和Springboot和Spring整合有两种方式(xml, 注解配置),这里我只讲注解配置。 spring
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableApolloConfig
@RestController
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "我是来自Apollo的8000";
}
}
复制代码
本地文件配置,Apollo须要指定服务器地址,至此你再也不须要把其余配置文件保存至本地。sql
#指定Appid,也就是你在Apollo建立项目指定的Appid,必定要指定对
app.id=test
#指定你的Apollo地址,Apollo 8070为WebUI地址,8080为Eureka注册地址
apollo.meta=http://192.168.208.102:8080
复制代码
本地访问 localhost:8000,注意这个8000是上图中我指定的server.port=8000docker
到此第一个云配置完成,简单吧。bootstrap
本地开发咱们能够有两个application.yml和application.properties,yml保存咱们本地开发的配置,properties保存apollo的配置,本地开发时,咱们只须要注释掉properties内的内容,注释掉@EnableApolloConfig便可完成加载本地yml配置文件,上线反之。经过注释文件和代码便可完成本地线上环境切换。
首先咱们先有一个概念
AppId 对 省
集群 对 市
NameSpace 对 区
nameSpace是最底层的配置文件的描述,能够理解namesapce就是一个文件
那么咱们如何经过Apollo客户端描述一个NameSpace,就像咱们如何精确描述一个区同样的。
#指定Appid,也就是你在Apollo建立项目指定的Appid,必定要指定对
app.id=test
#指定你的Apollo地址,Apollo 8070为WebUI地址,8080为Eureka注册地址
apollo.meta=http://192.168.208.102:8080
apollo.bootstrap.enabled=true
#若是你不手动指定集群,默认集群就是default
#如何指定集群 apollo.cluster={你的集群名}
#指定下你的yml配置的namespace
apollo.bootstrap.namespaces=testyml
复制代码
启动报错
2019-11-09 04:16:14.513 WARN 9116 --- [ main] c.c.f.a.i.AbstractConfigRepository : Sync config failed, will retry. Repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository, reason: Load Apollo Config failed - appId: test, cluster: default, namespace: testyml, url: http://192.168.208.102:8080/configs/test/default/testyml?ip=192.168.208.1 [Cause: [status code: 404] Could not find config for namespace - appId: test, cluster: default, namespace: testyml, please check whether the configs are released in Apollo!]
复制代码
有报错,根本不慌
报错为 http://192.168.208.102:8080/configs/test/default/testyml?ip=192.168.208.1 404找不到,能够看到咱们Apollo客户端其实就是用Http请求拿去配置数据(上面的ip地址分别是我apollo部署的地址和我本机的地址),可是咱们若是更改配置为http://192.168.208.102:8080/configs/test/default/application?ip=192.168.208.1也就是将testyml改成咱们已有的application NameSpace,却能够访问成功。
#修改配置文件application.properties
apollo.bootstrap.namespaces=testyml.yml
复制代码
成功,搞定,很是简单是否是
相信看到这里,Apollo也不难嘛,很容易用的,它主要优势来自于WebUI和细粒度的配置管理。
好的,咱们写一个复杂的
@SpringBootApplication
@EnableApolloConfig
@RestController
public class TestApplication {
//在你yml里面添加一个
//test: 随意
@Value("${test}")
private String content;
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
//监听testyml.yml的变化,填你本身的Namespace啊
@ApolloConfigChangeListener("testyml.yml")
public void change(ConfigChangeEvent cg){
System.out.println("发生改变了啦,我听到了啊--------------------" + cg.getChange("test"));
}
@GetMapping("/hello")
public String hello() {
return "我是来自Apollo的" + content;
}
}
复制代码
application.properties文件
#指定Appid,也就是你在Apollo建立项目指定的Appid,必定要指定对
app.id=test
#指定你的Apollo地址,Apollo 8070为WebUI地址,8080为Eureka注册地址
apollo.meta=http://192.168.208.102:8080
apollo.bootstrap.enabled=true
#指定下你的yml配置
apollo.bootstrap.namespaces=testyml.yml
复制代码
启动后,能够尝试去Apollo修改下你的NameSpace的test对应的value,看看程序会打印出来什么。
Apollo易用性,集群性,高可用很是适合企业开发,并且他用法远不止做为SpringBoot的配置管理,既然咱们能够经过Http拿到配置数据,是否是还有其余不少的应用方法。
最后一句话:Apollo不难,多看看github文档你就会了(中文的啊,还有专门的源码解析)