/** * Copyright (c) 2018-2028, DreamLu 卢春梦 (qq596392912@gmail.com). *

* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.gnu.org/licenses/lgpl.html *

* 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 org.springblade.core.cloud.header; import org.springblade.core.cloud.props.BladeFeignHeadersProperties; import org.springframework.http.HttpHeaders; import org.springframework.lang.Nullable; import java.util.concurrent.Callable; /** * HttpHeaders hystrix Callable * * @param 泛型标记 * @author L.cm */ public class BladeHttpHeadersCallable implements Callable { private final Callable delegate; @Nullable private HttpHeaders httpHeaders; public BladeHttpHeadersCallable(Callable delegate, @Nullable BladeFeignAccountGetter accountGetter, BladeFeignHeadersProperties properties) { this.delegate = delegate; this.httpHeaders = BladeHttpHeadersContextHolder.toHeaders(accountGetter, properties); } @Override public V call() throws Exception { if (httpHeaders == null) { return delegate.call(); } try { BladeHttpHeadersContextHolder.set(httpHeaders); return delegate.call(); } finally { BladeHttpHeadersContextHolder.remove(); httpHeaders.clear(); httpHeaders = null; } } }