If you’re willing to use camel-scr or camel-blueprint, you can make this happen 
pretty easily.

You’d expose the data source as a service, and then inject it into the route - 
the exact method would change based on whether you’re using camel-scr or 
camel-blueprint.

If you’re using camel-scr, when the service changes, the route will restart and 
pickup the new service.

If you’re using blueprint, the route should just switch to the new service - 
but you may get hit by https://issues.apache.org/jira/browse/CAMEL-9570.  If 
you do, you can put in a service registration listener to restart the route 
when the service changes as a temp fix.

> On Jun 1, 2016, at 10:36 PM, Atsushi Matsumoto <atsma...@yahoo-corp.jp> wrote:
> 
> Hi,
> 
> Is it possible to update datasource that SqlComponent refers to at runtime?
> The datasource I want to update is bound to "TestDB" by registry in 
> CamelContext as follows:
> 
> 
> BasicDataSource datasource = new BasicDataSource();
> datasource.setUrl("jdbc:mysql://hostname/dbname?user=user&password=password");
> registry.put("TestDB", datasource);
> 
> 
> DSL using the datasource is:
> 
> 
> <routes xmlns="http://camel.apache.org/schema/spring";>
>        <route>
>                <from uri="direct:hoge" />
>                <to uri="sql:SELECT * FROM test?dataSource=TestDB" />
>                <marshal>
>                        <json library="Jackson" />
>                </marshal>
>        </route>
> </routes>
> 
> 
> This DSL is successfully executed, the SQL returning right results.
> Next, I updated the datasource:
> 
> registry.put("TestDB", newDatasource);
> 
> Then I ran the DSL again, hoping that the DSL used the new datasource, but 
> the SQL used the old one.
> I think I can update the datasource if I run the DSL after doing removeRoute 
> and AddRoute, but I don't want to do removeRoute and AddRoute due to 
> performance cost.
> Are there any ways?

Reply via email to