一, spring集成apollo,前提是apollo配置中心服务端已经在运行中
上面是我在阿里云服务搭建的apollo配置中心服务端,登录后的样子。没有搭建服务端的小伙伴,请先搭建好apollo的服务端
然后点击‘创建项目’,新建测试用的项目
填写类容:
在里面新建测试需要的配置,kay-value格式的
创建/x修改好了,需要发布生效
接下来我们在我们的项目里面配置使用apollo注册中心的里面的配置
在项目的resources里面创建目录‘META-INF’,然后在目录下创建配置文件‘app.properties’,
内容如下:
#自定义的appid名称,区分不同的应用
app.id=20201201
#eureka配置中心地址
apollo.meta=http://139.196.186.76:49006
#启用apollo配置开关
apollo.bootstrap.enabled=true
apollo.bootstrap.eagerLoad.enabled=true
apollo 使用配置的命名空间,多个以逗号分隔
apollo.bootstrap.namespaces = application
然后,在resource文件夹下创建‘apollo-env.properties’配置文件,内容如下:
dev.mate=http://139.196.186.76:49006 #加入apollo在远程服务器上的话,项目在本地测试的话,ip端口需要换成你的apollo远程访问ip+远程开放端口
apollo.autoUpdateInjectedSpringProperties=true
pom 文件添加:
<!--apollo-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-core -->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.3.0</version>
</dependency>
在spring项目的 application.xml里面配置apollo:
<apollo:config order="2"/>
<apollo:config namespaces="application"/>
<bean id="appPropertyPlaceholderConfigurer"
class="cn.glor.monopoly.apollo.config.AppPropertyPlaceholderConfigurer"></bean>
/**
* @描述
* @创建人 joy_qiu
* @创建时间 2020-12-24-18:19
* @修改人和其它信息
*/
public class AppPropertyPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer {
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
try {
//从apollo中获取所有配置信息
Config config = ConfigService.getAppConfig(); //config instance is singleton for each namespace and is never null
Set<String> fieldnames = config.getPropertyNames();
//遍历配置信息
for(String fieldname : fieldnames){
String attributeName=fieldname;
String attributeValue = config.getProperty(fieldname,"");
System.out.println("attributeName:"+attributeName + "; attributeValue:" + attributeValue );
props.put(attributeName,attributeValue);
}
} catch (Exception e) {
e.printStackTrace();
logger.info("获取apollo配置失败");
}
super.processProperties(beanFactoryToProcess, props);
}
}
然后,在本地的环境是Windows的话需要在c://opt/创建settings 文件夹,Linux 环境是在/opt/settings/下面创建,并在settings文件夹下创建文件server.properties文件,注意 参数 ‘idc’ 是指定集群环境的,应为一般项目会有多个环境:dev,uat,pro等等内容如下:
env=DEV
apollo.meta=http://139.196.186.76:49006
apollo.configService=http://139.196.186.76:49006
#配置idc 表示指定集群的配置,不配置使用default集群 的配置
#idc=dev
然后,编写测试的接口:
然后启动项目,测试接口:
访问接口的结果和apollo服务端的一直,然后我们测试下,修改apollo服务端的参数值,看项目是否可以接受到:
记得修改后,要点击发布才能生效
然后直接访问接口:
测试成功,如果远程的apollo服务停止,会读取本地的缓存配置文件,我们看看配置文件在哪里,apollo默认会在windows环境是在C://opt/data/appid/下面
Linux 环境是在/opt/settings/下面
如果是现有项目要集成apollo的话,可以现有项目的配置文件复制到apollo,如下图点击‘文本’,参数格式就和项目里面的格式一样,直接将原项目的参数复制到文本框里面就好了
点击右上角的对号,提交修改
添加成功,点击发布就可以使用了
springboot集成apollo,比spring集成要简单多了,本地的/opt/settings/下面配置不变,代码请看:https://github.com/qzy-joe/springboot_apollo.git