add monitoring of Spring Boot Camel routes
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s

This commit is contained in:
Thomas Peetz
2026-08-19 13:51:32 +02:00
parent fd5bb14e77
commit 3b50a94928
4 changed files with 47 additions and 31 deletions
+4 -12
View File
@@ -28,16 +28,11 @@ plugins {
alias(libs.plugins.spring.dependencies)
alias(libs.plugins.vaadin)
alias(libs.plugins.lombok)
//alias(libs.plugins.asciidoctorPdf)
//alias(libs.plugins.asciidoctorConvert)
//alias(libs.plugins.asciidoctorGems)
//id "de.infolektuell.typst" version "0.8.0"
}
repositories {
maven { setUrl("https://nexus.thpeetz.de/repository/maven-central") }
mavenCentral()
//ruby.gems()
maven { setUrl("https://maven.vaadin.com/vaadin-prereleases") }
maven { setUrl("https://repo.spring.io/milestone") }
maven { setUrl("https://maven.vaadin.com/vaadin-addons") }
@@ -63,11 +58,15 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.apache.camel.springboot:camel-spring-boot-starter'
implementation 'org.apache.camel.springboot:camel-jms-starter'
implementation 'org.apache.camel.springboot:camel-metrics-starter'
implementation 'org.apache.camel.springboot:camel-micrometer-starter'
implementation 'org.apache.activemq:artemis-jakarta-client'
//implementation libs.artemis
implementation 'org.springframework.boot:spring-boot-starter-actuator'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'io.micrometer:micrometer-registry-prometheus'
implementation libs.jolokia.core
implementation libs.prometheus.collector
implementation 'org.springframework.security:spring-security-oauth2-jose'
implementation 'org.springframework.security:spring-security-oauth2-resource-server'
implementation 'com.h2database:h2'
@@ -90,8 +89,6 @@ dependencies {
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//asciidoctorGems libs.rouge
//asciidoctorGems libs.diagram
}
dependencyManagement {
@@ -117,11 +114,6 @@ publishing {
password = project.findProperty('nexusPassword')
}
}
// maven {
// name = "gitlabPackageRegistry"
// url = uri("https://gitlab.com/api/v4/projects/64726715/packages/maven")
// credentials(PasswordCredentials)
// }
}
}
+6 -19
View File
@@ -3,19 +3,14 @@ gradle = "8.6"
args4j = "2.33"
commonscli = "1.5.0"
junit = "5.8.2"
logback = "1.1.2"
logback = "1.6.3"
mockito = "1.9.5"
picoli = "4.7.0"
slf4j = "1.7.22"
slf4j = "2.0.18"
hsqldb = "2.7.1"
sqlite = "3.25.2"
spotbugs = "6.0.7"
#asciidoctor = "4.0.2"
#rouge = "3.15.0"
#diagram = "2.2.2"
#diagram = "2.3.1"
sonarqube = "3.3"
cimtConventions = "1.0.0-SNAPSHOT"
springboot = "3.2.5"
springdependencies = "1.1.4"
vaadin = "24.4.23"
@@ -27,6 +22,8 @@ jackson = "2.16.1"
json_simple = "1.1.1"
mail = "1.6.2"
hypersistence = "3.9.10"
jolokia = "2.6.1"
prometheus = "1.6.0"
[libraries]
args4j = { module = "args4j:args4j", version.ref = "args4j" }
@@ -47,11 +44,8 @@ hypersistence = { module = "io.hypersistence:hypersistence-utils-hibernate-63",
vaadin-bom = { module = "com.vaadin:vaadin-bom", version.ref = "vaadin" }
camel-bom = { module = "org.apache.camel.springboot:camel-spring-boot-bom", version.ref = "camel"}
artemis = { module = "org.apache.activemq:artemis-jms-server", version.ref = "artemis" }
#asciidoctorGradleJvmGems = { module = "org.asciidoctor:asciidoctor-gradle-jvm-gems", version.ref= "asciidoctor" }
#asciidoctorGradleJvm = { module = "org.asciidoctor:asciidoctor-gradle-jvm", version.ref= "asciidoctor" }
#asciidoctorGradleJvmPdf = { module = "org.asciidoctor:asciidoctor-gradle-jvm-pdf", version.ref= "asciidoctor" }
#rouge = { module = "rubygems:rouge", version.ref = "rouge" }
#diagram = { module = "rubygems:asciidoctor-diagram", version.ref = "diagram" }
jolokia-core = { module = "org.jolokia:jolokia-core", version.ref = "jolokia" }
prometheus-collector = { module = "io.prometheus.jmx:collector", version.ref = "prometheus" }
[bundles]
logback = ["logbackCore", "logbackClassic"]
@@ -59,13 +53,6 @@ logback = ["logbackCore", "logbackClassic"]
[plugins]
spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugs" }
sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" }
#asciidoctorPdf = { id = "org.asciidoctor.jvm.pdf", version.ref = "asciidoctor" }
#asciidoctorConvert = { id = "org.asciidoctor.jvm.convert", version.ref = "asciidoctor" }
#asciidoctorGems = { id = "org.asciidoctor.jvm.gems", version.ref = "asciidoctor" }
javaConvention = { id = "de.cimt.java-conventions", version.ref = "cimtConventions" }
applicationConvention = { id = "de.cimt.application-conventions", version.ref = "cimtConventions" }
libraryConvention = { id = "de.cimt.library-conventions", version.ref = "cimtConventions" }
#asciidoctorConvention = { id = "de.cimt.asciidoctor-conventions", version.ref = "cimtConventions" }
spring-boot = { id = "org.springframework.boot", version.ref = "springboot"}
spring-dependencies = { id = "io.spring.dependency-management", version.ref = "springdependencies" }
vaadin = { id = "com.vaadin", version.ref = "vaadin" }
@@ -1,15 +1,28 @@
package de.thpeetz.kontor;
import org.apache.camel.CamelContext;
import org.apache.camel.component.micrometer.MicrometerConstants;
import org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryFactory;
import org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyFactory;
import org.apache.camel.spring.boot.CamelContextConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import com.vaadin.flow.component.page.AppShellConfigurator;
import com.vaadin.flow.server.PWA;
import com.vaadin.flow.theme.Theme;
import io.micrometer.core.instrument.Clock;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.prometheus.client.CollectorRegistry;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@Slf4j
@EnableJpaAuditing
@SpringBootApplication
@@ -17,6 +30,27 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@PWA(name = "Vaadin Kontor", shortName = "Kontor", offlinePath = "offline.html", offlineResources = { "images/offline.png" })
public class Application implements AppShellConfigurator {
@Bean(name = { MicrometerConstants.METRICS_REGISTRY_NAME, "prometheusMeterRegistry" })
public PrometheusMeterRegistry prometheusMeterRegistry(
PrometheusConfig prometheusConfig, CollectorRegistry collectorRegistry, Clock clock) {
return new PrometheusMeterRegistry(prometheusConfig, collectorRegistry, clock);
}
@Bean
public CamelContextConfiguration camelContextConfiguration(@Autowired PrometheusMeterRegistry registry) {
return new CamelContextConfiguration() {
@Override
public void beforeApplicationStart(CamelContext camelContext) {
camelContext.addRoutePolicyFactory(new MicrometerRoutePolicyFactory());
camelContext.setMessageHistoryFactory(new MicrometerMessageHistoryFactory());
}
@Override
public void afterApplicationStart(CamelContext camelContext) {
}
};
}
public static void main(String[] args) {
log.info("Starting Kontor application");
SpringApplication.run(Application.class);
@@ -25,6 +25,9 @@ spring:
max-file-size: 10MB
max-request-size: 10MB
camel:
component:
metrics:
metric-registry: prometheusMeterRegistry
cloud:
enabled: true
springboot: