私は春のブート+ Apache Camelのプロジェクトが素晴らしいです。私は新しいBeanを追加したばかりですが、実装をプロファイル固有のものにしたいと思っていました。私はそれを確認するために、春のテストを作成し、期待どおりに動作しますが、私は次のスタックトレースを取得し、サーバーで実行する場合:@Profileキャメルの春の注釈
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)
を私はインターフェイスと2つの実装を持っている:
public interface MyFancyBean { ... }
public class FooFancyBean implements MyFancyBean { ... }
public class NonFooFancyBean implements MyFancyBean { ... }
によってはプロファイル上で、正しいBeanがインスタンス化されて読み込まれます。
@Configuration
public class AppConfig {
@Bean
@Profile("foo")
MyFancyBean fooBean() {
return new FooFancyBean();
}
@Bean
@Profile("!foo")
MyFancyBean nonFooBean() {
return new NonFooFancyBean();
}
}
これはいくつかの点で有効です。まず、いくつかのテスト:
@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"
このようにテストが機能します。
さらに、私のアプリを起動すると、プロファイルに応じて、上記の@Configurationクラスの正しいBeanが呼び出されます。
しかし、キャメルはまだ怒っており、起動時に "NoSuchBeanException"と表示されます。
FWIWは、ここで私は、Beanを参照しています方法は次のとおりです。
@Component
public class MyCamelRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
// [...]
from("direct:processStuff").
validate().method("MyFancyBean").
process("MyProcessor");
}
}
私はキャメル、この設定を尊重してもらうにはどうすればよいですか?
を(2日間自分の質問に答えることを許可されていません...に関することは何でしょうか) – inanutshellus
ふふ..ゴムダッキー。 – Pytry