This is an automated email from the ASF dual-hosted git repository.

fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot-examples.git

commit 1d3c77291b7b5d6e436dc4f41aece2e6044e0122
Author: Croway <federico.mariani.1...@gmail.com>
AuthorDate: Wed Jun 12 13:05:18 2024 +0200

    Bean configuration via HashiCorp Vault example
---
 README.adoc                                        |   4 +-
 pom.xml                                            |   1 +
 vault/img/secret-database.png                      | Bin 0 -> 48269 bytes
 vault/pom.xml                                      | 128 +++++++++++++++++++++
 vault/readme.adoc                                  |  49 ++++++++
 .../spring/vault/CamelSpringVaultApplication.java  |  29 +++++
 vault/src/main/resources/application.properties    |  27 +++++
 vault/src/main/resources/camel/cars-api.yaml       |  28 +++++
 .../src/main/resources/camel/cars-datasource.yaml  |  25 ++++
 vault/src/main/resources/camel/cars-routes.yaml    |  71 ++++++++++++
 10 files changed, 361 insertions(+), 1 deletion(-)

diff --git a/README.adoc b/README.adoc
index 05af9df..aebb215 100644
--- a/README.adoc
+++ b/README.adoc
@@ -27,7 +27,7 @@ readme's instructions.
 === Examples
 
 // examples: START
-Number of Examples: 57 (0 deprecated)
+Number of Examples: 58 (0 deprecated)
 
 [width="100%",cols="4,2,4",options="header"]
 |===
@@ -150,6 +150,8 @@ Number of Examples: 57 (0 deprecated)
 | link:jira/README.adoc[Jira] (jira) | SaaS | An example that uses Jira Camel 
API
 
 | link:twitter-salesforce/README.adoc[Twitter Salesforce] (twitter-salesforce) 
| SaaS | Twitter mentions is created as contacts in Salesforce
+
+| link:vault/README.adoc[HashiCorp Vault] (vault) | Bean Configuration | 
Configure a DataSource using HashiCorp Vault
 |===
 // examples: END
 
diff --git a/pom.xml b/pom.xml
index 2c6661d..55716ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -92,6 +92,7 @@
                <module>widget-gadget</module>
                <module>azure</module>
                <module>variables</module>
+               <module>vault</module>
     </modules>
 
        <properties>
diff --git a/vault/img/secret-database.png b/vault/img/secret-database.png
new file mode 100644
index 0000000..20e93d2
Binary files /dev/null and b/vault/img/secret-database.png differ
diff --git a/vault/pom.xml b/vault/pom.xml
new file mode 100644
index 0000000..03b80d3
--- /dev/null
+++ b/vault/pom.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"; 
xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.apache.camel.springboot.example</groupId>
+               <artifactId>examples</artifactId>
+               <version>4.7.0-SNAPSHOT</version>
+       </parent>
+
+       <artifactId>camel-example-spring-boot-vault</artifactId>
+       <name>Camel SB Examples :: HashiCorp Vault</name>
+       <description>Camel bean definition, JDBC DataSource connection, using 
HashiCorp Vault</description>
+
+       <properties>
+               <category>Bean Configuration</category>
+               
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+               
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+       </properties>
+
+
+       <dependencyManagement>
+               <dependencies>
+                       <!-- Camel BOM -->
+                       <dependency>
+                               <groupId>org.apache.camel.springboot</groupId>
+                               <artifactId>camel-spring-boot-bom</artifactId>
+                               <version>${project.version}</version>
+                               <type>pom</type>
+                               <scope>import</scope>
+                       </dependency>
+                       <!-- Spring Boot BOM -->
+                       <dependency>
+                               <groupId>org.springframework.boot</groupId>
+                               
<artifactId>spring-boot-dependencies</artifactId>
+                               <version>${spring-boot-version}</version>
+                               <type>pom</type>
+                               <scope>import</scope>
+                       </dependency>
+               </dependencies>
+       </dependencyManagement>
+
+
+       <dependencies>
+
+               <!-- Spring Boot -->
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-web</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-actuator</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-jdbc</artifactId>
+               </dependency>
+
+               <!-- Camel -->
+               <dependency>
+                       <groupId>org.apache.camel.springboot</groupId>
+                       <artifactId>camel-spring-boot-starter</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel.springboot</groupId>
+                       <artifactId>camel-platform-http-starter</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel.springboot</groupId>
+                       <artifactId>camel-spring-jdbc-starter</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel.springboot</groupId>
+                       <artifactId>camel-hashicorp-vault-starter</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel.springboot</groupId>
+                       <artifactId>camel-yaml-dsl-starter</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel.springboot</groupId>
+                       <artifactId>camel-jsonpath-starter</artifactId>
+               </dependency>
+
+               <!-- db driver -->
+               <dependency>
+                       <groupId>org.postgresql</groupId>
+                       <artifactId>postgresql</artifactId>
+               </dependency>
+       </dependencies>
+
+       <build>
+               <defaultGoal>spring-boot:run</defaultGoal>
+               <plugins>
+                       <plugin>
+                               <groupId>org.springframework.boot</groupId>
+                               
<artifactId>spring-boot-maven-plugin</artifactId>
+                               <version>${spring-boot-version}</version>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>repackage</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                       </plugin>
+               </plugins>
+       </build>
+</project>
diff --git a/vault/readme.adoc b/vault/readme.adoc
new file mode 100644
index 0000000..265e9b0
--- /dev/null
+++ b/vault/readme.adoc
@@ -0,0 +1,49 @@
+== Camel Example HashiCorp Vault
+
+This example shows how `camel-hashicorp-vault` can be used to configure beans 
using data from HashiCorp Vault
+
+=== How to run
+Run HashiCorp Vault
+
+    docker run --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' -e 
'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' -p 8200:8200 hashicorp/vault:1.16.1`
+
+Go to `http://localhost:8200/ui/vault/secrets/secret/kv/list` login with 
method Token and token `myroot` and create the following secrets:
+
+* a secret named `myDatabase`
+* a secret data `myPassword` with value `mysecretpassword`
+* a secret data `myUsername` with value `postgres`
+* a secret data `myJdbcURL` with value 
`jdbc:postgresql://localhost:5432/postgres`
+
+image::img/secret-database.png[]
+
+Run the database container
+
+    docker run -p 5432:5432 --name some-postgres -e 
POSTGRES_PASSWORD=mysecretpassword postgres
+
+You can run this example using
+
+    mvn spring-boot:run
+
+To execute the routes:
+
+1. verify the table is empty (no data on response)
+
+    curl http://localhost:8080/api/cars
+
+2. insert data
+
+     curl --header "Content-Type: application/json" --request POST --data 
'{"brand": "Ford", "model": "Mustang", "year": 2024}' 
http://localhost:8080/api/cars
+
+3. verify the data has been persisted
+
+    curl http://localhost:8080/api/cars
+
+=== Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+https://camel.apache.org/support.html[let us know].
+
+We also love contributors, so
+https://camel.apache.org/contributing.html[get involved] :-)
+
+The Camel riders!
diff --git 
a/vault/src/main/java/org/apache/camel/example/spring/vault/CamelSpringVaultApplication.java
 
