public abstract class Components
extends java.lang.Object
Some of the configuration options in LDConfig.Builder
affect the entire SDK, but others are
specific to one area of functionality, such as how the SDK receives feature flag updates or processes
analytics events. For the latter, the standard way to specify a configuration is to call one of the
static methods in Components
(such as streamingDataSource()
), apply any desired
configuration change to the object that that method returns (such as StreamingDataSourceBuilder.initialReconnectDelay(java.time.Duration)
,
and then use the corresponding method in LDConfig.Builder
(such as LDConfig.Builder.dataSource(ComponentConfigurer)
)
to use that configured component in the SDK.
Modifier and Type | Method and Description |
---|---|
static ApplicationInfoBuilder |
applicationInfo()
Returns a configuration builder for the SDK's application metadata.
|
static BigSegmentsConfigurationBuilder |
bigSegments(ComponentConfigurer<BigSegmentStore> storeConfigurer)
Returns a configuration builder for the SDK's Big Segments feature.
|
static ComponentConfigurer<DataSource> |
externalUpdatesOnly()
Returns a configuration object that disables a direct connection with LaunchDarkly for feature flag updates.
|
static HooksConfigurationBuilder |
hooks()
Returns a builder for configuring hooks.
|
static HttpAuthentication |
httpBasicAuthentication(java.lang.String username,
java.lang.String password)
Configures HTTP basic authentication, for use with a proxy server.
|
static HttpConfigurationBuilder |
httpConfiguration()
Returns a configuration builder for the SDK's networking configuration.
|
static ComponentConfigurer<DataStore> |
inMemoryDataStore()
Returns a configuration object for using the default in-memory implementation of a data store.
|
static LoggingConfigurationBuilder |
logging()
Returns a configuration builder for the SDK's logging configuration.
|
static LoggingConfigurationBuilder |
logging(LDLogAdapter logAdapter)
Returns a configuration builder for the SDK's logging configuration, specifying the
implementation of logging to use.
|
static ComponentConfigurer<EventProcessor> |
noEvents()
Returns a configuration object that disables analytics events.
|
static LoggingConfigurationBuilder |
noLogging()
Returns a configuration builder that turns off SDK logging.
|
static PersistentDataStoreBuilder |
persistentDataStore(ComponentConfigurer<PersistentDataStore> storeConfigurer)
Returns a configuration builder for some implementation of a persistent data store.
|
static PollingDataSourceBuilder |
pollingDataSource()
Returns a configurable factory for using polling mode to get feature flag data.
|
static EventProcessorBuilder |
sendEvents()
Returns a configuration builder for analytics event delivery.
|
static ServiceEndpointsBuilder |
serviceEndpoints()
Returns a builder for configuring custom service URIs.
|
static StreamingDataSourceBuilder |
streamingDataSource()
Returns a configurable factory for using streaming mode to get feature flag data.
|
static WrapperInfoBuilder |
wrapperInfo()
Returns a wrapper information builder.
|
public static BigSegmentsConfigurationBuilder bigSegments(ComponentConfigurer<BigSegmentStore> storeConfigurer)
Big Segments are a specific type of user segments. For more information, read the LaunchDarkly documentation.
After configuring this object, use
LDConfig.Builder.bigSegments(ComponentConfigurer)
to store it in your SDK
configuration. For example, using the Redis integration:
LDConfig config = new LDConfig.Builder()
.bigSegments(Components.bigSegments(Redis.dataStore().prefix("app1"))
.userCacheSize(2000))
.build();
You must always specify the storeFactory
parameter, to tell the SDK what database you
are using. Several database integrations exist for the LaunchDarkly SDK, each with its own
behavior and options specific to that database; this is described via some implementation of
BigSegmentStore
. The BigSegmentsConfigurationBuilder
adds configuration
options for aspects of SDK behavior that are independent of the database. In the example above,
prefix
is an option specifically for the Redis integration, whereas
userCacheSize
is an option that can be used for any data store type.
storeConfigurer
- the factory for the underlying data storeBigSegmentsConfigurationBuilder
bigSegments(ComponentConfigurer)
public static ComponentConfigurer<DataStore> inMemoryDataStore()
Since it is the default, you do not normally need to call this method, unless you need to create a data store instance for testing purposes.
LDConfig.Builder.dataStore(ComponentConfigurer)
public static PersistentDataStoreBuilder persistentDataStore(ComponentConfigurer<PersistentDataStore> storeConfigurer)
This method is used in conjunction with another factory object provided by specific components
such as the Redis integration. The latter provides builder methods for options that are specific
to that integration, while the PersistentDataStoreBuilder
provides options that are
applicable to any persistent data store (such as caching). For example:
LDConfig config = new LDConfig.Builder()
.dataStore(
Components.persistentDataStore(
Redis.dataStore().url("redis://my-redis-host")
).cacheSeconds(15)
)
.build();
See PersistentDataStoreBuilder
for more on how this method is used.
For more information on the available persistent data store implementations, see the reference guide on Using a persistent feature store.
storeConfigurer
- the factory/builder for the specific kind of persistent data storePersistentDataStoreBuilder
LDConfig.Builder.dataStore(ComponentConfigurer)
public static EventProcessorBuilder sendEvents()
The default configuration has events enabled with default settings. If you want to
customize this behavior, call this method to obtain a builder, change its properties
with the EventProcessorBuilder
properties, and pass it to LDConfig.Builder.events(ComponentConfigurer)
:
LDConfig config = new LDConfig.Builder()
.events(Components.sendEvents().capacity(5000).flushIntervalSeconds(2))
.build();
To completely disable sending analytics events, use noEvents()
instead.
Setting LDConfig.Builder.offline(boolean)
to true
will supersede this setting and completely
disable network requests.
noEvents()
,
LDConfig.Builder.events
public static ComponentConfigurer<EventProcessor> noEvents()
Passing this to LDConfig.Builder.events(ComponentConfigurer)
causes the SDK
to discard all analytics events and not send them to LaunchDarkly, regardless of any other configuration.
LDConfig config = new LDConfig.Builder()
.events(Components.noEvents())
.build();
sendEvents()
,
LDConfig.Builder.events(ComponentConfigurer)
public static StreamingDataSourceBuilder streamingDataSource()
By default, the SDK uses a streaming connection to receive feature flag data from LaunchDarkly. To use the
default behavior, you do not need to call this method. However, if you want to customize the behavior of
the connection, call this method to obtain a builder, change its properties with the
StreamingDataSourceBuilder
methods, and pass it to LDConfig.Builder.dataSource(ComponentConfigurer)
:
LDConfig config = new LDConfig.Builder()
.dataSource(Components.streamingDataSource().initialReconnectDelayMillis(500))
.build();
Setting LDConfig.Builder.offline(boolean)
to true
will supersede this setting and completely
disable network requests.
LDConfig.Builder.dataSource(ComponentConfigurer)
public static PollingDataSourceBuilder pollingDataSource()
This is not the default behavior; by default, the SDK uses a streaming connection to receive feature flag data from LaunchDarkly. In polling mode, the SDK instead makes a new HTTP request to LaunchDarkly at regular intervals. HTTP caching allows it to avoid redundantly downloading data if there have been no changes, but polling is still less efficient than streaming and should only be used on the advice of LaunchDarkly support.
To use polling mode, call this method to obtain a builder, change its properties with the
PollingDataSourceBuilder
methods, and pass it to LDConfig.Builder.dataSource(ComponentConfigurer)
:
LDConfig config = new LDConfig.Builder()
.dataSource(Components.pollingDataSource().pollIntervalMillis(45000))
.build();
Setting LDConfig.Builder.offline(boolean)
to true
will supersede this setting and completely
disable network requests.
LDConfig.Builder.dataSource(ComponentConfigurer)
public static ComponentConfigurer<DataSource> externalUpdatesOnly()
Passing this to LDConfig.Builder.dataSource(ComponentConfigurer)
causes the SDK
not to retrieve feature flag data from LaunchDarkly, regardless of any other configuration.
This is normally done if you are using the Relay Proxy
in "daemon mode", where an external process-- the Relay Proxy-- connects to LaunchDarkly and populates
a persistent data store with the feature flag data. The data store could also be populated by
another process that is running the LaunchDarkly SDK. If there is no external process updating
the data store, then the SDK will not have any feature flag data and will return application
default values only.
LDConfig config = new LDConfig.Builder()
.dataSource(Components.externalUpdatesOnly())
.dataStore(Components.persistentDataStore(Redis.dataStore())) // assuming the Relay Proxy is using Redis
.build();
LDConfig.Builder.dataSource(ComponentConfigurer)
public static HttpConfigurationBuilder httpConfiguration()
Passing this to LDConfig.Builder.http(ComponentConfigurer)
applies this configuration to all HTTP/HTTPS requests made by the SDK.
LDConfig config = new LDConfig.Builder()
.http(
Components.httpConfiguration()
.connectTimeoutMillis(3000)
.proxyHostAndPort("my-proxy", 8080)
)
.build();
LDConfig.Builder.http(ComponentConfigurer)
public static HttpAuthentication httpBasicAuthentication(java.lang.String username, java.lang.String password)
LDConfig config = new LDConfig.Builder()
.http(
Components.httpConfiguration()
.proxyHostAndPort("my-proxy", 8080)
.proxyAuthentication(Components.httpBasicAuthentication("username", "password"))
)
.build();
username
- the usernamepassword
- the passwordHttpConfigurationBuilder.proxyAuth(HttpAuthentication)
public static LoggingConfigurationBuilder logging()
Passing this to LDConfig.Builder.logging(ComponentConfigurer)
,
after setting any desired properties on the builder, applies this configuration to the SDK.
LDConfig config = new LDConfig.Builder()
.logging(
Components.logging()
.logDataSourceOutageAsErrorAfter(Duration.ofSeconds(120))
)
.build();
LDConfig.Builder.logging(ComponentConfigurer)
public static LoggingConfigurationBuilder logging(LDLogAdapter logAdapter)
This is a shortcut for Components.logging().adapter(logAdapter)
. The
com.launchdarkly.logging
API defines the LDLogAdapter
interface to specify where log output should be sent.
The default logging destination, if no adapter is specified, depends on whether
SLF4J is present in the classpath. If it is, then the SDK uses
LDSLF4J.adapter()
, causing output to go to SLF4J; what happens to
the output then is determined by the SLF4J configuration. If SLF4J is not present in the classpath,
the SDK uses Logs.toConsole()
instead, causing output to go to the System.err
stream.
You may use the Logs
factory methods, or a custom implementation,
to handle log output differently. For instance, you may specify
Logs.toJavaUtilLogging()
to use the java.util.logging
framework.
Passing this to LDConfig.Builder.logging(ComponentConfigurer)
,
after setting any desired properties on the builder, applies this configuration to the SDK.
LDConfig config = new LDConfig.Builder()
.logging(
Components.logging(Logs.basic())
)
.build();
logAdapter
- the log adapterLDConfig.Builder.logging(ComponentConfigurer)
,
LoggingConfigurationBuilder.adapter(LDLogAdapter)
public static LoggingConfigurationBuilder noLogging()
Passing this to LDConfig.Builder.logging(ComponentConfigurer)
applies this configuration to the SDK.
It is equivalent to Components.logging(com.launchdarkly.logging.Logs.none())
.
public static ApplicationInfoBuilder applicationInfo()
Passing this to LDConfig.Builder.applicationInfo(com.launchdarkly.sdk.server.integrations.ApplicationInfoBuilder)
,
after setting any desired properties on the builder, applies this configuration to the SDK.
LDConfig config = new LDConfig.Builder()
.applicationInfo(
Components.applicationInfo()
.applicationId("authentication-service")
.applicationVersion("1.0.0")
)
.build();
LDConfig.Builder.applicationInfo(com.launchdarkly.sdk.server.integrations.ApplicationInfoBuilder)
public static ServiceEndpointsBuilder serviceEndpoints()
Passing this to LDConfig.Builder.serviceEndpoints(com.launchdarkly.sdk.server.integrations.ServiceEndpointsBuilder)
,
after setting any desired properties on the builder, applies this configuration to the SDK.
LDConfig config = new LDConfig.Builder()
.serviceEndpoints(
Components.serviceEndpoints()
.relayProxy("http://my-relay-hostname:80")
)
.build();
LDConfig.Builder.serviceEndpoints(com.launchdarkly.sdk.server.integrations.ServiceEndpointsBuilder)
public static HooksConfigurationBuilder hooks()
LDConfig.Builder.hooks(com.launchdarkly.sdk.server.integrations.HooksConfigurationBuilder)
,
after setting any desired hooks on the builder, applies this configuration to the SDK.
List hooks = myCreateHooksFunc();
LDConfig config = new LDConfig.Builder()
.hooks(
Components.hooks()
.setHooks(hooks)
)
.build();
HooksConfigurationBuilder
that can be used for customizationpublic static WrapperInfoBuilder wrapperInfo()
This is intended for use by LaunchDarkly in the development of wrapper SDKs.