J'ai un projet Spring Boot + Apache Camel qui fonctionne avec brio. Je viens d'ajouter un nouveau bean si je voulais que sa mise en œuvre soit spécifique au profil. Je créé des tests de printemps pour le vérifier, et il fonctionne comme prévu, mais quand je lance le serveur je reçois la trace de la pile suivante:@Profile Spring Annotation en Camel
Caused by: org.apache.camel.NoSuchBeanException: No bean could be found in the registry for: MyFancyBean at org.apache.camel.component.bean.RegistryBean.getBean(RegistryBean.java:94) at org.apache.camel.model.language.MethodCallExpression.createExpression(MethodCallExpression.java:196) at org.apache.camel.model.language.MethodCallExpression.createPredicate(MethodCallExpression.java:210) at org.apache.camel.model.language.ExpressionDefinition.createPredicate(ExpressionDefinition.java:148) at org.apache.camel.model.ValidateDefinition.createProcessor(ValidateDefinition.java:63) at org.apache.camel.model.ValidateDefinition.createProcessor(ValidateDefinition.java:35) at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:545) at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:506) at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:222) at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1068)
j'ai une interface et deux implémentations:
public interface MyFancyBean { ... }
public class FooFancyBean implements MyFancyBean { ... }
public class NonFooFancyBean implements MyFancyBean { ... }
Selon sur le profil, le bean correct est lu instancié:
@Configuration
public class AppConfig {
@Bean
@Profile("foo")
MyFancyBean fooBean() {
return new FooFancyBean();
}
@Bean
@Profile("!foo")
MyFancyBean nonFooBean() {
return new NonFooFancyBean();
}
}
J'ai vérifié que cela fonctionne de plusieurs façons. Tout d'abord, un couple de tests:
@ActiveProfiles("anything-but-foo")
@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan(basePackages = {"com.example", "com.jtv.spring.boot"})
@EnableAutoConfiguration
@Component
public class NonFooBean_SpringTest {
@Autowired
private MyFancyBean bean;
@Test
// ... here "bean" is instantiated as "NonFooFancyBean"
Ainsi, le test fonctionne.
En outre, lorsque je démarre mon application, en fonction du profil, le bean correct de ma classe @Configuration ci-dessus est appelé.
Mais Camel est toujours en colère et dit "NoSuchBeanException" au démarrage.
FWIW, voici comment je fais référence la fève:
@Component
public class MyCamelRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// [...]
from("direct:processStuff").
validate().method("MyFancyBean").
process("MyProcessor");
}
}
Comment puis-je obtenir Camel pour honorer cette config?
(Il ne faut pas répondre à ma propre question pendant deux jours ... ce qui est à ce sujet?) – inanutshellus
Hehe .. canard en caoutchouc. – Pytry