Giter Site home page Giter Site logo

apolloconfig / apollo-use-cases Goto Github PK

View Code? Open in Web Editor NEW
936.0 936.0 400.0 132 KB

Show various usage scenarios and sample codes of the Apollo configuration center, welcome to share more configuration use cases in your daily work!

License: Apache License 2.0

Java 97.23% Shell 2.77%

apollo-use-cases's People

Contributors

anilople avatar bugcodes avatar dependabot[bot] avatar jokimina avatar klboke avatar ksewen avatar nobodyiam avatar oaoit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apollo-use-cases's Issues

动态刷新日志疑问

spring cloud动态刷新日志为什么还要加一个PostConstruct,只是监听logging.level.配置不就可以了吗

public class LoggerLevelRefresher implements ApplicationContextAware {

  private ApplicationContext applicationContext;

  @ApolloConfig
  private Config config;

  @PostConstruct
  private void initialize() {
    refreshLoggingLevels(config.getPropertyNames());
  }

  @ApolloConfigChangeListener(interestedKeyPrefixes = {"logging.level."})
  private void onChange(ConfigChangeEvent changeEvent) {
    refreshLoggingLevels(changeEvent.changedKeys());
  }

  private void refreshLoggingLevels(Set<String> changedKeys) {
    System.out.println("Refreshing logging levels");

    /**
     * refresh logging levels
     * @see org.springframework.cloud.logging.LoggingRebinder#onApplicationEvent
     */
    this.applicationContext.publishEvent(new EnvironmentChangeEvent(changedKeys));

    System.out.println("Logging levels refreshed");
  }

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
}

spring-cloud-gateway配合apollo做动态路由,删除路由时报错

SpringCloud 版本:Greenwich.SR4
SpringBoot 版本:2.1.11.RELEASE
Apollo Client 版本:1.5.0

代码完全 Copy 的官方提供的 demo,测试发现在运行时可以增加和修改路由,但删除路由则会报错。完整报错信息如下:

org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'gatewayProperties': Could not bind properties to 'GatewayProperties' : prefix=spring.cloud.gateway, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.cloud.gateway.routes' to java.util.List<org.springframework.cloud.gateway.route.RouteDefinition>
	at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.bind(ConfigurationPropertiesBindingPostProcessor.java:104)
	at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:89)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:414)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1763)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:405)
	at org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder.rebind(ConfigurationPropertiesRebinder.java:102)
	at org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder.rebind(ConfigurationPropertiesRebinder.java:83)
	at org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder.onApplicationEvent(ConfigurationPropertiesRebinder.java:128)
	at org.springframework.cloud.context.properties.ConfigurationPropertiesRebinder.onApplicationEvent(ConfigurationPropertiesRebinder.java:50)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359)
	at com.ganpengyu.demo.gateway.cloud.config.DynamicRoutesRefresher.refreshGatewayProperties(DynamicRoutesRefresher.java:66)
	at com.ganpengyu.demo.gateway.cloud.config.DynamicRoutesRefresher.onChange(DynamicRoutesRefresher.java:52)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
	at com.ctrip.framework.apollo.spring.annotation.ApolloAnnotationProcessor$1.onChange(ApolloAnnotationProcessor.java:63)
	at com.ctrip.framework.apollo.internals.AbstractConfig$2.run(AbstractConfig.java:449)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.cloud.gateway.routes' to java.util.List<org.springframework.cloud.gateway.route.RouteDefinition>
	at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:242)
	at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:218)
	at org.springframework.boot.context.properties.bind.Binder.lambda$bindBean$3(Binder.java:322)
	at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:80)
	at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:70)
	at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:54)
	at org.springframework.boot.context.properties.bind.Binder.lambda$null$4(Binder.java:329)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359)
	at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
	at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
	at org.springframework.boot.context.properties.bind.Binder.lambda$bindBean$5(Binder.java:330)
	at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:429)
	at org.springframework.boot.context.properties.bind.Binder$Context.withBean(Binder.java:415)
	at org.springframework.boot.context.properties.bind.Binder$Context.access$400(Binder.java:372)
	at org.springframework.boot.context.properties.bind.Binder.bindBean(Binder.java:328)
	at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:269)
	at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:214)
	at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:202)
	at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:185)
	at org.springframework.boot.context.properties.ConfigurationPropertiesBinder.bind(ConfigurationPropertiesBinder.java:78)
	at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.bind(ConfigurationPropertiesBindingPostProcessor.java:101)
	... 27 common frames omitted
