Свойства Spring Boot в Camel-маршруте или конфигурации конечной точки - PullRequest
1 голос
/ 02 марта 2020

Я новичок в Верблюд и учусь, как я go. Кажется, есть много возможных способов обмена информацией между некоторыми платформами (например, Spring Boot) и Camel. Мне трудно понять, как (или даже , если ) сделать это из свойств Spring Boot. Под этим я подразумеваю application.properties или application.yml.

Следующий пункт SO ( Использование свойств Spring Boot в Apache Camel route ) задает очень похожий вопрос, но ответы на этот вопрос не похоже на работу. Признаюсь, я не совсем понимаю последний ответ.

Так что я пытаюсь сделать? Так как я все еще новичок в Camel, я делаю что-то действительно простое и простое. У меня есть очень маленькое приложение Spring Boot, которое использует Camel для простого копирования файла из одного места в другое.

Вот мой маршрут:

src / main / java / mypackage / CopyFileRoute. java:

@Component
public class CopyFileRoute extends RouteBuilder {

  @Override
  //@formatter:off
  public void configure() throws Exception {
    this
    .from("file:{{properties.source-path}}/{{properties.file-name}}?noop=true")
    .to("file:{{properties.dest-path}}/{{properties.file-name}}");
  }
  //@formatter:on

}

src / main / resources / application.yml:

properties:
  source-path: demo/copyFrom
  dest-path: demo/copyTo
  file-name: test.txt

Я читал о замене свойств (или заполнителях) в руководстве пользователя Camel ( https://camel.apache.org/manual/latest/using-propertyplaceholder.html и https://camel.apache.org/components/latest/properties-component.html), но не может заставить его работать. Конечно, примеры в руководстве пользователя находятся в конфигурации XML, где я делаю это в конфигурации Java. Разве это не работает в Java коде?

Кстати, я пытался включить свойство Camel "bridge" (BridgePropertyPlaceholderConfigurer), но это тоже не работает. Я не уверен как я должен его использовать.

ОБНОВЛЕНИЕ :

Я попробовал следующее с "мостом", но, увы, это тоже не работает:

@Configuration
@ComponentScan("mypackage")
public class Configurer {

  @Bean
  public CamelContext camelContext() {
    return new DefaultCamelContext();
  }

  @Bean
  public BridgePropertyPlaceholderConfigurer bridgePropertyPlaceholder() {
    BridgePropertyPlaceholderConfigurer bridge = new BridgePropertyPlaceholderConfigurer();
    bridge.setLocation(new ClassPathResource("application.properties"));
    return bridge;
  }

}

1 Ответ

1 голос
/ 02 марта 2020

С помощью Java DSL вы можете сделать это

для версии Camel 2.xx

@Override
    protected CamelContext createCamelContext() throws Exception {
        CamelContext context = super.createCamelContext();
        context.addComponent("properties", new PropertiesComponent("file:C:\\Your\\path\\application.properties"));
        return context;
    }

или для версии 3.xx

@Override
    protected CamelContext createCamelContext() throws Exception {
        CamelContext context = super.createCamelContext();
        PropertiesComponent pc = context.getPropertiesComponent();
        pc.setLocation("classpath:org/apache/camel/component/properties/myproperties.properties");
        return context;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...