CamelTestSupport читает заполнители из файла yml

Я пытаюсь проверить свои верблюжьи маршруты с помощью CamelTestSupport. У меня есть маршруты, определенные в таком классе

public class ActiveMqConfig{

@Bean
public RoutesBuilder route() {
    return new SpringRouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("activemq:{{push.queue.name}}").to("bean:PushEventHandler?method=handlePushEvent");
        }
    };
}

}

И мой тестовый класс выглядит так

@RunWith(SpringRunner.class)
public class AmqTest extends CamelTestSupport {

@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
    return new ActiveMqConfig().route();
}

@Override
protected Properties useOverridePropertiesWithPropertiesComponent() {
    Properties properties = new Properties();
    properties.put("pim2.push.queue.name", "pushevent");
    return properties;
}

protected Boolean ignoreMissingLocationWithPropertiesComponent() {
    return true;
}

@Mock
private PushEventHandler pushEventHandler;

@BeforeClass
public static void setUpClass() throws Exception {
    BrokerService brokerSvc = new BrokerService();
    brokerSvc.setBrokerName("TestBroker");
    brokerSvc.addConnector("tcp://localhost:61616");
    brokerSvc.setPersistent(false);
    brokerSvc.setUseJmx(false);
    brokerSvc.start();
}

@Override
protected JndiRegistry createRegistry() throws Exception {
    JndiRegistry jndi = super.createRegistry();
    MockitoAnnotations.initMocks(this);
    jndi.bind("pushEventHandler", pushEventHandler);

    return jndi;
}

@Test
public void testConfigure() throws Exception {
    template.sendBody("activemq:pushevent", "HelloWorld!");
    Thread.sleep(2000);
    verify(pushEventHandler, times(1)).handlePushEvent(any());
}}

Это работает отлично. Но я должен установить заполнитель {{push.queue.name}} с помощью useOverridePropertiesWithPropertiesComponent функция. Но я хочу, чтобы это читалось из моего файла.yml.
Я не могу это сделать. Может кто-нибудь подсказать.

Спасибо

2 ответа

Спасибо, Клаус.
Я сделал это, сделав это

@Override
    protected Properties useOverridePropertiesWithPropertiesComponent() {
        YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
        try {
            PropertySource<?> applicationYamlPropertySource = loader.load(
                "properties", new ClassPathResource("application.yml"),null);
            Map source = ((MapPropertySource) applicationYamlPropertySource).getSource();
            Properties properties = new Properties();
            properties.putAll(source);
            return properties;
        } catch (IOException e) {
            LOG.error("Config file cannot be found.");
        }

        return null;
    }

Свойства обычно читаются из файлов.properties. Но вы можете написать код, который читает файл yaml в useOverridePropertiesWithPropertiesComponent метод и положить их в Properties экземпляр, который возвращается.

Другие вопросы по тегам