// spring-boot-auto-configure options: START
:page-partial:
:doctitle: Camel Spring Boot Starter for jasypt

== Spring Boot Auto-Configuration

When using jasypt with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

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


The component supports 6 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.jasypt.enabled* | Enable the component | true | Boolean
| *camel.component.jasypt.algorithm* | The algorithm to be used for decryption. | PBEWithMD5AndDES | String
| *camel.component.jasypt.iv-generator-class-name* | The initialization vector (IV) generator applied in decryption operations. | org.jasypt.iv.NoIvGenerator if the algorithm does not require an initialization vector, org.jasypt.iv.RandomIvGenerator otherwise | String
| *camel.component.jasypt.salt-generator-class-name* | The salt generator applied in decryption operations. | org.jasypt.salt.RandomSaltGenerator | String
| *camel.component.jasypt.password* | The master password used by Jasypt for decrypting the values. This option supports prefixes which influence the master password lookup behaviour: sysenv: means to lookup the OS system environment with the given key. sys: means to lookup a JVM system property. |  | String
| *camel.component.jasypt.provider-name* | The name of the security provider to be used for obtaining the encryption algorithm. |  | String
|===
// spring-boot-auto-configure options: END
