Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.quarkus.deployment.builditem;

import org.eclipse.microprofile.config.spi.ConfigSourceProvider;

import io.quarkus.builder.item.MultiBuildItem;

/**
* Build item to use when an additional {@link ConfigSourceProvider} needs to be
* registered to the Bootstrap Config setup.
* This is needed because during Bootstrap Config setup, we don't auto-discover providers
* but we do want for example the YAML provider to be enabled.
*/
public final class AdditionalBootstrapConfigSourceProviderBuildItem extends MultiBuildItem {

private final String providerClassName;

public AdditionalBootstrapConfigSourceProviderBuildItem(String providerClassName) {
this.providerClassName = providerClassName;
}

public String getProviderClassName() {
return providerClassName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,11 @@ private RunTimeConfigurationGenerator() {

public static void generate(BuildTimeConfigurationReader.ReadResult readResult, final ClassOutput classOutput,
boolean devMode,
final Map<String, String> runTimeDefaults, List<Class<?>> additionalTypes) {
final Map<String, String> runTimeDefaults, List<Class<?>> additionalTypes,
List<String> additionalBootstrapConfigSourceProviders) {
new GenerateOperation.Builder().setBuildTimeReadResult(readResult).setClassOutput(classOutput).setDevMode(devMode)
.setRunTimeDefaults(runTimeDefaults).setAdditionalTypes(additionalTypes).build().run();
.setRunTimeDefaults(runTimeDefaults).setAdditionalTypes(additionalTypes)
.setAdditionalBootstrapConfigSourceProviders(additionalBootstrapConfigSourceProviders).build().run();
}

static final class GenerateOperation implements AutoCloseable {
Expand Down Expand Up @@ -273,6 +275,7 @@ static final class GenerateOperation implements AutoCloseable {
final ResultHandle clinitConfig;
final Map<FieldDescriptor, Class<?>> convertersToRegister = new HashMap<>();
final List<Class<?>> additionalTypes;
final List<String> additionalBootstrapConfigSourceProviders;
/**
* Regular converters organized by type. Each converter is stored in a separate field. Some are used
* only at build time, some only at run time, and some at both times.
Expand Down Expand Up @@ -302,6 +305,7 @@ static final class GenerateOperation implements AutoCloseable {
roots = Assert.checkNotNullParam("builder.roots", builder.getBuildTimeReadResult().getAllRoots());
runTimeDefaults = Assert.checkNotNullParam("runTimeDefaults", builder.getRunTimeDefaults());
additionalTypes = Assert.checkNotNullParam("additionalTypes", builder.getAdditionalTypes());
additionalBootstrapConfigSourceProviders = builder.additionalBootstrapConfigSourceProviders;
cc = ClassCreator.builder().classOutput(classOutput).className(CONFIG_CLASS_NAME).setFinal(true).build();
generateEmptyParsers(cc);
// not instantiable
Expand Down Expand Up @@ -564,6 +568,13 @@ public void run() {
// put sources in the bootstrap builder
if (bootstrapConfigSetupNeeded()) {
readBootstrapConfig.invokeVirtualMethod(SRCB_WITH_SOURCES, bootstrapBuilder, bootstrapConfigSourcesArray);

// add additional providers
for (String providerClass : additionalBootstrapConfigSourceProviders) {
ResultHandle providerInstance = readBootstrapConfig
.newInstance(MethodDescriptor.ofConstructor(providerClass));
readBootstrapConfig.invokeStaticMethod(CU_ADD_SOURCE_PROVIDER, bootstrapBuilder, providerInstance);
}
}
// put sources in the builder
readConfig.invokeVirtualMethod(SRCB_WITH_SOURCES, runTimeBuilder, runtimeConfigSourcesArray);
Expand Down Expand Up @@ -1547,6 +1558,7 @@ static final class Builder {
private BuildTimeConfigurationReader.ReadResult buildTimeReadResult;
private Map<String, String> runTimeDefaults;
private List<Class<?>> additionalTypes;
private List<String> additionalBootstrapConfigSourceProviders;

Builder() {
}
Expand Down Expand Up @@ -1596,6 +1608,11 @@ public Builder setDevMode(boolean devMode) {
return this;
}

Builder setAdditionalBootstrapConfigSourceProviders(List<String> additionalBootstrapConfigSourceProviders) {
this.additionalBootstrapConfigSourceProviders = additionalBootstrapConfigSourceProviders;
return this;
}

GenerateOperation build() {
return new GenerateOperation(this);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.quarkus.deployment.steps;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -14,6 +16,7 @@
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.AdditionalBootstrapConfigSourceProviderBuildItem;
import io.quarkus.deployment.builditem.ConfigurationBuildItem;
import io.quarkus.deployment.builditem.ConfigurationTypeBuildItem;
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
Expand All @@ -40,7 +43,8 @@ void generateConfigClass(ConfigurationBuildItem configItem, List<RunTimeConfigur
List<ConfigurationTypeBuildItem> typeItems,
LaunchModeBuildItem launchModeBuildItem,
BuildProducer<GeneratedClassBuildItem> generatedClass,
LiveReloadBuildItem liveReloadBuildItem) {
LiveReloadBuildItem liveReloadBuildItem,
List<AdditionalBootstrapConfigSourceProviderBuildItem> additionalBootstrapConfigSourceProviders) {
if (liveReloadBuildItem.isLiveReload()) {
return;
}
Expand All @@ -56,7 +60,20 @@ void generateConfigClass(ConfigurationBuildItem configItem, List<RunTimeConfigur

ClassOutput classOutput = new GeneratedClassGizmoAdaptor(generatedClass, false);
RunTimeConfigurationGenerator.generate(readResult, classOutput,
launchModeBuildItem.getLaunchMode() == LaunchMode.DEVELOPMENT, defaults, additionalConfigTypes);
launchModeBuildItem.getLaunchMode() == LaunchMode.DEVELOPMENT, defaults, additionalConfigTypes,
getAdditionalBootstrapConfigSourceProviders(additionalBootstrapConfigSourceProviders));
}

private List<String> getAdditionalBootstrapConfigSourceProviders(
List<AdditionalBootstrapConfigSourceProviderBuildItem> additionalBootstrapConfigSourceProviders) {
if (additionalBootstrapConfigSourceProviders.isEmpty()) {
return Collections.emptyList();
}
List<String> result = new ArrayList<>(additionalBootstrapConfigSourceProviders.size());
for (AdditionalBootstrapConfigSourceProviderBuildItem provider : additionalBootstrapConfigSourceProviders) {
result.add(provider.getProviderClassName());
}
return result;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.quarkus.deployment.Feature;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.AdditionalBootstrapConfigSourceProviderBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;

Expand All @@ -14,6 +15,11 @@ public FeatureBuildItem feature() {
return new FeatureBuildItem(Feature.CONFIG_YAML);
}

@BuildStep
public AdditionalBootstrapConfigSourceProviderBuildItem bootstrap() {
return new AdditionalBootstrapConfigSourceProviderBuildItem(ApplicationYamlProvider.class.getName());
}

@BuildStep
void watchYamlConfig(BuildProducer<HotDeploymentWatchedFileBuildItem> items) {
items.produce(new HotDeploymentWatchedFileBuildItem(ApplicationYamlProvider.APPLICATION_YAML));
Expand Down
6 changes: 5 additions & 1 deletion integration-tests/spring-cloud-config-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-spring-cloud-config-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-config-yaml</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
Expand Down Expand Up @@ -112,4 +116,4 @@
</properties>
</profile>
</profiles>
</project>
</project>

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'%prod':
quarkus:
spring-cloud-config:
url: http://localhost:8089
username: user
password: pass
enabled: true
quarkus:
application:
name: a-bootiful-client

greeting:
message: hello from application.properties