官网下载sql ,创建ApolloConfigDB,ApolloPortalDB数据库
https://github.com/ctripcorp/apollo/tree/master/scripts/sql
创建容器
docker run -d --name apollo -p 8090:8090 -p 8080:8080 -p 8070:8070 nobodyiam/apollo-quick-start:latest
起不起来, 修改demo.sh
下载demo.sh
docker cp apollo:/apollo-quick-start/demo.sh .
修改成对应的数据源,密码当中不要有一些特殊的符号,比如&,坑很大
apollo_config_db_url=jdbc:mysql://10.8.0.5:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://10.8.0.5:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=
修改注册的eureka的ip,否则会已docker的ip注册
增加ip -Deureka.instance.ip-address=10.8.0.1
SERVER_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url -Deureka.instance.ip-address=10.8.0.1"
启动apollo
上传demo.sh ,启动
docker cp demo.sh apollo:/apollo-quick-start/
docker restart apollo
使用一些坑
将org.springframework.boot:spring-boot-devtools这样的依赖,去掉,否则apollo一有改动,就重启
一些有用的case
https://github.com/ctripcorp/apollo-use-cases
动态开始日志级别
在apolo 创建 logging.level=debug
java 客户端
package com.cc.config;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.logging.LogLevel;
import org.springframework.boot.logging.LoggingSystem;
import org.springframework.stereotype.Service;
/**
* Created by kl on 2018/6/25. Content :动态日志配置
*/
@Service
public class LoggerConfiguration {
private static final Logger logger = LoggerFactory.getLogger(LoggerConfiguration.class);
private static final String LOGGER_TAG = "logging.level";
@Resource
private LoggingSystem loggingSystem;
@ApolloConfig
private Config config;
@ApolloConfigChangeListener
private void onChange(ConfigChangeEvent changeEvent) {
refreshLoggingLevels();
}
@PostConstruct
private void refreshLoggingLevels() {
Set<String> keyNames = config.getPropertyNames();
for (String key : keyNames) {
if (LOGGER_TAG.equalsIgnoreCase(key)) {
String strLevel = config.getProperty(key, "info");
LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level);
logger.info("日志级别:{}->改为了:{}", key, strLevel);
}
}
}
}