There's a also the following unit-test which should make the idea below clear to you (check the custom MyCustomResolver implementation):
https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesResolverTest.java Babak Babak Vahdat wrote > You can make use of the other PropertiesComponent method to pass over an > array of locations upfront: > > PropertiesComponent.setLocations(String[] locations) > > So given your code example it would become: > > PropertiesComponent pc = new PropertiesComponent(); > pc.setLocations(new String[] {"classpath:settings.properties", > "classpath:com/mycompany/dynamic.properties"}); > context.addComponent("properties", pc); > > That said I think a better approach, instead of creating a new properties > file on the fly and passing it over to PropertiesComponent as above, is to > implement your own: > > org.apache.camel.component.properties.PropertiesResolver > > That's this method signature: > > Properties resolveProperties(CamelContext context, boolean > ignoreMissingLocation, String... uri) throws Exception; > > For which you can extend a pre-existing implementation: > > org.apache.camel.component.properties.DefaultPropertiesResolver > > And just override the resolveProperties() method of super in that you call > super.resolveProperties() and then add the *dynamic* key/value pairs you > read from the DB to the properties being returned. > > And then the resulting code would somehow look like: > > PropertiesComponent pc = new PropertiesComponent(); > pc.setPropertiesResolver(new MyPropertiesResolver()) > pc.setLocation("classpath:settings.properties"); > context.addComponent("properties", pc); > > And of course the same wiring in Java code above can be achieved using > Spring IoC as well. > > Babak > salemi wrote >> Hi Babak, >> >> Thank you for your quick respond. We tried the approach to override a >> property at the run time. It seem like if you set the uri attribute for >> the >> <from> >> element then it become immutable! >> >> In our example we have defined the following elements in the camel >> context file >> <bean id="bridgePropertyPlaceholder" >> class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer" > >> >> <property name="location" value="classpath:settings.properties"/> >> </bean> >> >> <route id="routeTypeName" autoStartup="false" > >> >> <from uri="{{type}}.{{name}}.{{dynamic}}"/> >> In the settings.properties we define: >> type=type >> name=name >> >> When camel comes up we retrieve the value for dynamic from db. Are you >> proposing to create a new file on the fly and add the name and value to >> the file? >> >> PropertiesComponent pc = new PropertiesComponent(); >> pc.setLocation("classpath:com/mycompany/dynamic.properties"); >> context.addComponent("properties", pc); >> >> My developer tried to overwrite the existing values of a property using >> using a JVM System Property and he told me he can't get it to work. -- View this message in context: http://camel.465427.n5.nabble.com/dynamicly-change-the-url-of-the-from-element-after-the-camelcontext-is-started-tp5740599p5740620.html Sent from the Camel - Users mailing list archive at Nabble.com.
