Apache camel 使用apachecamel从数据库获取blob数据

Apache camel 使用apachecamel从数据库获取blob数据,apache-camel,Apache Camel,我尝试使用camel(2.15.1)从数据库中获取一个blob。数据大小约为20MB。这是我的路线: <route streamCache="true"> <from uri="file://c:/tmp/trigger" /> <to uri="jdbc:datasourceCosima" /> <log message="done 1."/> <to uri="direct:a" /> </ro

我尝试使用camel(2.15.1)从数据库中获取一个blob。数据大小约为20MB。这是我的路线:

<route streamCache="true">
    <from uri="file://c:/tmp/trigger" />
    <to uri="jdbc:datasourceCosima" />
    <log message="done 1."/>
    <to uri="direct:a" />
</route>

<route streamCache="true">
    <from uri="direct:a" />
    <to uri="file:blobdata" />
    <log message="done 2."/>
</route>
我认为
streamCache
可以完成这项工作,并将数据缓存到光盘或其他任何地方


所以问题是:如何将blob数据从数据库中获取到文件中而不受大小限制?

您正在尝试将
java.util.ArrayList
保存到文件中。可能问题在于隐式数据类型转换。尝试将
输出类型设置为
流列表
@Ralf:据我所知,jdbc组件从数据库获取数据并创建
数组列表。如何将其更改为
StreamList
jdbc:datasourceCosima?outputType=StreamList
[2016-02-18 12:44:15.539] INFO: org.apache.camel.util.CamelLogger log - done 1. 
[2016-02-18 12:44:16.553] SEVERE: org.apache.camel.util.CamelLogger log - Failed delivery for (MessageId: ID-GHD13044-49732-1455793836517-2-2382 on ExchangeId: ID-GHD13044-49732-1455793836517-2-2381). Exhausted after delivery attempt: 1 caught: org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[org.apache.camel.component.file.GenericFileMessage@7a0613]

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route9            ] [route9            ] [file://c:/tmp/trigger                                                         ] [      1635]
[route9            ] [to13              ] [jdbc:datasourceCosima                                                         ] [       822]
[route9            ] [log12             ] [log                                                                           ] [         1]
[route9            ] [to14              ] [direct:a                                                                      ] [       813]
[route10           ] [to15              ] [file:blobdata                                                                 ] [       812]

Exchange
---------------------------------------------------------------------------------------------------------------------------------------
Exchange[
    Id                  ID-GHD13044-49732-1455793836517-2-2381
    ExchangePattern     InOnly
    Headers             {breadcrumbId=ID-GHD13044-49732-1455793836517-2-2380, CamelFileAbsolute=true, CamelFileAbsolutePath=c:\tmp\trigger\select.txt, CamelFileContentType=null, CamelFileLastModified=1455793414658, CamelFileLength=179, CamelFileName=select.txt, CamelFileNameConsumed=select.txt, CamelFileNameOnly=select.txt, CamelFileParent=c:\tmp\trigger, CamelFilePath=c:\tmp\trigger\select.txt, CamelFileRelativePath=select.txt, CamelJdbcColumnNames=[bls_data], CamelJdbcRowCount=1, CamelRedelivered=false, CamelRedeliveryCounter=0}
    BodyType            java.util.ArrayList
    Body                [{bls_data=255044462D312E360D25E2E3CFD30D0A3...
]

Stacktrace
--------------------------------------------------------------------------------------------------------------------------------------- 
org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[org.apache.camel.component.file.GenericFileMessage@7a0613]
    at org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1635)
    at org.apache.camel.impl.DefaultExchange.setException(DefaultExchange.java:308)
    at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:64)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:51)
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129)
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
    at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:433)
    at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:211)
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:175)
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.OutOfMemoryError: Java heap space