diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..00df371 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,15 @@ +@Library('jenkins-ci-automation@master') _ + +BlibliPipeline ([ + type : "java", + modules: [ + Docker: null, + Analysis: null + ], + deploy_branch_regex : "(master|release/.+)", + application : [ + tribe : "rnd", + squad : "backend", + service_name : "blibli-backend-framework" + ] +]) \ No newline at end of file diff --git a/blibli-backend-framework-aggregate-query/pom.xml b/blibli-backend-framework-aggregate-query/pom.xml index b9fd997..28380cd 100644 --- a/blibli-backend-framework-aggregate-query/pom.xml +++ b/blibli-backend-framework-aggregate-query/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-api-client/pom.xml b/blibli-backend-framework-api-client/pom.xml index c6fe6b7..dfd1a23 100644 --- a/blibli-backend-framework-api-client/pom.xml +++ b/blibli-backend-framework-api-client/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 @@ -19,7 +19,6 @@ com.blibli.oss blibli-backend-framework-sleuth - provided org.springframework diff --git a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/sleuth/SleuthGlobalApiClientInterceptor.java b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/sleuth/SleuthGlobalApiClientInterceptor.java index c1cd239..d8c53aa 100644 --- a/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/sleuth/SleuthGlobalApiClientInterceptor.java +++ b/blibli-backend-framework-api-client/src/main/java/com/blibli/oss/backend/apiclient/sleuth/SleuthGlobalApiClientInterceptor.java @@ -1,7 +1,7 @@ package com.blibli.oss.backend.apiclient.sleuth; import brave.Tracer; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import com.blibli.oss.backend.apiclient.interceptor.GlobalApiClientInterceptor; import com.blibli.oss.backend.apiclient.properties.ApiClientProperties; import com.blibli.oss.backend.sleuth.configuration.SleuthConfiguration; @@ -23,7 +23,7 @@ public Mono filter(ClientRequest request, ExchangeFunction next) if (properties.getSleuth().isEnabled() && tracer.currentSpan() != null) { return Mono.fromCallable(() -> { ClientRequest.Builder builder = ClientRequest.from(request); - ExtraFieldPropagation.getAll(tracer.currentSpan().context()).forEach((key, value) -> { + BaggageField.getAllValues(tracer.currentSpan().context()).forEach((key, value) -> { builder.header(SleuthConfiguration.HTTP_BAGGAGE_PREFIX + key, value); }); return builder.build(); diff --git a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java index b236b9c..3c52be1 100644 --- a/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java +++ b/blibli-backend-framework-api-client/src/test/java/com/blibli/oss/backend/apiclient/controller/SleuthController.java @@ -1,7 +1,7 @@ package com.blibli.oss.backend.apiclient.controller; import brave.Tracer; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import com.blibli.oss.backend.apiclient.client.SleuthApiClient; import com.blibli.oss.backend.apiclient.client.model.GenericResponse; import com.blibli.oss.backend.sleuth.configuration.SleuthConfiguration; @@ -33,8 +33,8 @@ public class SleuthController { ) public Mono> first(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName) { - ExtraFieldPropagation.set(tracer.currentSpan().context(), "FirstName", firstName); - ExtraFieldPropagation.set(tracer.currentSpan().context(), "LastName", lastName); + BaggageField.getByName(tracer.currentSpan().context(), "FirstName").updateValue(tracer.currentSpan().context(), firstName); + BaggageField.getByName(tracer.currentSpan().context(), "LastName").updateValue(tracer.currentSpan().context(), lastName); return sleuthApiClient.second(); } @@ -44,8 +44,8 @@ public Mono> first(@RequestParam("firstName") String firstNa ) public Mono> second(ServerWebExchange exchange) { Map map = new HashMap<>(); - map.put("firstName", ExtraFieldPropagation.get(tracer.currentSpan().context(), "FirstName")); - map.put("lastName", ExtraFieldPropagation.get(tracer.currentSpan().context(), "LastName")); + map.put("firstName", BaggageField.getByName(tracer.currentSpan().context(), "FirstName").getValue(tracer.currentSpan().context())); + map.put("lastName", BaggageField.getByName(tracer.currentSpan().context(), "LastName").getValue(tracer.currentSpan().context())); map.put("headerFirstName", exchange.getRequest().getHeaders().getFirst(SleuthConfiguration.HTTP_BAGGAGE_PREFIX + "firstname")); map.put("headerLastName", exchange.getRequest().getHeaders().getFirst(SleuthConfiguration.HTTP_BAGGAGE_PREFIX + "lastname")); return Mono.just(map); diff --git a/blibli-backend-framework-api-client/src/test/resources/application.properties b/blibli-backend-framework-api-client/src/test/resources/application.properties index a9f4cb8..3158fad 100644 --- a/blibli-backend-framework-api-client/src/test/resources/application.properties +++ b/blibli-backend-framework-api-client/src/test/resources/application.properties @@ -6,7 +6,7 @@ blibli.backend.apiclient.configs.sleuthApiClient.url=http://localhost:15234 blibli.backend.apiclient.configs.helloApiClient.url=http://localhost:8089 blibli.backend.apiclient.configs.helloApiClient.fallback=com.blibli.oss.backend.apiclient.client.HelloApiClientFallback -spring.http.log-request-details=true +spring.mvc.log-request-details=true logging.level.org.springframework.web.reactive.function.client.ExchangeFunctions=TRACE logging.level.reactor.netty.http.client=DEBUG @@ -17,6 +17,7 @@ blibli.backend.reactor.scheduler.configs.exampleClient.thread-pool.maximum-pool- blibli.backend.reactor.scheduler.configs.exampleClient.thread-pool.queue-size=100 blibli.backend.reactor.scheduler.configs.exampleClient.thread-pool.queue-type=linked -spring.sleuth.baggage-keys[0]=FirstName +spring.sleuth.baggage.local-fields[0]=FirstName +spring.sleuth.baggage.remote-fields[0]=FirstName blibli.backend.apiclient.sleuth.enabled=true \ No newline at end of file diff --git a/blibli-backend-framework-command/pom.xml b/blibli-backend-framework-command/pom.xml index 6a6761b..3382ca6 100644 --- a/blibli-backend-framework-command/pom.xml +++ b/blibli-backend-framework-command/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-common/pom.xml b/blibli-backend-framework-common/pom.xml index b4f694a..8b34dda 100644 --- a/blibli-backend-framework-common/pom.xml +++ b/blibli-backend-framework-common/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-external-api/pom.xml b/blibli-backend-framework-external-api/pom.xml index 57277f8..56eaf64 100644 --- a/blibli-backend-framework-external-api/pom.xml +++ b/blibli-backend-framework-external-api/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-external-api/src/main/java/com/blibli/oss/backend/externalapi/helper/ExternalSessionHelper.java b/blibli-backend-framework-external-api/src/main/java/com/blibli/oss/backend/externalapi/helper/ExternalSessionHelper.java index f56d235..6ae0210 100644 --- a/blibli-backend-framework-external-api/src/main/java/com/blibli/oss/backend/externalapi/helper/ExternalSessionHelper.java +++ b/blibli-backend-framework-external-api/src/main/java/com/blibli/oss/backend/externalapi/helper/ExternalSessionHelper.java @@ -1,6 +1,6 @@ package com.blibli.oss.backend.externalapi.helper; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import brave.propagation.TraceContext; import com.blibli.oss.backend.externalapi.model.ExternalSession; import com.blibli.oss.backend.externalapi.properties.ExternalApiProperties; @@ -28,11 +28,11 @@ public static ExternalSession getExternalSession(HttpHeaders headers, ExternalAp public static ExternalSession fromSleuth(TraceContext traceContext) { ExternalSession.ExternalSessionBuilder builder = ExternalSession.builder() - .userId(ExtraFieldPropagation.get(traceContext, ExternalSessionSleuth.USER_ID)) - .sessionId(ExtraFieldPropagation.get(traceContext, ExternalSessionSleuth.SESSION_ID)) - .member(Boolean.parseBoolean(ExtraFieldPropagation.get(traceContext, ExternalSessionSleuth.IS_MEMBER))); + .userId(BaggageField.getByName(traceContext, ExternalSessionSleuth.USER_ID).getValue(traceContext)) + .sessionId(BaggageField.getByName(traceContext, ExternalSessionSleuth.SESSION_ID).getValue(traceContext)) + .member(Boolean.parseBoolean(BaggageField.getByName(traceContext, ExternalSessionSleuth.IS_MEMBER).getValue(traceContext))); - String additionalParameters = ExtraFieldPropagation.get(traceContext, ExternalSessionSleuth.ADDITIONAL_PARAMETERS); + String additionalParameters = BaggageField.getByName(traceContext, ExternalSessionSleuth.ADDITIONAL_PARAMETERS).getValue(traceContext); if (Objects.nonNull(additionalParameters)) { String[] split = additionalParameters.split("\n"); for (String pair : split) { @@ -45,16 +45,16 @@ public static ExternalSession fromSleuth(TraceContext traceContext) { } public static ExternalSession toSleuth(TraceContext traceContext, ExternalSession externalSession) { - ExtraFieldPropagation.set(traceContext, ExternalSessionSleuth.USER_ID, externalSession.getUserId()); - ExtraFieldPropagation.set(traceContext, ExternalSessionSleuth.SESSION_ID, externalSession.getSessionId()); - ExtraFieldPropagation.set(traceContext, ExternalSessionSleuth.IS_MEMBER, String.valueOf(externalSession.isMember())); + BaggageField.getByName(traceContext, ExternalSessionSleuth.USER_ID).updateValue(traceContext, externalSession.getUserId()); + BaggageField.getByName(traceContext, ExternalSessionSleuth.SESSION_ID).updateValue(traceContext, externalSession.getSessionId()); + BaggageField.getByName(traceContext, ExternalSessionSleuth.IS_MEMBER).updateValue(traceContext, String.valueOf(externalSession.isMember())); if (!externalSession.getAdditionalParameters().isEmpty()) { StringBuilder builder = new StringBuilder(); externalSession.getAdditionalParameters().forEach((key, value) -> { builder.append(key).append("=").append(value).append("\n"); }); - ExtraFieldPropagation.set(traceContext, ExternalSessionSleuth.ADDITIONAL_PARAMETERS, builder.toString()); + BaggageField.getByName(traceContext, ExternalSessionSleuth.ADDITIONAL_PARAMETERS).updateValue(traceContext, builder.toString()); } return externalSession; diff --git a/blibli-backend-framework-internal-api/pom.xml b/blibli-backend-framework-internal-api/pom.xml index 9867d58..d97d91f 100644 --- a/blibli-backend-framework-internal-api/pom.xml +++ b/blibli-backend-framework-internal-api/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-internal-api/src/main/java/com/blibli/oss/backend/internalapi/helper/InternalSessionHelper.java b/blibli-backend-framework-internal-api/src/main/java/com/blibli/oss/backend/internalapi/helper/InternalSessionHelper.java index 90ee76b..0c23c60 100644 --- a/blibli-backend-framework-internal-api/src/main/java/com/blibli/oss/backend/internalapi/helper/InternalSessionHelper.java +++ b/blibli-backend-framework-internal-api/src/main/java/com/blibli/oss/backend/internalapi/helper/InternalSessionHelper.java @@ -1,6 +1,6 @@ package com.blibli.oss.backend.internalapi.helper; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import brave.propagation.TraceContext; import com.blibli.oss.backend.internalapi.model.InternalSession; import com.blibli.oss.backend.internalapi.properties.InternalApiProperties; @@ -33,19 +33,19 @@ private static List getRoles(String roles) { public static InternalSession fromSleuth(TraceContext traceContext) { return InternalSession.builder() - .userId(ExtraFieldPropagation.get(traceContext, InternalSessionSleuth.USER_ID)) - .userName(ExtraFieldPropagation.get(traceContext, InternalSessionSleuth.USER_NAME)) - .roles(getRoles(ExtraFieldPropagation.get(traceContext, InternalSessionSleuth.ROLES))) + .userId(BaggageField.getByName(traceContext, InternalSessionSleuth.USER_ID).getValue(traceContext)) + .userName(BaggageField.getByName(traceContext, InternalSessionSleuth.USER_NAME).getValue(traceContext)) + .roles(getRoles(BaggageField.getByName(traceContext, InternalSessionSleuth.ROLES).getValue(traceContext))) .build(); } public static InternalSession toSleuth(TraceContext traceContext, InternalSession externalSession) { - ExtraFieldPropagation.set(traceContext, InternalSessionSleuth.USER_ID, externalSession.getUserId()); - ExtraFieldPropagation.set(traceContext, InternalSessionSleuth.USER_NAME, externalSession.getUserName()); + BaggageField.getByName(traceContext, InternalSessionSleuth.USER_ID).updateValue(traceContext, externalSession.getUserId()); + BaggageField.getByName(traceContext, InternalSessionSleuth.USER_NAME).updateValue(traceContext, externalSession.getUserName()); StringJoiner stringJoiner = new StringJoiner(","); externalSession.getRoles().forEach(stringJoiner::add); - ExtraFieldPropagation.set(traceContext, InternalSessionSleuth.ROLES, stringJoiner.toString()); + BaggageField.getByName(traceContext, InternalSessionSleuth.ROLES).updateValue(traceContext, stringJoiner.toString()); return externalSession; } diff --git a/blibli-backend-framework-json/pom.xml b/blibli-backend-framework-json/pom.xml index 11d322c..740fbb6 100644 --- a/blibli-backend-framework-json/pom.xml +++ b/blibli-backend-framework-json/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-kafka/pom.xml b/blibli-backend-framework-kafka/pom.xml index e6348e1..b711687 100644 --- a/blibli-backend-framework-kafka/pom.xml +++ b/blibli-backend-framework-kafka/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 @@ -30,6 +30,22 @@ org.apache.kafka kafka-streams + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-annotations + + + org.springframework.boot + spring-boot-starter-aop + org.springframework.kafka spring-kafka diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/KafkaAutoConfiguration.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/KafkaAutoConfiguration.java index c603231..3ce48dc 100644 --- a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/KafkaAutoConfiguration.java +++ b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/KafkaAutoConfiguration.java @@ -3,25 +3,22 @@ import com.blibli.oss.backend.kafka.interceptor.InterceptorUtil; import com.blibli.oss.backend.kafka.interceptor.log.LogKafkaConsumerInterceptor; import com.blibli.oss.backend.kafka.interceptor.log.LogKafkaProducerInterceptor; -import com.blibli.oss.backend.kafka.listener.KafkaListenerBeanProcessor; +import com.blibli.oss.backend.kafka.listener.aspectj.KafkaListenerAspect; import com.blibli.oss.backend.kafka.producer.KafkaProducer; import com.blibli.oss.backend.kafka.properties.KafkaProperties; import com.blibli.oss.backend.kafka.repository.KafkaProducerAwareBeanProcessor; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Setter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.kafka.config.KafkaListenerConfigUtils; -import org.springframework.kafka.config.KafkaListenerEndpointRegistry; import org.springframework.kafka.core.KafkaTemplate; @Configuration -@EnableConfigurationProperties({ - KafkaProperties.class -}) +@EnableConfigurationProperties({KafkaProperties.class}) public class KafkaAutoConfiguration implements ApplicationContextAware { @Setter @@ -51,15 +48,10 @@ public KafkaProducerAwareBeanProcessor kafkaProducerAwareBeanProcessor(KafkaProd return new KafkaProducerAwareBeanProcessor(kafkaProducer); } - @SuppressWarnings("rawtypes") - @Bean(KafkaListenerConfigUtils.KAFKA_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME) - public KafkaListenerBeanProcessor kafkaListenerBeanProcessor() { - return new KafkaListenerBeanProcessor(); - } - - @Bean(KafkaListenerConfigUtils.KAFKA_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME) - public KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry() { - return new KafkaListenerEndpointRegistry(); + @Bean + @ConditionalOnProperty(value = "blibli.backend.kafka.aspectj", havingValue = "true", matchIfMissing = true) + public KafkaListenerAspect kafkaListenerAspect() { + return new KafkaListenerAspect(); } } diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/interceptor/InterceptorUtil.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/interceptor/InterceptorUtil.java index c1c3e3d..7c3693a 100644 --- a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/interceptor/InterceptorUtil.java +++ b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/interceptor/InterceptorUtil.java @@ -1,14 +1,17 @@ package com.blibli.oss.backend.kafka.interceptor; import com.blibli.oss.backend.kafka.model.ProducerEvent; +import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.core.OrderComparator; +import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.List; +@Slf4j public final class InterceptorUtil { public static ProducerEvent fireBeforeSend(ProducerEvent producerEvent, List producerInterceptors) { @@ -19,24 +22,42 @@ public static ProducerEvent fireBeforeSend(ProducerEvent producerEvent, List producerEvent, List producerInterceptors) { - for (KafkaConsumerInterceptor interceptor : producerInterceptors) { - if (interceptor.beforeConsume(producerEvent)) { - return true; + public static boolean fireBeforeConsume(Object bean, Method method, List kafkaConsumerInterceptors, ConsumerRecord event) { + for (KafkaConsumerInterceptor interceptor : kafkaConsumerInterceptors) { + try { + if (interceptor.isSupport(bean, method)) { + if (interceptor.beforeConsume(event)) { + return true; + } + } + } catch (Throwable throwable) { + log.error("Error while invoke interceptor", throwable); } } return false; } - public static void fireAfterSuccessConsume(ConsumerRecord producerEvent, List producerInterceptors) { - for (KafkaConsumerInterceptor interceptor : producerInterceptors) { - interceptor.afterSuccessConsume(producerEvent); + public static void fireAfterSuccessConsume(Object bean, Method method, List kafkaConsumerInterceptors, ConsumerRecord event) { + for (KafkaConsumerInterceptor interceptor : kafkaConsumerInterceptors) { + try { + if (interceptor.isSupport(bean, method)) { + interceptor.afterSuccessConsume(event); + } + } catch (Throwable throwable) { + log.error("Error while invoke interceptor", throwable); + } } } - public static void fireAfterErrorConsume(ConsumerRecord producerEvent, Throwable throwable, List producerInterceptors) { - for (KafkaConsumerInterceptor interceptor : producerInterceptors) { - interceptor.afterFailedConsume(producerEvent, throwable); + public static void fireAfterErrorConsume(Object bean, Method method, List kafkaConsumerInterceptors, ConsumerRecord event, Throwable throwable) { + for (KafkaConsumerInterceptor interceptor : kafkaConsumerInterceptors) { + try { + if (interceptor.isSupport(bean, method)) { + interceptor.afterFailedConsume(event, throwable); + } + } catch (Throwable e) { + log.error("Error while invoke interceptor", e); + } } } diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaListenerBeanProcessor.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaListenerBeanProcessor.java deleted file mode 100644 index d47f697..0000000 --- a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaListenerBeanProcessor.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.blibli.oss.backend.kafka.listener; - -import org.springframework.aop.framework.Advised; -import org.springframework.aop.support.AopUtils; -import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.annotation.KafkaListenerAnnotationBeanPostProcessor; -import org.springframework.util.ReflectionUtils; - -import java.lang.reflect.Method; - -public class KafkaListenerBeanProcessor extends KafkaListenerAnnotationBeanPostProcessor { - - @Override - protected void processKafkaListener(KafkaListener kafkaListener, Method method, Object bean, String beanName) { - Method methodToUse = checkProxy(method, bean); - KafkaListenerEndpoint endpoint = new KafkaListenerEndpoint(); - endpoint.setMethod(methodToUse); - processListener(endpoint, kafkaListener, bean, methodToUse, beanName); - } - - private Method checkProxy(Method methodArg, Object bean) { - Method method = methodArg; - if (AopUtils.isJdkDynamicProxy(bean)) { - try { - // Found a @KafkaListener method on the target class for this JDK proxy -> - // is it also present on the proxy itself? - method = bean.getClass().getMethod(method.getName(), method.getParameterTypes()); - Class[] proxiedInterfaces = ((Advised) bean).getProxiedInterfaces(); - for (Class iface : proxiedInterfaces) { - try { - method = iface.getMethod(method.getName(), method.getParameterTypes()); - break; - } catch (@SuppressWarnings("unused") NoSuchMethodException noMethod) { - // NOSONAR - } - } - } catch (SecurityException ex) { - ReflectionUtils.handleReflectionException(ex); - } catch (NoSuchMethodException ex) { - throw new IllegalStateException(String.format( - "@KafkaListener method '%s' found on bean target class '%s', " + - "but not found in any interface(s) for bean JDK proxy. Either " + - "pull the method up to an interface or switch to subclass (CGLIB) " + - "proxies by setting proxy-target-class/proxyTargetClass " + - "attribute to 'true'", method.getName(), - method.getDeclaringClass().getSimpleName()), ex); - } - } - return method; - } -} diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaListenerEndpoint.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaListenerEndpoint.java deleted file mode 100644 index 2163785..0000000 --- a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaListenerEndpoint.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.blibli.oss.backend.kafka.listener; - -import com.blibli.oss.backend.kafka.interceptor.InterceptorUtil; -import com.blibli.oss.backend.kafka.interceptor.KafkaConsumerInterceptor; -import org.springframework.beans.factory.ListableBeanFactory; -import org.springframework.kafka.config.MethodKafkaListenerEndpoint; -import org.springframework.kafka.listener.KafkaListenerErrorHandler; -import org.springframework.kafka.listener.adapter.BatchMessagingMessageListenerAdapter; -import org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter; -import org.springframework.kafka.support.converter.BatchMessageConverter; -import org.springframework.kafka.support.converter.MessageConverter; -import org.springframework.kafka.support.converter.RecordMessageConverter; - -import java.util.Collections; -import java.util.List; - -public class KafkaListenerEndpoint extends MethodKafkaListenerEndpoint { - - private KafkaListenerErrorHandler errorHandler; - - @Override - public void setErrorHandler(KafkaListenerErrorHandler errorHandler) { - super.setErrorHandler(errorHandler); - this.errorHandler = errorHandler; - } - - @Override - protected MessagingMessageListenerAdapter createMessageListenerInstance(MessageConverter messageConverter) { - MessagingMessageListenerAdapter listener; - if (isBatchListener()) { - BatchMessagingMessageListenerAdapter messageListener = new BatchMessagingMessageListenerAdapter<>(getBean(), getMethod(), this.errorHandler); - if (messageConverter instanceof BatchMessageConverter) { - messageListener.setBatchMessageConverter((BatchMessageConverter) messageConverter); - } - listener = messageListener; - } else { - List interceptors = Collections.emptyList(); - if (getBeanFactory() instanceof ListableBeanFactory) { - ListableBeanFactory listableBeanFactory = (ListableBeanFactory) getBeanFactory(); - interceptors = InterceptorUtil.getConsumerInterceptors(listableBeanFactory); - } - KafkaMessageListener messageListener = new KafkaMessageListener(getBean(), getMethod(), this.errorHandler, interceptors); - if (messageConverter instanceof RecordMessageConverter) { - messageListener.setMessageConverter((RecordMessageConverter) messageConverter); - } - listener = messageListener; - } - if (getBeanResolver() != null) { - listener.setBeanResolver(getBeanResolver()); - } - return listener; - } -} diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaMessageListener.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaMessageListener.java deleted file mode 100644 index 8596083..0000000 --- a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/KafkaMessageListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.blibli.oss.backend.kafka.listener; - -import com.blibli.oss.backend.kafka.interceptor.InterceptorUtil; -import com.blibli.oss.backend.kafka.interceptor.KafkaConsumerInterceptor; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.springframework.kafka.listener.KafkaListenerErrorHandler; -import org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter; -import org.springframework.kafka.support.Acknowledgment; - -import java.lang.reflect.Method; -import java.util.List; -import java.util.stream.Collectors; - -public class KafkaMessageListener extends RecordMessagingMessageListenerAdapter { - - private final List interceptors; - - public KafkaMessageListener(Object bean, Method method, KafkaListenerErrorHandler errorHandler, List interceptors) { - super(bean, method, errorHandler); - this.interceptors = getSupportedKafkaConsumerInterceptors(bean, method, interceptors); - } - - private List getSupportedKafkaConsumerInterceptors(Object bean, Method method, List interceptors) { - return interceptors.stream() - .filter(interceptor -> interceptor.isSupport(bean, method)) - .collect(Collectors.toList()); - } - - @Override - public void onMessage(ConsumerRecord record, Acknowledgment acknowledgment, Consumer consumer) { - try { - boolean skip = InterceptorUtil.fireBeforeConsume(record, interceptors); - if (!skip) super.onMessage(record, acknowledgment, consumer); - InterceptorUtil.fireAfterSuccessConsume(record, interceptors); - } catch (Throwable throwable) { - InterceptorUtil.fireAfterErrorConsume(record, throwable, interceptors); - throw throwable; - } - } -} diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/aspectj/KafkaListenerAspect.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/aspectj/KafkaListenerAspect.java new file mode 100644 index 0000000..0fc6a6e --- /dev/null +++ b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/listener/aspectj/KafkaListenerAspect.java @@ -0,0 +1,100 @@ +package com.blibli.oss.backend.kafka.listener.aspectj; + +import com.blibli.oss.backend.kafka.interceptor.InterceptorUtil; +import com.blibli.oss.backend.kafka.interceptor.KafkaConsumerInterceptor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.core.OrderComparator; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +@Slf4j +@Aspect +public class KafkaListenerAspect implements ApplicationContextAware, InitializingBean { + + private List kafkaConsumerInterceptors; + + @Setter + private ApplicationContext applicationContext; + + + @Around(value = "@annotation(org.springframework.kafka.annotation.KafkaListener)") + public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + if (isConsumerRecordArgument(joinPoint) && joinPoint.getSignature() instanceof MethodSignature) { + + ConsumerRecord record = getConsumerRecord(joinPoint); + + Object bean = joinPoint.getTarget(); + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + + try { + if (InterceptorUtil.fireBeforeConsume(bean, method, kafkaConsumerInterceptors, record)) { + return null; // cancel process + } else { + Object response = joinPoint.proceed(joinPoint.getArgs()); + InterceptorUtil.fireAfterSuccessConsume(bean, method, kafkaConsumerInterceptors, record); + return response; + } + } catch (Throwable throwable) { + InterceptorUtil.fireAfterErrorConsume(bean, method, kafkaConsumerInterceptors, record, throwable); + throw throwable; + } + } else { + return joinPoint.proceed(joinPoint.getArgs()); + } + } + + private boolean isConsumerRecordArgument(ProceedingJoinPoint joinPoint) { + Object[] arguments = joinPoint.getArgs(); + if (arguments == null || arguments.length == 0) { + return false; + } + + for (Object o : joinPoint.getArgs()) { + if (o instanceof ConsumerRecord) { + return true; + } + } + + return false; + } + + @SuppressWarnings("unchecked") + private ConsumerRecord getConsumerRecord(ProceedingJoinPoint joinPoint) { + for (Object arg : joinPoint.getArgs()) { + if (arg instanceof ConsumerRecord) { + return (ConsumerRecord) arg; + } + } + return null; + } + + @Override + public void afterPropertiesSet() throws Exception { + this.kafkaConsumerInterceptors = getKafkaConsumerInterceptors(); + } + + public List getKafkaConsumerInterceptors() { + List interceptors = Collections.emptyList(); + + Map beans = applicationContext.getBeansOfType(KafkaConsumerInterceptor.class); + if (!beans.isEmpty()) { + interceptors = new ArrayList<>(beans.values()); + } + + OrderComparator.sort(interceptors); + return interceptors; + } +} diff --git a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/properties/KafkaProperties.java b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/properties/KafkaProperties.java index 32eb2d7..2f53b87 100644 --- a/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/properties/KafkaProperties.java +++ b/blibli-backend-framework-kafka/src/main/java/com/blibli/oss/backend/kafka/properties/KafkaProperties.java @@ -13,6 +13,8 @@ @ConfigurationProperties("blibli.backend.kafka") public class KafkaProperties { + private boolean aspectj = true; + private LoggingProperties logging = new LoggingProperties(); @Data diff --git a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/consumer/KafkaConsumerInterceptorTest.java b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/consumer/KafkaConsumerInterceptorTest.java index a4b9a11..64da459 100644 --- a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/consumer/KafkaConsumerInterceptorTest.java +++ b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/consumer/KafkaConsumerInterceptorTest.java @@ -8,10 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -25,13 +22,16 @@ import reactor.core.scheduler.Schedulers; import java.lang.reflect.Method; +import java.util.Collections; @ExtendWith(SpringExtension.class) @SpringBootTest(classes = KafkaConsumerInterceptorTest.Application.class) @EmbeddedKafka( + partitions = 1, topics = {KafkaConsumerInterceptorTest.TOPIC, KafkaConsumerInterceptorTest.TOPIC_GOODBYE} ) @DirtiesContext +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) class KafkaConsumerInterceptorTest { public static final String TOPIC = "KafkaConsumerInterceptorTest"; @@ -58,7 +58,7 @@ class KafkaConsumerInterceptorTest { @BeforeEach void setUp() { consumer = KafkaHelper.newConsumer(broker); - broker.consumeFromEmbeddedTopics(consumer, TOPIC); + consumer.subscribe(Collections.singletonList(TOPIC)); helloInterceptor.reset(); counterInterceptor.reset(); @@ -70,14 +70,15 @@ void tearDown() { } @Test + @Order(4) void testListener() throws InterruptedException { - kafkaProducer.sendAndSubscribe(TOPIC, "key", "value", Schedulers.elastic()); + kafkaProducer.sendAndSubscribe(TOPIC, "key", "value", Schedulers.boundedElastic()); Thread.sleep(2_000L); // wait 5 seconds until message received by listener - Assertions.assertEquals(helloListener.key, "key"); - Assertions.assertEquals(helloListener.value, "value"); + Assertions.assertEquals(helloListener.getKey(), "key"); + Assertions.assertEquals(helloListener.getValue(), "value"); - kafkaProducer.sendAndSubscribe(TOPIC, "key", "value", Schedulers.elastic()); + kafkaProducer.sendAndSubscribe(TOPIC, "key", "value", Schedulers.boundedElastic()); Thread.sleep(2_000L); // wait 5 seconds until message received by listener Assertions.assertEquals(helloInterceptor.beforeConsume, "value"); @@ -87,8 +88,19 @@ void testListener() throws InterruptedException { } @Test + @Order(3) + void testListenerWithInterceptor() throws InterruptedException { + kafkaProducer.sendAndSubscribe(TOPIC_GOODBYE, "key", "value", Schedulers.boundedElastic()); + Thread.sleep(4_000L); // wait 5 seconds until message received by listener + + Assertions.assertEquals(1, counterInterceptor.getBeforeConsume()); + Assertions.assertEquals(1, counterInterceptor.getAfterSuccessConsume()); + } + + @Test + @Order(2) void testInterceptorError() throws InterruptedException { - kafkaProducer.sendAndSubscribe(TOPIC, "error", "value", Schedulers.elastic()); + kafkaProducer.sendAndSubscribe(TOPIC, "error", "value", Schedulers.boundedElastic()); Thread.sleep(2_000L); // wait 5 seconds until message received by listener Assertions.assertEquals(helloInterceptor.beforeConsume, "value"); @@ -98,8 +110,9 @@ void testInterceptorError() throws InterruptedException { } @Test + @Order(1) void testInterceptorSkip() throws InterruptedException { - kafkaProducer.sendAndSubscribe(TOPIC, "skip", "value", Schedulers.elastic()); + kafkaProducer.sendAndSubscribe(TOPIC, "skip", "value", Schedulers.boundedElastic()); Thread.sleep(2_000L); // wait 5 seconds until message received by listener Assertions.assertNotEquals(helloListener.value, "skip"); @@ -107,15 +120,6 @@ void testInterceptorSkip() throws InterruptedException { Assertions.assertEquals(0, counterInterceptor.getAfterSuccessConsume()); } - @Test - void testInterceptorIsSupported() throws InterruptedException { - kafkaProducer.sendAndSubscribe(TOPIC_GOODBYE, "key", "value", Schedulers.elastic()); - Thread.sleep(4_000L); // wait 5 seconds until message received by listener - - Assertions.assertEquals(1, counterInterceptor.getBeforeConsume()); - Assertions.assertEquals(1, counterInterceptor.getAfterSuccessConsume()); - } - @SpringBootApplication public static class Application { diff --git a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/producer/KafkaProducerInterceptorTest.java b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/producer/KafkaProducerInterceptorTest.java index 8b8ca51..e0aac31 100644 --- a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/producer/KafkaProducerInterceptorTest.java +++ b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/interceptor/producer/KafkaProducerInterceptorTest.java @@ -26,6 +26,8 @@ import reactor.core.scheduler.Schedulers; import reactor.test.StepVerifier; +import java.util.Collections; + import static org.junit.jupiter.api.Assertions.*; @ExtendWith(SpringExtension.class) @@ -52,7 +54,7 @@ class KafkaProducerInterceptorTest { @BeforeEach void setUp() { consumer = KafkaHelper.newConsumer(broker); - broker.consumeFromEmbeddedTopics(consumer, TOPIC); + consumer.subscribe(Collections.singletonList(TOPIC)); } @AfterEach @@ -63,7 +65,7 @@ void tearDown() { @Test void testInterceptor() { errorFlag.setError(false); - kafkaProducer.sendAndSubscribe(TOPIC, "key", "value", Schedulers.elastic()); + kafkaProducer.sendAndSubscribe(TOPIC, "key", "value", Schedulers.boundedElastic()); ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, TOPIC); diff --git a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/producer/KafkaProducerTest.java b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/producer/KafkaProducerTest.java index fe7f903..0bf5e1f 100644 --- a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/producer/KafkaProducerTest.java +++ b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/producer/KafkaProducerTest.java @@ -20,6 +20,9 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import reactor.core.scheduler.Schedulers; +import java.util.Arrays; +import java.util.Collections; + @ExtendWith(SpringExtension.class) @SpringBootTest(classes = KafkaProducerTest.Application.class) @EmbeddedKafka( @@ -29,7 +32,7 @@ @DirtiesContext class KafkaProducerTest { - public static final String SAMPLE_TOPIC = "SAMPLE_TOPIC"; + public static final String SAMPLE_TOPIC = "HELLO"; @Autowired private KafkaProducer kafkaProducer; @@ -42,7 +45,7 @@ class KafkaProducerTest { @BeforeEach void setUp() { consumer = KafkaHelper.newConsumer(broker); - broker.consumeFromEmbeddedTopics(consumer, SAMPLE_TOPIC); + consumer.subscribe(Collections.singletonList(SAMPLE_TOPIC)); } @AfterEach @@ -52,45 +55,45 @@ void tearDown() { @Test void testSendSuccess() { - kafkaProducer.send(SAMPLE_TOPIC, "key", "kafka value").subscribe(); - ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC); + kafkaProducer.send(SAMPLE_TOPIC, "key 1", "kafka value 1").subscribe(); + ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC, 5000L); - Assertions.assertEquals(record.key(), "key"); - Assertions.assertEquals(record.value(), "kafka value"); + Assertions.assertEquals(record.key(), "key 1"); + Assertions.assertEquals(record.value(), "kafka value 1"); } @Test void testSendLazy() { Assertions.assertThrows(IllegalStateException.class, () -> { - kafkaProducer.send(SAMPLE_TOPIC, "key", "kafka value"); // not subscribe it + kafkaProducer.send(SAMPLE_TOPIC, "key 2", "kafka value 2"); // not subscribe it ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC, 5_000L); }); } @Test void testSendOn() { - kafkaProducer.sendOn(SAMPLE_TOPIC, "key", "kafka value", Schedulers.elastic()).subscribe(); - ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC); + kafkaProducer.sendOn(SAMPLE_TOPIC, "key 3", "kafka value 3", Schedulers.boundedElastic()).subscribe(); + ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC, 5000L); - Assertions.assertEquals(record.key(), "key"); - Assertions.assertEquals(record.value(), "kafka value"); + Assertions.assertEquals(record.key(), "key 3"); + Assertions.assertEquals(record.value(), "kafka value 3"); } @Test void testSendOnLazy() { Assertions.assertThrows(IllegalStateException.class, () -> { - kafkaProducer.sendOn(SAMPLE_TOPIC, "key", "kafka value", Schedulers.elastic()); // not subscribe it + kafkaProducer.sendOn(SAMPLE_TOPIC, "key 4", "kafka value 4", Schedulers.boundedElastic()); // not subscribe it ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC, 5_000L); }); } @Test void testSendAndSubscribe() { - kafkaProducer.sendAndSubscribe(SAMPLE_TOPIC, "key", "kafka value", Schedulers.elastic()); - ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC); + kafkaProducer.sendAndSubscribe(SAMPLE_TOPIC, "key 5", "kafka value 5", Schedulers.boundedElastic()); + ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, SAMPLE_TOPIC, 5000L); - Assertions.assertEquals(record.key(), "key"); - Assertions.assertEquals(record.value(), "kafka value"); + Assertions.assertEquals(record.key(), "key 5"); + Assertions.assertEquals(record.value(), "kafka value 5"); } @SpringBootApplication diff --git a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/repository/KafkaRepositoryTest.java b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/repository/KafkaRepositoryTest.java index dd85ef9..fc60bf3 100644 --- a/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/repository/KafkaRepositoryTest.java +++ b/blibli-backend-framework-kafka/src/test/java/com/blibli/oss/backend/kafka/repository/KafkaRepositoryTest.java @@ -27,6 +27,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import reactor.core.scheduler.Schedulers; +import java.util.Collections; + @ExtendWith(SpringExtension.class) @SpringBootTest(classes = KafkaRepositoryTest.Application.class) @EmbeddedKafka( @@ -54,7 +56,7 @@ public class KafkaRepositoryTest { @BeforeEach void setUp() { consumer = KafkaHelper.newConsumer(broker); - broker.consumeFromEmbeddedTopics(consumer, TOPIC); + consumer.subscribe(Collections.singletonList(TOPIC)); } @AfterEach @@ -64,7 +66,7 @@ void tearDown() { @Test void testProductSuccess() throws JsonProcessingException { - productKafkaRepository.sendAndSubscribe(Product.builder().id("id").name("name").build(), Schedulers.elastic()); + productKafkaRepository.sendAndSubscribe(Product.builder().id("id").name("name").build(), Schedulers.boundedElastic()); ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, TOPIC); Assertions.assertEquals(record.key(), "id"); @@ -72,7 +74,7 @@ void testProductSuccess() throws JsonProcessingException { Assertions.assertEquals(product.getId(), "id"); Assertions.assertEquals(product.getName(), "name"); - productKafkaRepository.sendAndSubscribe(Product.builder().id("id").name("name").build(), Schedulers.elastic()); + productKafkaRepository.sendAndSubscribe(Product.builder().id("id").name("name").build(), Schedulers.boundedElastic()); record = KafkaTestUtils.getSingleRecord(consumer, TOPIC); Assertions.assertEquals(record.key(), "id"); @@ -83,7 +85,7 @@ record = KafkaTestUtils.getSingleRecord(consumer, TOPIC); @Test void testCustomerSuccess() throws JsonProcessingException { - customerKafkaRepository.sendAndSubscribe(Customer.builder().id("id").name("name").build(), Schedulers.elastic()); + customerKafkaRepository.sendAndSubscribe(Customer.builder().id("id").name("name").build(), Schedulers.boundedElastic()); ConsumerRecord record = KafkaTestUtils.getSingleRecord(consumer, TOPIC); Assertions.assertEquals(record.key(), "id"); diff --git a/blibli-backend-framework-kafka/src/test/resources/application.properties b/blibli-backend-framework-kafka/src/test/resources/application.properties index acfa050..6646704 100644 --- a/blibli-backend-framework-kafka/src/test/resources/application.properties +++ b/blibli-backend-framework-kafka/src/test/resources/application.properties @@ -1,6 +1,9 @@ spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers} spring.kafka.consumer.group-id=test +blibli.backend.kafka.aspectj=true blibli.backend.kafka.logging.before-send=true blibli.backend.kafka.logging.before-consume=true blibli.backend.kafka.logging.after-success-consume=true -blibli.backend.kafka.logging.after-failed-consume=true \ No newline at end of file +blibli.backend.kafka.logging.after-failed-consume=true + +logging.level.org.springframework.kafka.test=debug \ No newline at end of file diff --git a/blibli-backend-framework-mandatory-parameter/pom.xml b/blibli-backend-framework-mandatory-parameter/pom.xml index e60f2cf..55b55a4 100644 --- a/blibli-backend-framework-mandatory-parameter/pom.xml +++ b/blibli-backend-framework-mandatory-parameter/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/MandatoryParameterHelper.java b/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/MandatoryParameterHelper.java index c0a2564..98ff732 100644 --- a/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/MandatoryParameterHelper.java +++ b/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/MandatoryParameterHelper.java @@ -1,6 +1,6 @@ package com.blibli.oss.backend.mandatoryparameter.helper; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import brave.propagation.TraceContext; import com.blibli.oss.backend.mandatoryparameter.model.MandatoryParameter; import com.blibli.oss.backend.mandatoryparameter.sleuth.MandatoryParameterSleuth; @@ -18,11 +18,11 @@ public static MandatoryParameter toSleuth(TraceContext traceContext, MandatoryPa public static MandatoryParameter fromSleuth(TraceContext traceContext) { return MandatoryParameter.builder() - .storeId(ExtraFieldPropagation.get(traceContext, MandatoryParameterSleuth.STORE_ID)) - .clientId(ExtraFieldPropagation.get(traceContext, MandatoryParameterSleuth.CLIENT_ID)) - .channelId(ExtraFieldPropagation.get(traceContext, MandatoryParameterSleuth.CHANNEL_ID)) - .requestId(ExtraFieldPropagation.get(traceContext, MandatoryParameterSleuth.REQUEST_ID)) - .username(ExtraFieldPropagation.get(traceContext, MandatoryParameterSleuth.USERNAME)) + .storeId(BaggageField.getByName(traceContext, MandatoryParameterSleuth.STORE_ID).getValue(traceContext)) + .clientId(BaggageField.getByName(traceContext, MandatoryParameterSleuth.CLIENT_ID).getValue(traceContext)) + .channelId(BaggageField.getByName(traceContext, MandatoryParameterSleuth.CHANNEL_ID).getValue(traceContext)) + .requestId(BaggageField.getByName(traceContext, MandatoryParameterSleuth.REQUEST_ID).getValue(traceContext)) + .username(BaggageField.getByName(traceContext, MandatoryParameterSleuth.USERNAME).getValue(traceContext)) .build(); } diff --git a/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/SleuthHelper.java b/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/SleuthHelper.java index 7a9c9a1..4509fba 100644 --- a/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/SleuthHelper.java +++ b/blibli-backend-framework-mandatory-parameter/src/main/java/com/blibli/oss/backend/mandatoryparameter/helper/SleuthHelper.java @@ -1,14 +1,14 @@ package com.blibli.oss.backend.mandatoryparameter.helper; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import brave.propagation.TraceContext; import org.springframework.util.StringUtils; public class SleuthHelper { public static void putExtraField(TraceContext traceContext, String name, String value) { - if (!StringUtils.isEmpty(value)) { - ExtraFieldPropagation.set(traceContext, name, value); + if (StringUtils.hasText(value)) { + BaggageField.getByName(traceContext, name).updateValue(traceContext, value); } } diff --git a/blibli-backend-framework-newrelic/pom.xml b/blibli-backend-framework-newrelic/pom.xml index e18915d..237d1e5 100644 --- a/blibli-backend-framework-newrelic/pom.xml +++ b/blibli-backend-framework-newrelic/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/aspect/ReactiveMongoRepositoryAspectTest.java b/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/aspect/ReactiveMongoRepositoryAspectTest.java index 9eb55b7..8ce5215 100644 --- a/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/aspect/ReactiveMongoRepositoryAspectTest.java +++ b/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/aspect/ReactiveMongoRepositoryAspectTest.java @@ -24,11 +24,14 @@ import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.repository.ReactiveMongoRepository; +import org.springframework.data.repository.query.FluentQuery; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import reactor.util.context.Context; +import java.util.function.Function; + import static com.blibli.oss.backend.newrelic.injector.NewRelicTokenInjectorFilter.TOKEN_CONTEXT_KEY; import static com.blibli.oss.backend.newrelic.injector.NewRelicTokenInjectorFilter.TRANSACTION_CONTEXT_KEY; import static org.mockito.ArgumentMatchers.argThat; @@ -218,6 +221,11 @@ public Mono exists(Example example) { throw new RuntimeException("NOT IMPLEMENTED"); } + @Override + public > P findBy(Example example, Function, P> queryFunction) { + return null; + } + @Override public Flux findAll(Sort sort) { throw new RuntimeException("NOT IMPLEMENTED"); @@ -293,6 +301,11 @@ public Mono delete(DummyData entity) { throw new RuntimeException("NOT IMPLEMENTED"); } + @Override + public Mono deleteAllById(Iterable strings) { + return null; + } + @Override public Mono deleteAll(Iterable entities) { throw new RuntimeException("NOT IMPLEMENTED"); diff --git a/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/injector/NewRelicTokenInjectorFilterTest.java b/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/injector/NewRelicTokenInjectorFilterTest.java index 51854c1..61187d8 100644 --- a/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/injector/NewRelicTokenInjectorFilterTest.java +++ b/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/injector/NewRelicTokenInjectorFilterTest.java @@ -17,8 +17,8 @@ import java.util.Optional; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; diff --git a/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/integration/NewRelicIntegrationTest.java b/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/integration/NewRelicIntegrationTest.java index 62224db..2c38c41 100644 --- a/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/integration/NewRelicIntegrationTest.java +++ b/blibli-backend-framework-newrelic/src/test/java/com/blibli/oss/backend/newrelic/integration/NewRelicIntegrationTest.java @@ -6,8 +6,8 @@ import com.newrelic.api.agent.Token; import com.newrelic.api.agent.TracedMethod; import com.newrelic.api.agent.Transaction; -import org.junit.Assert; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -94,7 +94,7 @@ public void testFilter() { .jsonPath("$.data") .isEqualTo("I say Hello World to NAMA"); - Assert.assertEquals("Command HelloWorldCommandImpl.HelloWorldCommandImpl.execute(..)", segmentNameCaptor.getValue()); + Assertions.assertEquals("Command HelloWorldCommandImpl.HelloWorldCommandImpl.execute(..)", segmentNameCaptor.getValue()); verify(newRelicAgent).getTransaction(); verify(transaction).startSegment(segmentNameCaptor.capture()); diff --git a/blibli-backend-framework-reactor/pom.xml b/blibli-backend-framework-reactor/pom.xml index 718c8a0..371d5fa 100644 --- a/blibli-backend-framework-reactor/pom.xml +++ b/blibli-backend-framework-reactor/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-scheduler-platform/pom.xml b/blibli-backend-framework-scheduler-platform/pom.xml index 8e13b5e..a7d613b 100644 --- a/blibli-backend-framework-scheduler-platform/pom.xml +++ b/blibli-backend-framework-scheduler-platform/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-sleuth/README.md b/blibli-backend-framework-sleuth/README.md index 13c48d0..93d48f8 100644 --- a/blibli-backend-framework-sleuth/README.md +++ b/blibli-backend-framework-sleuth/README.md @@ -46,16 +46,16 @@ Sleuth module will automatically register all fields, so we can set and get extr private Tracer tracer; // set extra field -ExtraFieldPropagation.set(span.context(), "Hello", "Value"); -ExtraFieldPropagation.set(span.context(), "World", "Value"); -ExtraFieldPropagation.set(span.context(), "ClientId", "Value"); -ExtraFieldPropagation.set(span.context(), "StoreId", "Value"); +BaggageField.getByName(span.context(), "Hello").updateValue(span.context(), "Value"); +BaggageField.getByName(span.context(), "World").updateValue(span.context(), "Value"); +BaggageField.getByName(span.context(), "ClientId").updateValue(span.context(), "Value"); +BaggageField.getByName(span.context(), "StoreId").updateValue(span.context(), "Value"); // get extra field -String hello = ExtraFieldPropagation.get(span.context(), "Hello"); -String world = ExtraFieldPropagation.get(span.context(), "World"); -String clientId = ExtraFieldPropagation.get(span.context(), "ClientId"); -String storeId = ExtraFieldPropagation.get(span.context(), "StoreId"); +String hello = BaggageField.getByName(span.context(), "Hello").getValue(span.context()); +String world = BaggageField.getByName(span.context(), "World").getValue(span.context()); +String clientId = BaggageField.getByName(span.context(), "ClientId").getValue(span.context()); +String storeId = BaggageField.getByName(span.context(), "StoreId").getValue(span.context()); ``` @@ -75,7 +75,7 @@ public class ExampleSleuthWebFilter implements SleuthWebFilter { @Override public Mono filter(ServerWebExchange exchange, WebFilterChain chain, Span currentSpan) { // do something with currentSpan - ExtraFieldPropagation.set(currentSpan.context(), "Key", "Value"); + BaggageField.getByName(currentSpan.context(), "Key").updateValue(currentSpan.context(), "Value"); return chain.filter(exchange); } diff --git a/blibli-backend-framework-sleuth/pom.xml b/blibli-backend-framework-sleuth/pom.xml index 5fc9f2a..a31b04d 100644 --- a/blibli-backend-framework-sleuth/pom.xml +++ b/blibli-backend-framework-sleuth/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/configuration/SleuthConfiguration.java b/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/configuration/SleuthConfiguration.java index 720efab..535e699 100644 --- a/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/configuration/SleuthConfiguration.java +++ b/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/configuration/SleuthConfiguration.java @@ -1,17 +1,12 @@ package com.blibli.oss.backend.sleuth.configuration; -import brave.propagation.B3Propagation; -import brave.propagation.ExtraFieldCustomizer; -import brave.propagation.ExtraFieldPropagation; -import brave.propagation.Propagation; -import com.blibli.oss.backend.sleuth.fields.SleuthExtraFieldConfiguration; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.sleuth.autoconfig.SleuthProperties; +import com.blibli.oss.backend.sleuth.fields.SleuthExtraFieldCustomizer; +import com.blibli.oss.backend.sleuth.fields.SleuthExtraFields; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.ArrayList; -import java.util.List; +import java.util.stream.Collectors; @Configuration public class SleuthConfiguration { @@ -19,66 +14,9 @@ public class SleuthConfiguration { public static final String HTTP_BAGGAGE_PREFIX = "baggage-"; public static final String MESSAGING_BAGGAGE_PREFIX = "baggage_"; - @Autowired(required = false) - private ExtraFieldPropagation.FactoryBuilder extraFieldPropagationFactoryBuilder; - - @Autowired(required = false) - private List extraFieldCustomizers = new ArrayList<>(); - - /** - * This bean is copied from TraceAutoConfiguration class, - * with some modification to support extra fields that can integrated for http and messaging - * - * @param extraFieldConfiguration extra field configuration - * @param sleuthProperties sleuth properties - * @return new bean - * @see org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration - * @see org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration#sleuthPropagation(SleuthProperties) - */ - @Bean - public Propagation.Factory sleuthPropagation(SleuthExtraFieldConfiguration extraFieldConfiguration, SleuthProperties sleuthProperties) { - // modification to merge baggage from properties and from bean - List baggageKeys = extraFieldConfiguration.getExtraFields(sleuthProperties.getBaggageKeys()); - if (baggageKeys.isEmpty() - && sleuthProperties.getPropagationKeys().isEmpty() - && extraFieldCustomizers.isEmpty() - && this.extraFieldPropagationFactoryBuilder == null - && sleuthProperties.getLocalKeys().isEmpty()) { - return B3Propagation.FACTORY; - } - ExtraFieldPropagation.FactoryBuilder factoryBuilder; - if (this.extraFieldPropagationFactoryBuilder != null) { - factoryBuilder = this.extraFieldPropagationFactoryBuilder; - } else { - factoryBuilder = ExtraFieldPropagation - .newFactoryBuilder(B3Propagation.FACTORY); - } - if (!baggageKeys.isEmpty()) { - factoryBuilder - // for HTTP - .addPrefixedFields(HTTP_BAGGAGE_PREFIX, baggageKeys) - // for messaging - .addPrefixedFields(MESSAGING_BAGGAGE_PREFIX, baggageKeys); - } - if (!sleuthProperties.getPropagationKeys().isEmpty()) { - for (String key : sleuthProperties.getPropagationKeys()) { - factoryBuilder.addField(key); - } - } - if (!sleuthProperties.getLocalKeys().isEmpty()) { - for (String key : sleuthProperties.getLocalKeys()) { - factoryBuilder.addRedactedField(key); - } - } - for (ExtraFieldCustomizer customizer : this.extraFieldCustomizers) { - customizer.customize(factoryBuilder); - } - return factoryBuilder.build(); - } - @Bean - public SleuthExtraFieldConfiguration sleuthExtraFieldConfiguration() { - return new SleuthExtraFieldConfiguration(); + public SleuthExtraFieldCustomizer sleuthExtraFieldCustomizer(ObjectProvider sleuthExtraFields) { + return new SleuthExtraFieldCustomizer(sleuthExtraFields.stream().collect(Collectors.toList())); } } diff --git a/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/fields/SleuthExtraFieldConfiguration.java b/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/fields/SleuthExtraFieldConfiguration.java deleted file mode 100644 index 9e6c27d..0000000 --- a/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/fields/SleuthExtraFieldConfiguration.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.blibli.oss.backend.sleuth.fields; - -import lombok.Setter; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -public class SleuthExtraFieldConfiguration implements ApplicationContextAware, InitializingBean { - - @Setter - private ApplicationContext applicationContext; - - private Collection extraFields; - - @Override - public void afterPropertiesSet() throws Exception { - extraFields = applicationContext.getBeansOfType(SleuthExtraFields.class).values(); - } - - public List getExtraFields(List otherFields) { - List fields = new ArrayList<>(); - extraFields.forEach(sleuthExtraFields -> fields.addAll(sleuthExtraFields.getFields())); - fields.addAll(otherFields); - return fields; - } -} diff --git a/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/fields/SleuthExtraFieldCustomizer.java b/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/fields/SleuthExtraFieldCustomizer.java new file mode 100644 index 0000000..c4ce22f --- /dev/null +++ b/blibli-backend-framework-sleuth/src/main/java/com/blibli/oss/backend/sleuth/fields/SleuthExtraFieldCustomizer.java @@ -0,0 +1,28 @@ +package com.blibli.oss.backend.sleuth.fields; + +import brave.baggage.BaggageField; +import brave.baggage.BaggagePropagation; +import brave.baggage.BaggagePropagationConfig; +import brave.baggage.BaggagePropagationCustomizer; +import com.blibli.oss.backend.sleuth.configuration.SleuthConfiguration; +import lombok.AllArgsConstructor; + +import java.util.List; + +@AllArgsConstructor +public class SleuthExtraFieldCustomizer implements BaggagePropagationCustomizer { + + private List sleuthExtraFields; + + @Override + public void customize(BaggagePropagation.FactoryBuilder factoryBuilder) { + sleuthExtraFields.forEach(fields -> { + fields.getFields().forEach(field -> { + factoryBuilder.add(BaggagePropagationConfig.SingleBaggageField.newBuilder(BaggageField.create(field)) + .addKeyName(SleuthConfiguration.HTTP_BAGGAGE_PREFIX + field) + .addKeyName(SleuthConfiguration.MESSAGING_BAGGAGE_PREFIX + field) + .build()); + }); + }); + } +} diff --git a/blibli-backend-framework-sleuth/src/test/java/com/blibli/oss/backend/sleuth/SleuthTest.java b/blibli-backend-framework-sleuth/src/test/java/com/blibli/oss/backend/sleuth/SleuthTest.java index 1f1fedb..9de71ad 100644 --- a/blibli-backend-framework-sleuth/src/test/java/com/blibli/oss/backend/sleuth/SleuthTest.java +++ b/blibli-backend-framework-sleuth/src/test/java/com/blibli/oss/backend/sleuth/SleuthTest.java @@ -2,7 +2,7 @@ import brave.Span; import brave.Tracer; -import brave.propagation.ExtraFieldPropagation; +import brave.baggage.BaggageField; import com.blibli.oss.backend.sleuth.fields.SleuthExtraFields; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -28,26 +28,23 @@ public class SleuthTest { void testExists() { Span span = tracer.newTrace(); - ExtraFieldPropagation.set(span.context(), "Eko", "Value"); - ExtraFieldPropagation.set(span.context(), "Kurniawan", "Value"); - ExtraFieldPropagation.set(span.context(), "Khannedy", "Value"); - ExtraFieldPropagation.set(span.context(), "Hello", "Value"); - ExtraFieldPropagation.set(span.context(), "World", "Value"); - - assertEquals("Value", ExtraFieldPropagation.get(span.context(), "Eko")); - assertEquals("Value", ExtraFieldPropagation.get(span.context(), "Kurniawan")); - assertEquals("Value", ExtraFieldPropagation.get(span.context(), "Khannedy")); - assertEquals("Value", ExtraFieldPropagation.get(span.context(), "Hello")); - assertEquals("Value", ExtraFieldPropagation.get(span.context(), "World")); + BaggageField.getByName(span.context(), "Eko").updateValue(span.context(), "Value"); + BaggageField.getByName(span.context(), "Kurniawan").updateValue(span.context(), "Value"); + BaggageField.getByName(span.context(), "Khannedy").updateValue(span.context(), "Value"); + BaggageField.getByName(span.context(), "Hello").updateValue(span.context(), "Value"); + BaggageField.getByName(span.context(), "World").updateValue(span.context(), "Value"); + + assertEquals("Value", BaggageField.getByName(span.context(), "Eko").getValue(span.context())); + assertEquals("Value", BaggageField.getByName(span.context(), "Kurniawan").getValue(span.context())); + assertEquals("Value", BaggageField.getByName(span.context(), "Khannedy").getValue(span.context())); + assertEquals("Value", BaggageField.getByName(span.context(), "Hello").getValue(span.context())); + assertEquals("Value", BaggageField.getByName(span.context(), "World").getValue(span.context())); } @Test void testNotExists() { Span span = tracer.newTrace(); - - ExtraFieldPropagation.set(span.context(), "NotExists", "Value"); - - assertNull(ExtraFieldPropagation.get(span.context(), "NotExists")); + assertNull(BaggageField.getByName(span.context(), "NotExists")); } @SpringBootApplication diff --git a/blibli-backend-framework-sleuth/src/test/resources/application.properties b/blibli-backend-framework-sleuth/src/test/resources/application.properties index 8943478..5ac887b 100644 --- a/blibli-backend-framework-sleuth/src/test/resources/application.properties +++ b/blibli-backend-framework-sleuth/src/test/resources/application.properties @@ -1,3 +1,6 @@ -spring.sleuth.baggage-keys[0]=Eko -spring.sleuth.baggage-keys[1]=Kurniawan -spring.sleuth.baggage-keys[2]=Khannedy \ No newline at end of file +spring.sleuth.baggage.remote-fields[0]=Eko +spring.sleuth.baggage.remote-fields[1]=Kurniawan +spring.sleuth.baggage.remote-fields[2]=Khannedy +spring.sleuth.baggage.local-fields[0]=Eko +spring.sleuth.baggage.local-fields[1]=Kurniawan +spring.sleuth.baggage.local-fields[2]=Khannedy \ No newline at end of file diff --git a/blibli-backend-framework-swagger/pom.xml b/blibli-backend-framework-swagger/pom.xml index c3651bc..805cb42 100644 --- a/blibli-backend-framework-swagger/pom.xml +++ b/blibli-backend-framework-swagger/pom.xml @@ -5,11 +5,23 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 blibli-backend-framework-swagger + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + diff --git a/blibli-backend-framework-validation/pom.xml b/blibli-backend-framework-validation/pom.xml index 4401218..86e4530 100644 --- a/blibli-backend-framework-validation/pom.xml +++ b/blibli-backend-framework-validation/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/blibli-backend-framework-version/pom.xml b/blibli-backend-framework-version/pom.xml index 97d96c7..41cf9ea 100644 --- a/blibli-backend-framework-version/pom.xml +++ b/blibli-backend-framework-version/pom.xml @@ -5,7 +5,7 @@ blibli-backend-framework com.blibli.oss - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 50744af..b93a49b 100644 --- a/pom.xml +++ b/pom.xml @@ -23,9 +23,9 @@ - scm:git:git@github.com:bliblidotcom/blibli-backend-framework.git - scm:git:git@github.com:bliblidotcom/blibli-backend-framework.git - https://github.com/bliblidotcom/blibli-backend-framework + scm:git:ssh://git@stash.gdn-app.com:7999/springbootplugin/blibli-backend-framework.git + scm:git:ssh://git@stash.gdn-app.com:7999/springbootplugin/blibli-backend-framework.git + HEAD @@ -47,20 +47,20 @@ org.springframework.boot spring-boot-starter-parent - 2.3.0.RELEASE + 2.7.0 com.blibli.oss blibli-backend-framework - 0.0.9-SNAPSHOT + 2.7.0-SNAPSHOT blibli-backend-framework Blibli.com Backend Framework 1.8 - Hoxton.SR4 + 2021.0.3 1.2.26 ${project.version} 0.6 @@ -210,49 +210,62 @@ - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - ossrh - https://s01.oss.sonatype.org/ - false - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + libs-releases-local.artifactory.gdn-app.com + libs-releases-local.artifactory.gdn-app.com + https://artifactory.gdn-app.com/artifactory/libs-releases-local + + libs-snapshots-local.artifactory.gdn-app.com + libs-snapshots-local.artifactory.gdn-app.com + https://artifactory.gdn-app.com/artifactory/libs-snapshots-local + + + + + + + + + + + +