Caused by: org.springframework.boot.context.properties.bind.UnboundConfigurationPropertiesException: The elements [spring.cloud.gateway.routes[1].filters[0],spring.cloud.gateway.routes[1].id,spring.cloud.gateway.routes[1].predicates[0],spring.cloud.gateway.routes[1].uri] were left unbound.
	at org.springframework.boot.context.properties.bind.IndexedElementsBinder.assertNoUnboundChildren(IndexedElementsBinder.java:136)
	at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:113)
	at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:86)
	at org.springframework.boot.context.properties.bind.IndexedElementsBinder.bindIndexed(IndexedElementsBinder.java:71)
	at org.springframework.boot.context.properties.bind.CollectionBinder.bindAggregate(CollectionBinder.java:49)
	at org.springframework.boot.context.properties.bind.AggregateBinder.bind(AggregateBinder.java:56)
	at org.springframework.boot.context.properties.bind.Binder.lambda$bindAggregate$2(Binder.java:293)
	at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:429)
	at org.springframework.boot.context.properties.bind.Binder$Context.access$100(Binder.java:372)
	at org.springframework.boot.context.properties.bind.Binder.bindAggregate(Binder.java:293)
	at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:254)
	at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:214)
	... 52 common frames omitted

unknown JARS version

Import the project, but maven unknown jars version, project unable to run。
How to solve this problem?

logback-spring 占位符无法被替换

  1. apollo-client: 0.10.0
  2. application.properties
apollo.bootstrap.enabled = true
  1. apollo 配置中属性
log.path = /data/logs/boot/
  1. logback ${log.path} 无法被替换 目录为: log.path_IS_UNDEFINED
<?xml version="1.0"?>
<configuration>
    <springProperty scope="context" name="log.path" source="log.path"/>
    <property name="LOGS" value="${log.path}"/>
    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS}/boot.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOGS}/boot-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>20</maxHistory>
            <CleanHistoryOnStart>true</CleanHistoryOnStart>
        </rollingPolicy>
    </appender>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
        </layout>
    </appender>
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="RollingFile"/>
    </root>
</configuration>

能否提供发布之前中间状态的便捷撤销功能?

场景:
删除了某项配置,还未发布,此时不想删除了;
修改某项配置,还未发布,此时不想修改了;

目前没有快捷的方式撤销之前的删除或修改,只能反向操作;
比如不想删除了,需要新增相同key-value的项;不想修改了,需要把value改回原来的值;步骤稍微繁琐了一些,如果有一键撤销的方式,就方便很多。

[open-api] release namespace 相关问题

开发者你好。
我在使用openapi进行配置发布时,遇到了两个问题。

  1. 使用OpenApi初次调用【配置发布】接口时,管理后台显示tag:有修改,发布历史:存在新纪录,但是内容空白。当第二次调用时,一切正常。
  2. 配置了 webhook,但当使用openapi的【配置发布】接口时,没有成功触发webhook通知。

参考文档:3.2.13配置发布

我的平台:.NET 4.6
使用的SDK版本:Com.Ctrip.Framework.Apollo.OpenApi v2.10.0.0

以下是第一次调用与第二次管理端变化的截图

  1. 第一次
    image

  2. 第二次
    image

期待回复!

ZuulPropertiesRefresher中配置删除问题

有这样一个case:
如果删除zuul原有的一个route配置,DiscoveryClientRouteLocator中使用的ZuulProperties不会更新,当然handlerMapping中的记录也不会删除。

虽然对业务可能影响很小,但是也算是一个遗留问题。

动态刷新druid数据源实现

模仿示例,写了个druid的动态刷新数据源实现. DataSource更新成功,但查询的时候连接的还是旧数据源.是因为druid的问题吗

