[[influxdb-component]]
= InfluxDB Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-influxdb/src/main/docs/influxdb-component.adoc
:docTitle: InfluxDB
:artifactId: camel-influxdb
:description: Interact with InfluxDB, a time series database.
:since: 2.18
:supportLevel: Stable
:component-header: Only producer is supported

*Since Camel {since}*

*{component-header}*

This component allows you to interact with InfluxDB
https://influxdata.com/time-series-platform/influxdb/ a time series database. The native body type for this component is
Point (the native influxdb class), but it can also accept Map<String, Object> as message body and it will get converted
to Point.class, please note that the map must contain an element with InfluxDbConstants.MEASUREMENT_NAME as key.

Aditionally of course you may register your own Converters to your data type to Point, or use the
(un)marshalling tools provided by camel.


Influxdb component requires at least Java 8.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-influxdb</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
-------------------------------
influxdb://beanName?[options]
-------------------------------

== URI Options

The producer allows sending messages to a influxdb
configured in the registry, using the native java driver.



// component options: START
The InfluxDB component supports 3 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *influxDB* (producer) | The shared Influx DB to use for all endpoints |  | InfluxDB
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END




// endpoint options: START
The InfluxDB endpoint is configured using URI syntax:

----
influxdb:connectionBean
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *connectionBean* | *Required* Connection to the influx database, of class InfluxDB.class |  | String
|===


=== Query Parameters (8 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *batch* (producer) | Define if this operation is a batch operation or not | false | boolean
| *databaseName* (producer) | The name of the database where the time series will be stored |  | String
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *operation* (producer) | Define if this operation is an insert or a query | insert | String
| *query* (producer) | Define the query in case of operation query |  | String
| *retentionPolicy* (producer) | The string that defines the retention policy to the data created by the endpoint | default | String
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END


== Example

Below is an example route that stores a point into the db (taking the db name from the URI)
specific key:

[source,java]
------------------------------------------------------------------------------------
from("direct:start")
        .setHeader(InfluxDbConstants.DBNAME_HEADER, constant("myTimeSeriesDB"))
        .to("influxdb://connectionBean);
------------------------------------------------------------------------------------

[source,java]
------------------------------------------------------------------------------------
from("direct:start")
        .to("influxdb://connectionBean?databaseName=myTimeSeriesDB");
------------------------------------------------------------------------------------

For more information, see these resources...


include::camel-spring-boot::page$influxdb-starter.adoc[]
