本篇主要介绍SpringBoot集成apollo以及集成中遇到的一些坑。本篇将不介绍新建SpringBoot项目
1.引入apollo-client的jar包
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>${apollo.version}</version>
</dependency>
2.apollo配置
本文只作简单的集成,所以只介绍比较简单的基于yml文件的配置
app:
id: api-message
apollo:
meta: http://localhost:9080
这里的appid是通过apollo后台新建项目时填写的。meta-server地址就是你部署的apollo-configserver的地址(详情请见上篇)
3.添加apollo-client注解
在启动类上加上EnableApolloConfig的注解
@SpringBootApplication
@EnableApolloConfig
public class ApiMessageApplication {
public static void main(String[] args) {
SpringApplication.run(ApiMessageApplication.class, args);
AnnotatedBean annotatedBean = context.getBean(AnnotatedBean.class);
while (true) {
System.out.print("> ");
String input = new BufferedReader(new InputStreamReader(System.in, Charsets.UTF_8)).readLine();
if (!Strings.isNullOrEmpty(input) && input.trim().equalsIgnoreCase("quit")) {
System.exit(0);
}
System.out.println(annotatedBean.toString());
}
}
}
4.通过后台添加配置
5.测试
这边先贴出AnnotatedBean的代码
@Component("annotatedBean")
public class AnnotatedBean {
private static final Logger logger = LoggerFactory.getLogger(AnnotatedBean.class);
private int timeout;
private int batch;
private List<JsonBean> jsonBeans;
/**
* ApolloJsonValue annotated on fields example, the default value is specified as empty list - []
* <br />
* jsonBeanProperty=[{"someString":"hello","someInt":100},{"someString":"world!","someInt":200}]
*/
@ApolloJsonValue("${jsonBeanProperty:[]}")
private List<JsonBean> anotherJsonBeans;
@Value("${batch:100}")
public void setBatch(int batch) {
logger.info("updating batch, old value: {}, new value: {}", this.batch, batch);
this.batch = batch;
}
@Value("${timeout:200}")
public void setTimeout(int timeout) {
logger.info("updating timeout, old value: {}, new value: {}", this.timeout, timeout);
this.timeout = timeout;
}
/**
* ApolloJsonValue annotated on methods example, the default value is specified as empty list - []
* <br />
* jsonBeanProperty=[{"someString":"hello","someInt":100},{"someString":"world!","someInt":200}]
*/
@ApolloJsonValue("${jsonBeanProperty:[]}")
public void setJsonBeans(List<JsonBean> jsonBeans) {
logger.info("updating json beans, old value: {}, new value: {}", this.jsonBeans, jsonBeans);
this.jsonBeans = jsonBeans;
}
@Override
public String toString() {
return String.format("[AnnotatedBean] timeout: %d, batch: %d, jsonBeans: %s", timeout, batch, jsonBeans);
}
private static class JsonBean{
private String someString;
private int someInt;
@Override
public String toString() {
return "JsonBean{" +
"someString='" + someString + '\'' +
", someInt=" + someInt +
'}';
}
}
}
我这边输入timeout,控制台输出 1000
欢迎扫描下面图片关注我的个人公众号,回复“资源”可以获取java核心知识整理和经典书籍