2

定義する Mule 設定があります

<context:property-placeholder location="classpath:/mule-sw.properties"/>

また、フィールドの 1 つで @Lookup アノテーションを使用する Java のカスタム コンポーネント クラスもあります。

@Lookup("file-path")
private String path;

私の「mule-sw.properties」がこのようなものであると考える

file-path=C:/hello.txt

Mule アプリケーションを起動すると、常に Deploy Exception が発生します

org.mule.api.expression.RequiredValueException: "Required object not found in registry of Type "class java.lang.String" with name "file-path" on object "class component.CustomComponent"

また、 @Lookup("file-path") を @Lookup("${file-path}") で変更しようとしましたが、成功しませんでした。

誰でも私にもっと良い解決策を教えてもらえますか? どんな助けでも親切に感謝します。

ありがとう

4

2 に答える 2

7

@Lookup アノテーションは、レジストリからオブジェクトを取得するように設計されていますが、あなたがしようとしているのは、カスタム コンポーネントの属性に値を割り当てることです。

それには 2 つの方法があります。

1) プロパティ インジェクションを介して、つまり、次のようにコンポーネントを宣言します。

<custom-component class="org.myCompany.CustomComponent">
    <property name="file-path" value="${file-path}" />
</custom-component>

2) Spring EL サポートと @Value アノテーションを介して、つまり、次の方法で属性にアノテーションを付けます。

@Value("${file-path}")
private String path;

フローの観点から維持する方が簡単なので、最初のアプローチをお勧めします

于 2012-09-19T11:02:34.467 に答える
3
@Value("#{'${file-path}'}")
private String path;

これを試してみてください。正しく認識されるようにするには、EL ブロック #{} でラップする必要があると思います。

于 2012-12-10T21:54:34.007 に答える