一、基础配置:
1、pom引入:
<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.8.0</version><exclusions><exclusion><artifactId>guava</artifactId><groupId>com.google.guava</groupId></exclusion></exclusions> </dependency> <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>19.0</version> </dependency>
2、由于依赖冲突,需要修改Spring版本
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring.version>4.3.2.RELEASE</spring.version> </properties>
3、由于比较多的包包含了guava的包,会导致依赖冲突,因此需要在引入的包中排除已有的包,用自己新引入的guava包
4、按照官网的要求,必须在resources中的META-INF新建该文件
apollo.cacheDir主要是为了本地配置apollo读取的代码环境,比如DEV等,但也并非必须,可加可不加
5、在该项目中的配置文件中引入apollo
ps:
①别放错了文件,注意区别spring的配置文件到底是哪个
②此处的
<apollo:config namespaces="application,security" order="1"/>
application、security主要是看apollo的服务端到底建的是哪些命名空间(由于此处公司运维要求,所以必须得用这两个)
6、由于改变了一些依赖的版本,因此需要将部分引入的包进行修改
同理,将报错的代码文件改成对应的新的方法
如此,项目基础引入apollo就可以正常使用了
二、使用方式
1、登录具有创建项目权限的账号,通过一下方式进行创建项目
2、将项目中的所有配置存放到项目中
3、直接启动代码就可以发现现在使用的都是apollo中的配置内容了
三、通过以下方式即可实现变量读取apollo的数据,进而实现动态修改项目需要使用的参数
ps:切记!!!
reportSize:100
为了使用apollo,必须得在读取的变量后面定义默认值,如果读取不到就会使用默认值
${配置名称:默认值}
四、(进阶使用)健康日志使用自定义分片定时任务
package com.bd.plugin.report.config;import com.bd.service.servlet.ReportController;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.LocalDateTime;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.util.Date;@Component
@Slf4j
public class TaskCronChange implements SchedulingConfigurer {@Value("${scheduleTimes:0 0 0 * * ?}")public String cron; // 这个是定时任务的执行规则,比如每2分钟执行一次什么的@ResourceReportController reportController;@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {//项目部署时,会在这里执行一次,从数据库拿到cron表达式// 这句代码就是获取定时任务的执行规则,你从哪里获取都可以,从数据库,从配置中心apollo都可以,根据你的业务需求来。
// cron = "0/20 * * * * ? "; // 这句是个伪代码,你明白意思就好Runnable task = new Runnable() {@Overridepublic void run() {//任务逻辑代码部分.这里调用你要执行的任务就行了log.info("批量查询接口定时器执行当前时间:" + LocalDateTime.now());log.info("cron = " + cron);try {reportController.scheduleQueryByGroup();} catch (Exception e) {e.printStackTrace();}}};Trigger trigger = new Trigger() {@Overridepublic Date nextExecutionTime(TriggerContext triggerContext) {//任务触发,可修改任务的执行周期.//每一次任务触发,都会执行这里的方法一次,重新获取下一次的执行时间
// cron = "0/5 * * * * ? ";CronTrigger trigger = new CronTrigger(cron);Date nextExec = trigger.nextExecutionTime(triggerContext);return nextExec;}};taskRegistrar.addTriggerTask(task, trigger);}}