All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.enadim.spring.cloud.ribbon.support.EnableContextPropagation Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
/*
 * Copyright (c) 2017 the original author or authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.enadim.spring.cloud.ribbon.support;


import com.github.enadim.spring.cloud.ribbon.context.ExecutionContext;
import com.github.enadim.spring.cloud.ribbon.context.ExecutionContextHolder;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesExecutionContextExecutorStrategy;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesExecutionContextHystrixStrategy;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesHeadersInboundHttpRequestStrategy;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesHttpHeadersFeignStrategy;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesHttpHeadersZuulStrategy;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesJmsMessagePropertiesStrategy;
import com.github.enadim.spring.cloud.ribbon.support.strategy.PreservesStompHeadersStrategy;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Import;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.ExecutorService;

/**
 * Enables {@link ExecutionContext} attributes propagation.
 * 

Use it carefully due to {@link ExecutionContextHolder} usage of the {@link InheritableThreadLocal}: * This strategy will not cover all the use cases and you may encounter unexpected behaviours (Use it at your own risk): *

    *
  • Verify that {@link ExecutorService} are declared as beans and not hidden by some implementation. *
  • Verify that {@link org.springframework.jms.core.JmsTemplate} are declared as beans and not hidden by some implementation. *
  • Verify that {@link org.springframework.messaging.simp.stomp.StompSession} are declared as beans and not hidden by some implementation. * If you meet those requirements (and every dependency on your project) it will work perfectly. *
*

To be used at spring boot configuration level. For example: *

 * @EnableContextPropagation
 * @SpringBootApplication
 * public class Application{
 *  ...
 * }
 * 
* * @author Nadim Benabdenbi */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @EnableConfigurationProperties({PropagationProperties.class, EurekaInstanceProperties.class}) @Import(ExecutionContextPropagationImport.class) public @interface EnableContextPropagation { /** * default value is {@code true}. * * @return {@code true} when servlet propagation should be enabled otherwise {@code false}. */ boolean inboundHttpRequest() default true; /** * default is {@link PreservesHeadersInboundHttpRequestStrategy} * * @return the servlet propagation strategy. */ Class inboundHttpRequestStrategy() default PreservesHeadersInboundHttpRequestStrategy.class; /** * default value is {@code true}. * * @return {@code true} when feign propagation should be enabled otherwise {@code false}. */ boolean feign() default true; /** * default is {@link PreservesHttpHeadersFeignStrategy} * * @return the feign propagation strategy. */ Class feignStrategy() default PreservesHttpHeadersFeignStrategy.class; /** * default value is {@code true}. * * @return {@code true} when executor propagation should be enabled otherwise {@code false}. */ boolean executor() default true; /** * default is {@link PreservesExecutionContextExecutorStrategy}. * * @return the executors propagation strategy. */ Class executorStrategy() default PreservesExecutionContextExecutorStrategy.class; /** * default value is {@code true}. * * @return {@code true} when zuul propagation should be enabled otherwise {@code false}. */ boolean zuul() default true; /** * default is {@link PreservesHttpHeadersZuulStrategy} * * @return the zuul propagation strategy. */ Class zuulStrategy() default PreservesHttpHeadersZuulStrategy.class; /** * default value is {@code true}. * * @return {@code true} when Hystrix propagation should be enabled otherwise {@code false}. */ boolean hystrix() default true; /** * default strategy is {@link PreservesExecutionContextHystrixStrategy} * * @return the hystrix propagation strategy. */ Class hystrixStrategy() default PreservesExecutionContextHystrixStrategy.class; /** * default value is {@code true}. * * @return {@code true} when jms propagation should be enabled otherwise {@code false}. */ boolean jms() default true; /** * default strategy is {@link PreservesJmsMessagePropertiesStrategy}. * * @return the jms propagation strategy. */ Class jmsStrategy() default PreservesJmsMessagePropertiesStrategy.class; /** * default value is {@code true}. * * @return {@code true} when stomp propagation should be enabled otherwise {@code false}. */ boolean stomp() default true; /** * default is {@link PreservesStompHeadersStrategy} * * @return the stomp propagation strategy. */ Class stompStrategy() default PreservesStompHeadersStrategy.class; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy