Skip to content

Latest commit

 

History

History

camel-springboot

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Hawtio-Enabled Camel Spring Boot Example

This sample application shows how to make it hawtio-enabled with Camel Spring Boot. Once deployed on OpenShift/Kubernetes, it will be discovered by Hawtio Online.

Highlights

This project uses JKube kubernetes-maven-plugin to build a container image and deploy it to a Kubernetes/OpenShift cluster. JKube supports Jolokia out of the box and the default base image already includes Jolokia agent.

All you need to make the application hawtio-enabled is to define additional environment variables to the deployment resource to fine-tune the Jolokia agent options. By default, JKube plugin sets up a Jolokia agent with HTTPS and SSL client authentication enabled. The only necessary configurations are the client principal that matches the Hawtio Online instance (the default is hawtio-online.hawtio.svc) and the CA cert to specify service-ca.crt instead of the default ca.crt.

<plugin>
  <groupId>org.eclipse.jkube</groupId>
  <artifactId>kubernetes-maven-plugin</artifactId>
  <version>${kubernetes-maven-plugin-version}</version>
  <configuration>
    <resources>
      <env>
        <!--
          By default, JKube plugin sets up a Jolokia agent with HTTPS and
          SSL client authentication enabled. The only necessary configurations
          are the client principal that matches the Hawtio Online instance
          (the default is `hawtio-online.hawtio.svc`) and the CA cert to
          specify `service-ca.crt` instead of the default `ca.crt`.
        -->
        <AB_JOLOKIA_AUTH_OPENSHIFT>cn=hawtio-online.hawtio.svc</AB_JOLOKIA_AUTH_OPENSHIFT>
        <AB_JOLOKIA_OPTS>caCert=/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt</AB_JOLOKIA_OPTS>
      </env>
    </resources>
  </configuration>
</plugin>

How to run locally

Run with:

mvn spring-boot:run

How to deploy it to Kubernetes/OpenShift

This example is intended to be used by deploying to a Kubernetes/OpenShift cluster.

To deploy it to a cluster, firstly change the container image name in pom.xml to fit your development environment. (The default image name is quay.io/hawtio/hawtio-online-example-camel-springboot:latest, which should be pushed to the hawtio organisation on Quay.io.)

    <jkube.generator.name>quay.io/hawtio/%a:latest</jkube.generator.name>

Then build the project and container image:

mvn package k8s:build

and push the image to the container registry so that Kubernetes/OpenShift can pull it at deployment:

mvn k8s:push

To deploy it to Kubernetes/OpenShift:

mvn k8s:resource k8s:deploy

After deployment is successful and the pod has started, the application log can be seen on the cluster like this:

$ hawtio-online-example-camel-springboot
+ hawtio-online-example-camel-springboot-7f578548d6-s27j4 › spring-boot
Starting the Java application using /opt/jboss/container/java/run/run-java.sh ...
INFO exec  java -javaagent:/usr/share/java/jolokia-jvm-agent/jolokia-jvm.jar=config=/opt/jboss/container/jolokia/etc/jolokia.properties -javaagent:/usr/share/java/prometheus-jmx-exporter/jmx_prometheus_javaagent.jar=9779:/opt/jboss/container/prometheus/etc/jmx-exporter-config.yaml -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError -cp ".:/deployments/*" org.springframework.boot.loader.JarLauncher  
 _________________________________________ 
< Hawtio Online Camel Spring Boot Example >
 ----------------------------------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL https://172.17.11.234:8778/jolokia/
2023-11-23T03:51:12.505Z  INFO 1 --- [           main] i.h.o.e.s.SampleSpringBootService        : Starting SampleSpringBootService using Java 17.0.9 with PID 1 (/deployments/BOOT-INF/classes started by jboss in /deployments)
2023-11-23T03:51:12.512Z  INFO 1 --- [           main] i.h.o.e.s.SampleSpringBootService        : No active profile set, falling back to 1 default profile: "default"
2023-11-23T03:51:15.938Z  INFO 1 --- [           main] o.a.c.i.e.DefaultCamelContextExtension   : Detected: camel-debug JAR (Enabling Camel Debugging)
2023-11-23T03:51:17.021Z  INFO 1 --- [           main] org.xnio                                 : XNIO version 3.8.8.Final
2023-11-23T03:51:17.037Z  INFO 1 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.8.8.Final
2023-11-23T03:51:17.077Z  INFO 1 --- [           main] org.jboss.threads                        : JBoss Threads version 3.5.0.Final
2023-11-23T03:51:17.502Z  INFO 1 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel 4.1.0 (SampleCamelSpringBoot) is starting
2023-11-23T03:51:17.582Z  INFO 1 --- [           main] o.a.c.component.quartz.QuartzComponent   : Setting org.quartz.scheduler.jmx.export=true to ensure QuartzScheduler(s) will be enlisted in JMX
2023-11-23T03:51:17.617Z  INFO 1 --- [           main] org.quartz.impl.StdSchedulerFactory      : Using default implementation for ThreadExecutor
2023-11-23T03:51:17.621Z  INFO 1 --- [           main] org.quartz.simpl.SimpleThreadPool        : Job execution threads will use class loader of thread: main
2023-11-23T03:51:17.632Z  INFO 1 --- [           main] org.quartz.core.SchedulerSignalerImpl    : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2023-11-23T03:51:17.633Z  INFO 1 --- [           main] org.quartz.core.QuartzScheduler          : Quartz Scheduler v.2.3.2 created.
2023-11-23T03:51:17.633Z  INFO 1 --- [           main] org.quartz.simpl.RAMJobStore             : RAMJobStore initialized.
2023-11-23T03:51:17.638Z  INFO 1 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.2) 'DefaultQuartzScheduler-SampleCamelSpringBoot' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

2023-11-23T03:51:17.638Z  INFO 1 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'DefaultQuartzScheduler-SampleCamelSpringBoot' initialized from an externally provided properties instance.
2023-11-23T03:51:17.638Z  INFO 1 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.2
2023-11-23T03:51:17.651Z  INFO 1 --- [           main] o.a.c.component.quartz.QuartzEndpoint    : Job Camel_SampleCamelSpringBoot.cron (cron=0/10 * * * * ?, triggerType=CronTriggerImpl, jobClass=CamelJob) is scheduled. Next fire date is 2023-11-23T03:51:20.000+0000
2023-11-23T03:51:17.688Z  INFO 1 --- [           main] o.a.c.component.quartz.QuartzEndpoint    : Job Camel_SampleCamelSpringBoot.simple (cron=null, triggerType=SimpleTriggerImpl, jobClass=CamelJob) is scheduled. Next fire date is 2023-11-23T03:51:17.685+0000
2023-11-23T03:51:17.733Z  INFO 1 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Routes startup (started:2)
2023-11-23T03:51:17.733Z  INFO 1 --- [           main] o.a.c.impl.engine.AbstractCamelContext   :     Started cron (quartz://cron)
2023-11-23T03:51:17.733Z  INFO 1 --- [           main] o.a.c.impl.engine.AbstractCamelContext   :     Started simple (quartz://simple)
2023-11-23T03:51:17.733Z  INFO 1 --- [           main] o.a.c.impl.engine.AbstractCamelContext   : Apache Camel 4.1.0 (SampleCamelSpringBoot) started in 230ms (build:0ms init:0ms start:230ms)
2023-11-23T03:51:17.735Z  INFO 1 --- [           main] o.a.camel.impl.debugger.BacklogDebugger  : Enabling Camel debugger
2023-11-23T03:51:17.735Z  INFO 1 --- [           main] o.a.c.component.quartz.QuartzComponent   : Starting Quartz scheduler: org.quartz.impl.StdScheduler@72b53f27
2023-11-23T03:51:17.740Z  INFO 1 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler-SampleCamelSpringBoot_$_NON_CLUSTERED started.
2023-11-23T03:51:17.744Z  INFO 1 --- [           main] i.h.o.e.s.SampleSpringBootService        : Started SampleSpringBootService in 6.646 seconds (process running for 7.617)
Hello Camel! - simple
2023-11-23T03:51:17.788Z  INFO 1 --- [melJMXConnector] o.a.c.c.debug.JmxConnectorService        : JMX Connector thread started and listening at: service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel
Hello Camel! - cron
Hello Camel! - simple
Hello Camel! - cron
Hello Camel! - simple