diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
index a3facf5..4fdca6f 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
@@ -66,6 +66,7 @@
     private DataSource dataSource;
     private TransactionTemplate transactionTemplate;
     private TransactionTemplate transactionTemplateReadOnly;
+    private int propagationBehavior = TransactionDefinition.PROPAGATION_REQUIRED;
     private JdbcTemplate jdbcTemplate;
     private LobHandler lobHandler = new DefaultLobHandler();
     private String repositoryName;
@@ -95,7 +96,7 @@
     }
 
     /**
-     * @param repositoryName the repositoryName to set
+     * Sets the name of the repository
      */
     public final void setRepositoryName(String repositoryName) {
         this.repositoryName = repositoryName;
@@ -105,15 +106,15 @@
         this.transactionManager = transactionManager;
 
         transactionTemplate = new TransactionTemplate(transactionManager);
-        transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+        transactionTemplate.setPropagationBehavior(propagationBehavior);
 
         transactionTemplateReadOnly = new TransactionTemplate(transactionManager);
-        transactionTemplateReadOnly.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+        transactionTemplateReadOnly.setPropagationBehavior(propagationBehavior);
         transactionTemplateReadOnly.setReadOnly(true);
     }
 
     /**
-     * @param dataSource The DataSource to use for accessing the database
+     * Sets the DataSource to use for accessing the database
      */
     public final void setDataSource(DataSource dataSource) {
         this.dataSource = dataSource;
@@ -177,7 +178,6 @@
      * @param key            the correlation key
      * @param exchange       the aggregated exchange
      * @param repositoryName The name of the table
-     * @throws Exception
      */
     protected void update(final CamelContext camelContext, final String key, final Exchange exchange, String repositoryName) throws Exception {
         StringBuilder queryBuilder = new StringBuilder()
@@ -208,7 +208,6 @@
      * @param correlationId  the correlation key
      * @param exchange       the aggregated exchange to insert. The headers will be persisted but not the properties.
      * @param repositoryName The name of the table
-     * @throws Exception
      */
     protected void insert(final CamelContext camelContext, final String correlationId, final Exchange exchange, String repositoryName) throws Exception {
         // The default totalParameterIndex is 2 for ID and Exchange. Depending on logic this will be increased
@@ -380,8 +379,6 @@
     /**
      *  If recovery is enabled then a background task is run every x'th time to scan for failed exchanges to recover
      *  and resubmit. By default this interval is 5000 millis.
-     * @param interval  the interval
-     * @param timeUnit  the time unit
      */
     public void setRecoveryInterval(long interval, TimeUnit timeUnit) {
         this.recoveryInterval = timeUnit.toMillis(interval);
@@ -400,9 +397,8 @@
     }
 
     /**
-     *
-     * @param useRecovery Whether or not recovery is enabled. This option is by default true. When enabled the Camel
-     *                    Aggregator automatic recover failed aggregated exchange and have them resubmittedd
+     * Whether or not recovery is enabled. This option is by default true. When enabled the Camel
+     * Aggregator automatic recover failed aggregated exchange and have them resubmitted.
      */
     public void setUseRecovery(boolean useRecovery) {
         this.useRecovery = useRecovery;
@@ -421,11 +417,9 @@
     }
 
     /**
-     *
-     * @param deadLetterUri  An endpoint uri for a Dead Letter Channel where exhausted recovered Exchanges will be
-     *                       moved. If this option is used then the maximumRedeliveries option must also be provided.
-     *                       Important note : if the deadletter route throws an exception, it will be send again to DLQ
-     *                       until it succeed !
+     * An endpoint uri for a Dead Letter Channel where exhausted recovered Exchanges will be
+     * moved. If this option is used then the maximumRedeliveries option must also be provided.
+     * Important note : if the deadletter route throws an exception, it will be send again to DLQ until it succeed !
      */
     public void setDeadLetterUri(String deadLetterUri) {
         this.deadLetterUri = deadLetterUri;
@@ -436,10 +430,8 @@
     }
 
     /**
-     *
-     * @param returnOldExchange Whether the get operation should return the old existing Exchange if any existed.
-     *                          By default this option is false to optimize as we do not need the old exchange when
-     *                          aggregating
+     * Whether the get operation should return the old existing Exchange if any existed.
+     * By default this option is false to optimize as we do not need the old exchange when aggregating.
      */
     public void setReturnOldExchange(boolean returnOldExchange) {
         this.returnOldExchange = returnOldExchange;
@@ -456,6 +448,7 @@
     /**
      * Allows to store headers as String which is human readable. By default this option is disabled,
      * storing the headers in binary format.
+     *
      * @param headersToStoreAsText the list of headers to store as String
      */
     public void setHeadersToStoreAsText(List<String> headersToStoreAsText) {
@@ -463,9 +456,8 @@
     }
 
     /**
-     *
-     * @param storeBodyAsText Whether to store the message body as String which is human readable.
-     *                        By default this option is false storing the body in binary format.
+     * Whether to store the message body as String which is human readable.
+     * By default this option is false storing the body in binary format.
      */
     public void setStoreBodyAsText(boolean storeBodyAsText) {
         this.storeBodyAsText = storeBodyAsText;
@@ -479,15 +471,24 @@
         this.allowSerializedHeaders = allowSerializedHeaders;
     }
 
-   /**
-     * @return the lobHandler
+    public int getPropagationBehavior() {
+        return propagationBehavior;
+    }
+
+    /**
+     * Sets propagation behavior to use with spring transaction template which are used for database access.
+     * The default is TransactionDefinition.PROPAGATION_REQUIRED.
      */
+    public void setPropagationBehavior(int propagationBehavior) {
+        this.propagationBehavior = propagationBehavior;
+    }
+
     public LobHandler getLobHandler() {
         return lobHandler;
     }
 
     /**
-     * @param lobHandler the lobHandler to set
+     * Sets a custom LobHandler to use
      */
     public void setLobHandler(LobHandler lobHandler) {
         this.lobHandler = lobHandler;