针对应用启动前需要读取文件配置的处理

除了java应用在运行中实时listen namespace的配置, 实际上还有文件配置会出现差异情况,

在我们场景, 比如properties等包含数据源或其他需要在应用启动前读取的配置, 在应用启动前由shell通过不同参数从apollo拉取到本地, 从而实现一个镜像可以放在任何环境跑.
约定公共配置文件抽离到public, 有需要的关联覆盖相应配置项.

不知道这种算不算use case. 大致内容如下, 觉得可以的话我之后提交一个pr.

#!/bin/bash
CONFIG_SERVER_BASE_URL=${CONFIG_SERVER_BASE_URL:?"need env param [CONFIG_SERVER_BASE_URL]"}
APOLLO_APP_ID=${APOLLO_APP_ID:?"need env param [APOLLO_APP_ID]"}
PUBLIC_PREFIX=${PUBLIC_PREFIX:-"PLATFORM"}
APOLLO_CLUSTER=${APOLLO_CLUSTER:-"default"}
CONFIG_FILES="$(find /data/tomcat/webapps/ROOT/WEB-INF/classes/ -name "*.properties" ! -path "*static*"  | awk -vFS="/" '{print $NF}')"
ECS_IP=$(curl http://100.100.100.200/latest/meta-data/private-ipv4)
APOLLO_FORCE_PROPERTIES=${APOLLO_FORCE_PROPERTIES:-"true"}


for _config_file in ${CONFIG_FILES[@]}
do
    export result=
    echo "## $_config_file"
    _abs_config_file_path=`find /data/tomcat/webapps/ROOT/WEB-INF/classes/ -name "$_config_file" ! -path "*static*"`
    _namespace=${_config_file%%.*}

    if [ x"$_namespace" = x"config" ] || [ x"$_namespace" = x"db-config" ] || [ x"$_namespace" = x"redis" ];then
        _namespace="${PUBLIC_PREFIX}.${_namespace}"
    fi

    result=$(curl -s ${CONFIG_SERVER_BASE_URL}/configfiles/${APOLLO_APP_ID}/${APOLLO_CLUSTER}/${_namespace}?ip=${ECS_IP} | tr -d '\\' )
    if echo $result | grep -q 'Not Found' ;then
        echo "#################        $_config_file not found in apollo!!!      #######################"  
        if [ x"$APOLLO_FORCE_PROPERTIES" = x"true" ];then
            exit 404
        fi
        continue
    fi
    echo "### init  ${_abs_config_file_path} ..."
    echo "$result" | sort  > ${_abs_config_file_path}
done

针对Docker版本的apollo-quick-start来集成spring-boot-logger的问题

问题描述:

  • 测试机器本地mac os
  • 先启动Apollo Quick Start Docker部署服务,按照文档所属
  • 接着在portal按照apollo-use-cases/spring-boot-loggerREADME.md创建应用和配置
  • 启动应用,日志如下:
 :: Spring Boot ::        (v2.0.3.RELEASE)

2019-03-23 21:22:17.407  INFO 97534 --- [           main] c.c.f.a.u.c.s.boot.logger.Application    : Starting Application on jiiiiiins-MacBook-Pro.local with PID 97534 (/Users/jiiiiiin/Documents/GitHub/apollo-use-cases/spring-boot-logger/target/classes started by jiiiiiin in /Users/jiiiiiin/Documents/GitHub/apollo-use-cases)
2019-03-23 21:22:17.411  INFO 97534 --- [           main] c.c.f.a.u.c.s.boot.logger.Application    : No active profile set, falling back to default profiles: default
2019-03-23 21:22:17.462  INFO 97534 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@1fc32e4f: startup date [Sat Mar 23 21:22:17 CST 2019]; root of context hierarchy
2019-03-23 21:22:17.839  INFO 97534 --- [           main] c.c.f.f.i.p.DefaultApplicationProvider   : App ID is set to spring-boot-logger by app.id property from System Property
2019-03-23 21:22:17.840  INFO 97534 --- [           main] c.c.f.f.i.p.DefaultServerProvider        : Environment is set to null. Because it is not available in either (1) JVM system property 'env', (2) OS env variable 'ENV' nor (3) property 'env' from the properties InputStream.
2019-03-23 21:22:17.991  INFO 97534 --- [           main] c.c.f.a.i.DefaultMetaServerProvider      : Located meta services from apollo.meta configuration: http://localhost:8080!
2019-03-23 21:22:17.994  INFO 97534 --- [           main] c.c.f.apollo.core.MetaDomainConsts       : Located meta server address http://localhost:8080 for env UNKNOWN from com.ctrip.framework.apollo.internals.DefaultMetaServerProvider
2019-03-23 21:22:23.048  WARN 97534 --- [           main] c.c.f.a.i.RemoteConfigRepository         : Load config failed, will retry in 1 SECONDS. appId: spring-boot-logger, cluster: default, namespaces: application
2019-03-23 21:22:29.057  WARN 97534 --- [           main] c.c.f.a.i.AbstractConfigRepository       : Sync config failed, will retry. Repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository, reason: Load Apollo Config failed - appId: spring-boot-logger, cluster: default, namespace: application, url: http://172.18.0.4:8080/configs/spring-boot-logger/default/application?ip=192.168.33.1 [Cause: Could not complete get operation [Cause: Read timed out]]
2019-03-23 21:22:34.070  WARN 97534 --- [           main] c.c.f.a.i.RemoteConfigRepository         : Load config failed, will retry in 1 SECONDS. appId: spring-boot-logger, cluster: default, namespaces: application
2019-03-23 21:22:40.077  WARN 97534 --- [           main] c.c.f.a.i.LocalFileConfigRepository      : Sync config from upstream repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository failed, reason: Load Apollo Config failed - appId: spring-boot-logger, cluster: default, namespace: application, url: http://172.18.0.4:8080/configs/spring-boot-logger/default/application?ip=192.168.33.1 [Cause: Could not complete get operation [Cause: Read timed out]]
2019-03-23 21:22:45.082  WARN 97534 --- [           main] c.c.f.a.i.RemoteConfigRepository         : Load config failed, will retry in 1 SECONDS. appId: spring-boot-logger, cluster: default, namespaces: application
2019-03-23 21:22:51.085  WARN 97534 --- [ngPollService-1] c.c.f.a.i.RemoteConfigLongPollService    : Long polling failed, will retry in 1 seconds. appId: spring-boot-logger, cluster: default, namespaces: application, long polling url: http://172.18.0.4:8080/notifications/v2?cluster=default&appId=spring-boot-logger&ip=192.168.33.1&notifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D, reason: java.io.IOException: Server returned HTTP response code: 503 for URL: http://172.18.0.4:8080/notifications/v2?cluster=default&appId=spring-boot-logger&ip=192.168.33.1&notifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D [Cause: Server returned HTTP response code: 503 for URL: http://172.18.0.4:8080/notifications/v2?cluster=default&appId=spring-boot-logger&ip=192.168.33.1&notifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D [Cause: Server returned HTTP response code: 503 for URL: http://172.18.0.4:8080/notifications/v2?cluster=default&appId=spring-boot-logger&ip=192.168.33.1&notifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D]]
2019-03-23 21:22:51.092  WARN 97534 --- [           main] c.c.f.a.i.LocalFileConfigRepository      : Sync config from upstream repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository failed, reason: Load Apollo Config failed - appId: spring-boot-logger, cluster: default, namespace: application, url: http://172.18.0.4:8080/configs/spring-boot-logger/default/application?ip=192.168.33.1 [Cause: Could not complete get operation [Cause: Read timed out]]
2019-03-23 21:22:51.108  INFO 97534 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2019-03-23 21:22:51.176  INFO 97534 --- [           main] c.c.f.a.u.c.s.b.l.LoggerConfiguration    : 监听到level变化 debug logging.level.com.ctrip.framework.apollo.use.cases.spring.boot.logger
2019-03-23 21:22:51.177  INFO 97534 --- [           main] c.c.f.a.u.c.s.b.l.LoggerConfiguration    : logging.level.com.ctrip.framework.apollo.use.cases.spring.boot.logger:debug
2019-03-23 21:22:51.183  INFO 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是info级别日志
2019-03-23 21:22:51.183 ERROR 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是error级别日志
2019-03-23 21:22:51.183  WARN 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是warn级别日志
2019-03-23 21:22:51.183 DEBUG 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是debug级别日志
2019-03-23 21:22:51.360  INFO 97534 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2019-03-23 21:22:51.381  INFO 97534 --- [           main] c.c.f.a.u.c.s.boot.logger.Application    : Started Application in 34.439 seconds (JVM running for 38.57)
2019-03-23 21:22:52.186  INFO 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是info级别日志
2019-03-23 21:22:52.186 ERROR 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是error级别日志
2019-03-23 21:22:52.186  WARN 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是warn级别日志
2019-03-23 21:22:52.186 DEBUG 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是debug级别日志
2019-03-23 21:22:53.190  INFO 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是info级别日志
2019-03-23 21:22:53.190 ERROR 97534 --- [pool-3-thread-1] c.c.f.a.u.c.s.boot.logger.PrintLogger    : 我是error级别日志

发现2019-03-23 21:22:17.994 INFO 97534 --- [ main] c.c.f.apollo.core.MetaDomainConsts : Located meta server address http://localhost:8080 for env UNKNOWN from com.ctrip.framework.apollo.internals.DefaultMetaServerProvider

但是通过常规方式部署apollo-quick-start是能测试改case的。

请教一下,这种应该如何调试?

loglevel的修改只能在application这个namespace下?

我调试的时候看到initialize 方法里面绑定的是application这个namespace,自己添加的listener只能监听application的变化? 如果是能不能自定义

我测试了下 在 initialize 的时候自己来覆盖config 但是不行

@ApolloConfigChangeListener 无效

`
@slf4j
@component
public class ApolloConfig implements ApplicationContextAware {

private ApplicationContext applicationContext;

@ApolloConfigChangeListener
public void onChange(ConfigChangeEvent changeEvent){
    log.info("apollo conf update starts!");
    // 更新configrationProperties
    applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
    log.info("apollo conf update success!");
}

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext.getParent();
}

}
`

这边能取到最新配置,但是使用@ConfigurationProperties(prefix = "spring.datasource")的配置还是久的值

Sentinel to Apollo to App 使用案例

Sentinel to Apollo to App

1.应用端获取配置中心的流控规则(限流规则、热点参数规则等)
2.Sentinel控制台持久化流控规则到配置中心
3.Sentinel控制台设置的流控规则,是否需要发布可通过参数配置
如果配置为false 则需要在配置中心进行发布操作

https://mp.weixin.qq.com/s?__biz=MzA4NzA0NjAzOQ==&mid=2257484007&idx=1&sn=26e228c98d0743df098969be4a86f106&chksm=9345ba1fa43233090885ba37b601ed9f28e278c6585b5c73c5e6d801615240defd48786a79f5&scene=0&xtrack=1#rd

dynamic-datasource如果之前数据库连接错误,无法关闭,直至达到最大重试次数。

如果出现数据库连接错误,比如url写错了,会实例化一个HikariDataSource(null),在重新配置新数据库设置后,将关闭上一个连接,进入terminateHikariDataSource()方法,执行poolMXBean.softEvictConnections()时抛会异常,致使不断循环直到达到最大重试次数,在terminate()方法中的if (dataSource instanceof HikariDataSource )添加一个非空检查可以避免不断重试。

jasypt-spring-boot 2.1.0 会使placeholder方式的自动刷新功能失效

引入jasypt-spring-boot-starter后,apollo本身的placeholder方式的自动刷新功能失效(包括未加密的key),refreshscope方式的不受影响可以正常刷新,请问有什么解决方法吗?谢谢!
具体表现为:

  1. 配置更新后AutoUpdateConfigChangeListener并未收到事件通知(控制台无日志打印)
  2. 采用ApolloConfigChangeListener注解可以监听到事件
  3. config.getProperty方式可以获取最新的值
  4. 配置中心的实例列表会认为该应用已经使用了最新配置,实际并未生效

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.