2017-10-19 6 views
0

私は春のブート+ 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"); 
    } 


} 

私はキャメル、この設定を尊重してもらうにはどうすればよいですか?

答えて

1

ホワイエ...今日はrubber duckになります。私はそれを自力で出しました。 (これは、最初に私には発生しなかった理由は、私のプロセッサ、動作しません。)

@Component 
public class MyCamelRoute extends RouteBuilder { 
    @Override 
    public void configure() throws Exception { 
     // [...] 
     @Autowired MyFancyBean myFancyBean; 

     from("direct:processStuff"). 
     validate().method(myFancyBean). 
     process("MyProcessor"); 
    } 
} 
+0

を(2日間自分の質問に答えることを許可されていません...に関することは何でしょうか) – inanutshellus

+0

ふふ..ゴムダッキー。 – Pytry

関連する問題