- 关于apollo的介绍和搭建
参考文档https://blog.csdn.net/xiaobo5264063/article/details/99693021 - 如何发布和读取apollo文件
提前创建一个springboot项目,application.yml文件内容如下:
application.yml内容根据自己的项目就可以了###服务启动端口号 server: port: 8200 ###服务名称(服务注册到eureka名称) spring: application: name: app-pitch-weixin ###服务注册到eureka地址 eureka: client: service-url: defaultZone: http://localhost:8100/eureka ####swagger相关配置 swagger: base-package: com.pitch.weixin.service title: 摆摊网项目-微信服务接口 description: 该项目基于SpringBoot2.0构建微服务电商项目。 version: 1.0 terms-of-service-url: www.baidu.com contact: name: 汪小波 email: 1115264063@qq.com
- 如何发布文件到apollo
- 登录apollo,地址: http://IP:8070/, 点击'创建项目'
- 创建项目
应用Id、应用名称: 都可以自定义,这里我写的是'app-pitch-weixin'
部门、应用负责人、项目管理员: 这里因为是测试就选默认的
输入完成后,点击'提交' - 将yml文件转成properties文件
因为apollo默认支持properties文件文件,不支持yml直接上传,所以我们需要将application.yml转成application.properties
在线转换工具地址: https://www.toyaml.com/index.html - 配置文件
将转换的properties文件内容,配置到apollo上对应的app-pitch-weixin项目去
选择'文本'-->'修改配置'-->输入内容-->'提交' - 发布
点击页面上方的'发布'按钮-->确认再按'发布' - 这里就发布完成了
- 如何读取apollo文件
- 在刚刚创建的项目中的pom.xml引入依赖,
<!--引入apollo整合springboot依赖--> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-core</artifactId> <version>1.0.0</version> </dependency>
- 创建 application.properties,配置内容如下
app.id: 就是在apollo中,创建项目的AppIdapp.id=app-pitch-weixin apollo.meta=http://IP:8080
apollo.meta: 就是apollo的demo.sh文件配置的config_server_url地址 - 配置不同环境
应用在不同的环境可以有不同的配置
可以通过以下3种方式的任意一个配置 // 我是第3种方式实现的
1) 通过Java的System Property env来指定环境: System.setProperty("env", "DEV");
2) 通过操作系统的System Environment env来指定环境
3) 通过配置文件,文件位置:
window下位置 C:\opt\settings\server.properties
linux下位置 /opt/settings/server.properties
server.properties文件内容
目前,env支持以下几个值(大小写不敏感):DEV, FAT, UAT, PRO - 启动类开启apollo
启动项目 // 启动前最好先删除application.yml文件(提前备份下)import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig; import com.spring4all.swagger.EnableSwagger2Doc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; /** * Create by wangxb * 2019-10-02 17:32 */ @SpringBootApplication @EnableEurekaClient @EnableSwagger2Doc @EnableApolloConfig // 开启apollo配置注解 public class AppWeiXin { public static void main(String[] args) { SpringApplication.run(AppWeiXin.class, args); } }
- 查看本地的缓存文件
默认情况下,当项目启动后,会读取apollo的配置,在缓存在本地,缓存路径: C:\opt\data\${AppId}\config-cache\****.properties,当服务器读取失败,就会使用本地缓存的配置文件 - 测试
我们用apollo配置的8200端口号,如果能访问项目,说明成功了!!!
- apollo实时监听
import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.ConfigChangeListener; import com.ctrip.framework.apollo.model.ConfigChangeEvent; import com.ctrip.framework.apollo.spring.annotation.ApolloConfig; import lombok.extern.slf4j.Slf4j; /** * 开启分布式配置中心阿波罗监听 监听application.properties配置appllo上appid的所有key和value的变化 * Create by wangxb * 2019-10-02 17:28 */ @Component @Slf4j public class MyCommandLineRunner implements CommandLineRunner { @ApolloConfig private Config config; @Override public void run(String... args) throws Exception { log.info("####apollo开始监听#####" ); config.addChangeListener(new ConfigChangeListener() { @Override public void onChange(ConfigChangeEvent changeEvent) { log.info("####分布式配置中心监听#####" + changeEvent.changedKeys().toString()); } }); } }
- 基于Namespace创建配置文件信息
- 登录apollo,进入到你的项目,点击'添加Namespace'
- 配置Namespace信息,选择'创建Namespace'
名称 : 自定义
类型: public表示可以被其他的appid项目引用,private表示只能是当前appid使用
点击'提交'-->'返回到项目首页' - 配置你的文件信息
在新建的Namespace配置你的文件信息
保存、发布 - 项目配置
在你的微信项目的application.properties配置如下信息
默认的namespace是application##开启读取配信文件信息 app.id=app-pitch-weixin apollo.meta=http://192.168.2.119:8080 ##开启读取多个namespace配置文件 apollo.bootstrap.enabled = true ##读取apollo上namespace为application和app-pitch-weixin-mp文件内容 apollo.bootstrap.namespaces = application,app-pitch-weixin-mp
- 启动项目
查看本地是否缓存了你的namespace配置信息
测试你的微信配置是否读取到