b/vault/src/main/java/org/apache/camel/example/spring/vault/CamelSpringVaultApplication.java
new file mode 100644
index 0000000..8dc0929
--- /dev/null
+++ 
b/vault/src/main/java/org/apache/camel/example/spring/vault/CamelSpringVaultApplication.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.example.spring.vault;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+public class CamelSpringVaultApplication {
+
+       public static void main(String[] args) {
+               SpringApplication.run(CamelSpringVaultApplication.class, args);
+       }
+}
diff --git a/vault/src/main/resources/application.properties 
b/vault/src/main/resources/application.properties
new file mode 100644
index 0000000..36539e8
--- /dev/null
+++ b/vault/src/main/resources/application.properties
@@ -0,0 +1,27 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+camel.main.name = camel-spring-boot-vault-example
+
+# Camel Vault properties configuration
+camel.vault.hashicorp.token = myroot
+camel.vault.hashicorp.host = localhost
+camel.vault.hashicorp.port = 8200
+camel.vault.hashicorp.scheme = http
+
+# YAML DSL configuration
+camel.main.routes-include-pattern=camel/*.yaml
diff --git a/vault/src/main/resources/camel/cars-api.yaml 
b/vault/src/main/resources/camel/cars-api.yaml
new file mode 100644
index 0000000..2a3c64d
--- /dev/null
+++ b/vault/src/main/resources/camel/cars-api.yaml
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+- rest:
+    path: api
+    get:
+      - path: cars
+        to: direct:get
+        produces: text/plain
+    post:
+      - path: cars
+        to: direct:create
+        consumes: application/json
+        produces: text/plain
diff --git a/vault/src/main/resources/camel/cars-datasource.yaml 
b/vault/src/main/resources/camel/cars-datasource.yaml
new file mode 100644
index 0000000..746c969
--- /dev/null
+++ b/vault/src/main/resources/camel/cars-datasource.yaml
@@ -0,0 +1,25 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+- beans:
+    - name: datasource
+      type: org.springframework.jdbc.datasource.DriverManagerDataSource
+      properties:
+        driverClassName: 'org.postgresql.Driver'
+        url: '{{hashicorp:secret:database/myJdbcURL}}'
+        username: '{{hashicorp:secret:database/myUsername}}'
+        password: '{{hashicorp:secret:database/myPassword}}'
diff --git a/vault/src/main/resources/camel/cars-routes.yaml 
b/vault/src/main/resources/camel/cars-routes.yaml
new file mode 100644
index 0000000..8d7e207
--- /dev/null
+++ b/vault/src/main/resources/camel/cars-routes.yaml
@@ -0,0 +1,71 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Create database route at startup
+- route:
+    from:
+      uri: timer
+      parameters:
+        timerName: create-database
+        fixedRate: false
+        repeatCount: "1"
+      steps:
+        - setBody:
+            expression:
+              constant:
+                expression: |-
+                  CREATE TABLE IF NOT EXISTS cars (
+                    brand VARCHAR(255),
+                    model VARCHAR(255),
+                    year INT
+                  );
+        - to:
+            uri: jdbc
+            parameters:
+              dataSourceName: datasource
+# Add car
+- route:
+    from:
+      uri: direct
+      parameters:
+        name: create
+      steps:
+        - setBody:
+            expression:
+              simple:
+                expression: >-
+                  INSERT INTO cars (brand, model, year)
+                  VALUES ('${jsonpath($.brand)}', '${jsonpath($.model)}', 
${jsonpath($.year)});
+        - to:
+            uri: jdbc
+            parameters:
+              dataSourceName: datasource
+# Get all cars
+- route:
+    from:
+      uri: direct
+      parameters:
+        name: get
+      steps:
+        - setBody:
+            expression:
+              simple:
+                expression: SELECT * FROM cars
+        - to:
+            uri: jdbc
+            parameters:
+              dataSourceName: datasource

Reply via email to