Copyright 2012 Netflix, Inc. 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.
/** * Copyright 2012 Netflix, Inc. * * 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.netflix.hystrix.strategy.properties; import com.netflix.hystrix.strategy.properties.HystrixPropertiesChainedArchaiusProperty.DynamicBooleanProperty; import com.netflix.hystrix.strategy.properties.HystrixPropertiesChainedArchaiusProperty.DynamicIntegerProperty; import com.netflix.hystrix.strategy.properties.HystrixPropertiesChainedArchaiusProperty.DynamicLongProperty; import com.netflix.hystrix.strategy.properties.HystrixPropertiesChainedArchaiusProperty.DynamicStringProperty;
Generic interface to represent a property value so Hystrix can consume properties without being tied to any particular backing implementation.
Type parameters:
  • <T> – Type of property value
/** * Generic interface to represent a property value so Hystrix can consume properties without being tied to any particular backing implementation. * * @param <T> * Type of property value */
public interface HystrixProperty<T> { public T get();
Helper methods for wrapping static values and dynamic Archaius (https://github.com/Netflix/archaius) properties in the HystrixProperty interface.
/** * Helper methods for wrapping static values and dynamic Archaius (https://github.com/Netflix/archaius) properties in the {@link HystrixProperty} interface. */
public static class Factory { public static <T> HystrixProperty<T> asProperty(final T value) { return new HystrixProperty<T>() { @Override public T get() { return value; } }; }
@ExcludeFromJavadoc
/** * @ExcludeFromJavadoc */
public static HystrixProperty<Integer> asProperty(final DynamicIntegerProperty value) { return new HystrixProperty<Integer>() { @Override public Integer get() { return value.get(); } }; }
@ExcludeFromJavadoc
/** * @ExcludeFromJavadoc */
public static HystrixProperty<Long> asProperty(final DynamicLongProperty value) { return new HystrixProperty<Long>() { @Override public Long get() { return value.get(); } }; }
@ExcludeFromJavadoc
/** * @ExcludeFromJavadoc */
public static HystrixProperty<String> asProperty(final DynamicStringProperty value) { return new HystrixProperty<String>() { @Override public String get() { return value.get(); } }; }
@ExcludeFromJavadoc
/** * @ExcludeFromJavadoc */
public static HystrixProperty<Boolean> asProperty(final DynamicBooleanProperty value) { return new HystrixProperty<Boolean>() { @Override public Boolean get() { return value.get(); } }; }
When retrieved this will return the value from the given HystrixProperty or if that returns null then return the defaultValue.
Params:
  • value – HystrixProperty of property value that can return null (meaning no value)
  • defaultValue – value to be returned if value returns null
Returns:value or defaultValue if value returns null
/** * When retrieved this will return the value from the given {@link HystrixProperty} or if that returns null then return the <code>defaultValue</code>. * * @param value * {@link HystrixProperty} of property value that can return null (meaning no value) * @param defaultValue * value to be returned if value returns null * @return value or defaultValue if value returns null */
public static <T> HystrixProperty<T> asProperty(final HystrixProperty<T> value, final T defaultValue) { return new HystrixProperty<T>() { @Override public T get() { T v = value.get(); if (v == null) { return defaultValue; } else { return v; } } }; }
When retrieved this will iterate over the contained HystrixProperty instances until a non-null value is found and return that.
Params:
  • values – properties to iterate over
Returns:first non-null value or null if none found
/** * When retrieved this will iterate over the contained {@link HystrixProperty} instances until a non-null value is found and return that. * * @param values properties to iterate over * @return first non-null value or null if none found */
public static <T> HystrixProperty<T> asProperty(final HystrixProperty<T>... values) { return new HystrixProperty<T>() { @Override public T get() { for (HystrixProperty<T> v : values) { // return the first one that doesn't return null if (v.get() != null) { return v.get(); } } return null; } }; }
@ExcludeFromJavadoc
/** * @ExcludeFromJavadoc */
public static <T> HystrixProperty<T> asProperty(final HystrixPropertiesChainedArchaiusProperty.ChainLink<T> chainedProperty) { return new HystrixProperty<T>() { @Override public T get() { return chainedProperty.get(); } }; } public static <T> HystrixProperty<T> nullProperty() { return new HystrixProperty<T>() { @Override public T get() { return null; } }; } } }