You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/04/14 15:14:27 UTC
[camel] 02/04: CAMEL-17969: camel-main - Property-placeholder summary
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 10c8576a56fe0d08053d6c925a45f96a0d262464
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 14 14:49:46 2022 +0200
CAMEL-17969: camel-main - Property-placeholder summary
---
.../properties/DefaultPropertiesLookup.java | 8 +++
.../org/apache/camel/main/BaseMainSupport.java | 57 ++++++++++++++++++++++
.../java/org/apache/camel/dsl/modeline/Trait.java | 5 +-
3 files changed, 69 insertions(+), 1 deletion(-)
diff --git a/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java b/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java
index e5573f83d6f..c20e9df3909 100644
--- a/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java
+++ b/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesLookup.java
@@ -21,7 +21,9 @@ import java.util.Properties;
import org.apache.camel.NoTypeConversionAvailableException;
import org.apache.camel.PropertiesLookupListener;
import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.LoadablePropertiesSource;
import org.apache.camel.spi.PropertiesSource;
+import org.apache.camel.util.OrderedLocationProperties;
/**
* Default {@link PropertiesLookup} which lookup properties from a {@link java.util.Properties} with all existing
@@ -81,6 +83,12 @@ public class DefaultPropertiesLookup implements PropertiesLookup {
source = "ref:" + ((LocationPropertiesSource) ps).getLocation().getPath();
} else if (ps instanceof LocationPropertiesSource) {
source = ((LocationPropertiesSource) ps).getLocation().getPath();
+ } else if (ps instanceof LoadablePropertiesSource) {
+ Properties prop = ((LoadablePropertiesSource) ps).loadProperties();
+ if (prop instanceof OrderedLocationProperties) {
+ OrderedLocationProperties olp = (OrderedLocationProperties) prop;
+ source = olp.getLocation(name);
+ }
}
onLookup(name, answer, source);
break;
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 0cf744ed4da..c5c8a16ebc7 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -39,6 +39,7 @@ import org.apache.camel.Component;
import org.apache.camel.Configuration;
import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.NoSuchLanguageException;
+import org.apache.camel.PropertiesLookupListener;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.StartupStep;
import org.apache.camel.console.DevConsole;
@@ -46,9 +47,11 @@ import org.apache.camel.console.DevConsoleRegistry;
import org.apache.camel.health.HealthCheck;
import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.health.HealthCheckRepository;
+import org.apache.camel.impl.event.CamelContextRoutesStartedEvent;
import org.apache.camel.saga.CamelSagaService;
import org.apache.camel.spi.AutowiredLifecycleStrategy;
import org.apache.camel.spi.CamelBeanPostProcessor;
+import org.apache.camel.spi.CamelEvent;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.spi.Language;
import org.apache.camel.spi.PackageScanClassResolver;
@@ -56,6 +59,7 @@ import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.spi.RouteTemplateParameterSource;
import org.apache.camel.spi.StartupStepRecorder;
import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.EventNotifierSupport;
import org.apache.camel.support.LifecycleStrategySupport;
import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.support.ResourceHelper;
@@ -534,12 +538,18 @@ public abstract class BaseMainSupport extends BaseService {
}
protected void postProcessCamelContext(CamelContext camelContext) throws Exception {
+ // gathers the properties (key=value) that was used as property placeholders during bootstrap
+ final OrderedLocationProperties propertyPlaceholders = new OrderedLocationProperties();
+
// use the main autowired lifecycle strategy instead of the default
camelContext.getLifecycleStrategies().removeIf(s -> s instanceof AutowiredLifecycleStrategy);
camelContext.addLifecycleStrategy(new MainAutowiredLifecycleStrategy(camelContext));
// setup properties
configurePropertiesService(camelContext);
+ // register listener on properties component so we can capture them
+ PropertiesComponent pc = camelContext.getPropertiesComponent();
+ pc.addPropertiesLookupListener(new PropertyPlaceholderListener(propertyPlaceholders));
// setup startup recorder before building context
configureStartupRecorder(camelContext);
// setup package scan
@@ -586,6 +596,36 @@ public abstract class BaseMainSupport extends BaseService {
listener.afterConfigure(this);
listener.configure(camelContext);
}
+
+ // we want to log the property placeholder summary after routes has been started,
+ // but before camel context logs that it has been started, so we need to use an event listener
+ if (standalone && mainConfigurationProperties.isAutoConfigurationLogSummary()) {
+ camelContext.getManagementStrategy().addEventNotifier(new EventNotifierSupport() {
+ @Override
+ public boolean isEnabled(CamelEvent event) {
+ return event instanceof CamelContextRoutesStartedEvent;
+ }
+
+ @Override
+ public void notify(CamelEvent event) throws Exception {
+ // log summary of configurations
+ if (!propertyPlaceholders.isEmpty()) {
+ LOG.info("Property-placeholders summary");
+ for (var entry : propertyPlaceholders.entrySet()) {
+ String k = entry.getKey().toString();
+ Object v = entry.getValue();
+ String loc = locationSummary(propertyPlaceholders, k);
+
+ if (SensitiveUtils.containsSensitive(k)) {
+ LOG.info(" {} {}=xxxxxx", loc, k);
+ } else {
+ LOG.info(" {} {}={}", loc, k, v);
+ }
+ }
+ }
+ }
+ });
+ }
}
protected void autoConfigurationFailFast(CamelContext camelContext, OrderedLocationProperties autoConfiguredProperties)
@@ -1628,4 +1668,21 @@ public abstract class BaseMainSupport extends BaseService {
return loc;
}
+ private static final class PropertyPlaceholderListener implements PropertiesLookupListener {
+
+ private final OrderedLocationProperties olp;
+
+ public PropertyPlaceholderListener(OrderedLocationProperties olp) {
+ this.olp = olp;
+ }
+
+ @Override
+ public void onLookup(String name, String value, String source) {
+ if (source == null) {
+ source = "unknown";
+ }
+ olp.put(source, name, value);
+ }
+ }
+
}
diff --git a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/Trait.java b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/Trait.java
index 93473fc656e..d91c3b0f48d 100644
--- a/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/Trait.java
+++ b/dsl/camel-dsl-modeline/src/main/java/org/apache/camel/dsl/modeline/Trait.java
@@ -20,10 +20,13 @@ import org.apache.camel.spi.CamelContextCustomizer;
import org.apache.camel.spi.Resource;
/**
- * modeline trait
+ * Modeline trait
*/
public interface Trait {
+ /**
+ * Name of trait
+ */
String getName();
/**