在开发的过程中,我们的项目很多的一些配置的信息都是基于配置文件去进行配置的,例如数据库、redis的连接信息,feign的url等等,当配置多了之后,我们在不同的环境会有不同的配置内容,配置的内容也有可能会时不时的去发生改变,可是每次一改都需要我们去重启项目,确实比较麻烦。而我开发过程中确实也遇到这样的问题,前段时间,我们部门的一位大佬实在忍受不了~~所以也他陆陆续续的将项目加上了apollo,不得不说,用起来还是挺爽的。
1.什么是apollo
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
2.Spring Boot+Apollo的快速上手
这里我是使用了GitHub上的quick start的版本,个人觉得适合刚入门想了解使用apollo的同学们
(参考的url:https://github.com/ctripcorp/apollo)
我是本机装了个虚拟机(CentOS),环境是:jdk1.8,mysql5.7
apollo quick start download:https://github.com/nobodyiam/apollo-build-scripts
- 下载apollo项目
通过打开上面的quick start的地址,点击下载,就会得到一个压缩文件,解压出来后是apollo的项目
- 创建数据库和配置启动脚本数据库信息
打开下载好的apollo项目,其中有一个sql的文件夹,里面有apolloconfigdb.sql、apolloportaldb.sql,我们需要在数据库中执行,会看到分别创建了两个库
,运行sql脚本成功后,我们可以在apolloportaldb中执行以下语句来验证:
接下来是配置数据库的连接信息
我们打开demo.sh,然后对这一块的配置信息做修改,改为自己对应的数据库
# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/apolloconfigdb?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/apolloportaldb?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=
- 启动Apollo
将该项目拖到Linux环境上,默认项目启动,是会使用8070,8080,8090这3个端口,所以我们启动的时候可以查看一下端口有没有被占用,也可以在demo.sh文件中修改我们自己想要的端口。
然后就是执行启动脚本(Linux下)
启动完成之后,我们通过访问ip:8070 就可以进入Apollo的登录页面,账号密码是apollo:admin,接下来我们可以在里面创建项目,配置自己的命名空间,例如我新建了一个appId为demoproject的项目(AppId是应用的身份信息,是从服务端获取配置的一个重要信息),然后我假设我的项目中有setting.properties的文件,这个时候我要将它移到Apollo上,我创建了一个新的namespace,如下
- SpringBoot项目中获取Apollo配置
我简单的创建了一个demo项目,首先我们需要添加apollo的依赖
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.0.0</version> </dependency>
在application配置文件中,我们需要定义appId和url
app.id=demoproject
apollo.meta=http://192.168.1.123:8080
然后在我们项目的启动类中加上注解 @EnableApolloConfig,代表我们开启了Apollo配置,如下
@SpringBootApplication
@EnableApolloConfig
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
接下来新建一个ConfigUtil,用来获取在Apollo上添加的配置内容
public class ConfigUtil {
//setting为我在Apollo上创建的命名空间
private static Config config = ConfigService.getConfig("setting");
public static String getConfig(String key) {
return config.getProperty(key, "defaultValue");
}
}
再创建一个Controller,写一个测试的接口,传输为我们定义的key,用于测试是否能从Apollo上获取到我们的配置内容
@RestController
public class ApolloController {
@GetMapping("getConfig")
public String getConfig(String key) {
return ConfigUtil.getConfig(key);
}
}
是不是觉得代码的编写工作就完成了,其实还没有呢,Apollo上是可以分多个环境的,DEV,PRO,FAT,UAT,所以最后一步我们还需要指定我们是选用那个环境下的配置,我在这里是从启动参数中去设置的
到这里为止,我们所有的准备工作就都做好了,接下来就是启动项目了。在启动项目的过程中,我们需要查看一下启动的日志,看看有没有“Load fail”的字眼,有的话得看看是什么原因没有拉取到,我一开始也是没能获取到,不过后来发现是没有加上选择指定环境导致的。
然后通过访问我们自己测试项目的接口localhost:10031/getConfig?key=xxx看看能不能获取到Apollo上的配置
由于该项目是quick start,所以有些地方写的比较简单,仅供上手参考,如果发现有错误的地方,欢迎留言矫正~~