简体   繁体   中英

Camel read properties file

How do I configure the use of a properties file using Java DSL and the Main object?

According to this page I should be able to call something like:

main.setPropertyPlaceholderLocations("example.properties");

However that simply doesn't work. It seems that option wasn't added until Camel 2.18 and I'm running 2.17.1.

What was the original way to set a properties file to use when letting the application run in a standalone form?

Some backstory:

I'm trying to convert from Spring to Java DSL. During that conversion I was attempting to have my Camel application run on its own. I know that is achieved using main.run(); .

I had things "functioning" when using the CamelContext, but that cannot run on its own. So I know using the following will work in that case:

PropertiesComponent pc = new PropertiesComponent();
pc.setLocation("classpath:/myProperties.properties");
context.addComponent("properties", pc);

Is there some way I can tell the main to use that setup? Or is there something else needed?

You can use the following snippet:

PropertiesComponent pc = new PropertiesComponent();
pc.setLocation("classpath:/myProperties.properties");
main.getCamelContexts().get(0).addComponent("properties", pc);

Also, if you are using camel-spring , you could use org.apache.camel.spring.Main class, it should use the property placeholder from your application context.

Since you are mentioning you are in the process to move from Spring XML to Java Config here's a minimum application that is using properties and injecting it into a Camel route (it's really properties management in Spring injected into our Camel route bean):

my.properties :

something=hey!

Main class :

package camelspringjavaconfig;

import org.apache.camel.spring.javaconfig.CamelConfiguration;
import org.apache.camel.spring.javaconfig.Main;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@ComponentScan("camelspringjavaconfig")
@PropertySource("classpath:my.properties")
public class MyApplication extends CamelConfiguration {

    public static void main(String... args) throws Exception {
        Main main = new Main();
        main.setConfigClass(MyApplication.class);  // <-- passing to the Camel Main the class serving as our @Configuration context
        main.run();   // <-- never teminates
    }
}

MyRoute class :

package camelspringjavaconfig;

import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
public class MyRoute extends RouteBuilder {

    @Autowired
    Environment env;   //<-- we are wiring the Spring Env

    @Override
    public void configure() throws Exception {

        System.out.println(env.getProperty("something"));  //<-- so that we can extract our property

        from("file://target/inbox")
                .to("file://target/outbox");
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM