---
schema_version: "1"
id: 22ccbf5d21bfbf48c9d4abe9c0863a320d464de9b53fba221ed11cbfde09ce50
title: 設定の上書き
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-sdk/1.1/config-override.md
canonical_url: https://docs.mulesoft.com/jp/mule-sdk/1.1/config-override
source_site: docs.mulesoft.com
content_type: documentation
content_hash: c00e23cc8237211084467776128ef2ed3a8ecdf481ecac5b5525cf9b4cf25c59
description: MuleSoft Documentation Site
release: "1.1"
latest: false
---
# 設定の上書き

_グローバルデフォルト_​​として機能する設定内のパラメーターでは、他の操作およびソースで使用されるデフォルト値または動作を指定します。そのパラメーターの値を上書きするアプリケーション内のコンポーネントの場合、​`@ConfigOverride`​ を使用できます。

## [](#設定の上書きとは)設定の上書きとは?

この機能は、ソースまたは操作からのパラメーターを設定内のパラメーターにバインドします。パラメーターに ​`@ConfigOverride`​ のアノテーションが付加されていて DSL でその値が指定されていない場合、​_完全に_​同じ名前のパラメーターの設定値が挿入されます。

`@ConfigOverride`​ アノテーションは、操作メソッドの引数またはソースの項目に適用できます。ただし、設定や接続には使用できません。

たとえば、設定内でパラメーターが次のように宣言されているとします。

```java
@Parameter
@Optional(defaultValue = "10")
int maxRetries;
```

また、上記の設定が次の操作で使用されているとします。

```java
public void request(@Config ConfigType config, @ConfigOverride int maxRetries)
  // ...
}
```

上記の ​`request`​ 操作の ​`maxRetries`​ パラメーターは、いくつかの方法でその値を受け取ることができます。

- `maxRetries`​ パラメーター設定で指定されたデフォルト値は、操作および設定 (下記の XML を参照) が ​`maxRetries`​ の値を​_提供しない_​ときに使用される。
    
    ```xml
    <extension:config name="sampleConfig">
    
    <flow name="requestFlow">
      <extension:request config-ref="sampleConfig">
    </flow>
    ```
    
    操作では、​`maxRetries`​ パラメーターは ​`10`​ のデフォルト値を取得します。
- 設定 (下記を参照) の ​`maxRetries`​ に指定された値は、パラメーターの値が操作で指定されず、設定内で明示的に指定されているときに使用される。
    
    ```xml
    <extension:config name="sampleConfig" maxRetries=2>
    
    <flow name="requestFlow">
       <extension:request config-ref="sampleConfig">
    </flow>
    ```
    
    操作では、​`maxRetries`​ は値 ​`2`​ を取得します。
- 操作の ​`maxRetries`​ パラメーターに指定された値は、このパラメーターが DSL に明示的に追加されたときに使用される。
    
    ```xml
    <extension:config name="sampleConfig" maxRetries=2>
    
    <flow name="requestFlow">
       <extension:request config-ref="sampleConfig" maxRetries=5>
    </flow>
    ```
    
    操作では、​`maxRetries`​ パラメーターは値 ​`5`​ を取得します。

この機能は、設定で指定された値を変更しません。設定値をパラメーターに挿入するか、指定された値を保持するだけです。

## [](#設定の上書き要件)設定の上書き要件

設定パラメーターを上書きするための要件はいくつかあります。

- 設定のパラメーターの名前と型は、​`@ConfigOverride`​ のアノテーションが付加されているものと同じ必要がある。
- 操作に ​`@ConfigOverride`​ のアノテーションが付加されたパラメーターがある場合、パラメーターとして対応する設定も含まれる必要がある。
- ソースに ​`@ConfigOverride`​ のアノテーションが付加された項目がある場合、項目として対応する設定も含まれる必要がある。

## [](#パラメーターグループ内の設定の上書きパラメーター)パラメーターグループ内の設定の上書きパラメーター

このアノテーションは、次のように設定内の ​`ParameterGroup`​ に属する ​`Parameter`​ を参照するためにも使用できます。

```java
public class ConfigType{

  @ParameterGroup(name = "Strategy")
  private RetryStrategy retryStrategy;

  // ... Parameter getters
}
```

```java
public class RetryStrategy{

  @Parameter
  private int maxRetries;

  @Parameter
  private String retriesExhaustedMessage;

  // ... Parameter getters
}
```

この操作は、​`RetryStrategy`​ クラス内の ​`maxRetries`​ を参照する ​`@ConfigOverride`​ を使用します。

```java
public void request(@Config ConfigType config, @ConfigOverride int maxRetries)
  // ...
}
```

## [](#pojo-を使用した設定の上書き)POJO を使用した設定の上書き

設定で、POJO であるパラメーターを上書きできます。操作またはソース内の POJO パラメーターのコンテンツは、設定によって完全に定義されるか、操作によって完全に定義されます。つまり、部分的に入力された POJO を定義し、残りの POJO に設定値が挿入されることは期待できません。

使用する値を決定するロジックは、単純な Java 型の場合と同じです。

## [](#デフォルト値のない設定パラメーター)デフォルト値のない設定パラメーター

省略可能な設定パラメーターにはデフォルト値がないため、​`@ConfigOverride`​ でそれを参照する操作またはソースパラメーターでは、その値はデフォルトで null になります。

次の例のパラメーターは、設定内で宣言されています。

```java
@Parameter
@Optional
private String retriesExhaustedMessage;
```

次の例では、操作に設定パラメーターと設定の上書きパラメーターがあります。

```java
public void request(@Config ConfigType config, @ConfigOverride String retriesExhaustedMessage)
  // ...
}
```

設定および操作で ​`retriesExhaustedMessage`​ が指定されていない場合、その値は null になります。

## [](#設定の上書き例)設定の上書き例

このセクションでは、​`@ConfigOverride`​ を使用した簡単な例を示します。

設定の定義は次のとおりです。

```java
@Configuration(name = "config")
@Operations({AmqpConsume.class, AmqpPublish.class, AmqpPublishConsume.class, })
public class AmqpConfig {

  @Parameter
  @Expression(NOT_SUPPORTED)
  @Optional(defaultValue = "*/*")
  private String contentType;


  @Expression(NOT_SUPPORTED)
  @ParameterGroup(name = "Consumer Config", showInDsl = true)
  private AmqpConsumerConfig consumerConfig;


  // ... All parameter getters

}
```

次の例では、​`AmqpConsumerConfig`​ クラスに ​`@ConfigOverride`​ アノテーションによって参照されるパラメーターがあります。

```java
public final class AmqpConsumerConfig {

  @Parameter
  @Optional(defaultValue = "IMMEDIATE")
  @Expression(NOT_SUPPORTED)
  private AckMode ackMode;

  @Parameter
  @Optional(defaultValue = "false")
  @Expression(NOT_SUPPORTED)
  private boolean noLocal;

  @Parameter
  @Optional(defaultValue = "false")
  @Expression(NOT_SUPPORTED)
  private boolean exclusiveConsumers;

  @Parameter
  @Optional(defaultValue = "4")
  @Expression(NOT_SUPPORTED)
  private int numberOfConsumers;

  // ... All parameter getters
}
```

次のソースには、​`AmqpConfig`​、および ​`ConfigOverride`​ アノテーションが付加されたパラメーターがあります。

```java
@Alias("listener")
@EmitsResponse
@MetadataScope(outputResolver = AmqpOutputResolver.class)
public class AmqpListener extends Source<Object, AmqpMessageAttributes> {


  @Connection
  private ConnectionProvider<AmqpTransactionalConnection> connectionProvider;

  private AmqpTransactionalConnection connection;

  @Config
  private AmqpConfig config; (1)

  @Parameter
  private String queueName;

  @Parameter
  @ConfigOverride
  private AckMode ackMode; (2)

  @Parameter
  @ConfigOverride
  private int numberOfConsumers; (2)

  @Parameter
  @Optional
  private String consumerTag;


  @Override
  public void onStart(SourceCallback<Object, AmqpMessageAttributes> sourceCallback) throws MuleException {
    // ...
  }
  // ...
  @Override
  public void onStop() {
    // ...
  }
  // ...
}
```

<table><tbody><tr><td><i class="conum" data-value="1"></i><b>1</b></td><td><code>@ConfigOverride</code>​ アノテーションが付加されたパラメーターを上書きする値を指定する設定。</td></tr><tr><td><i class="conum" data-value="2"></i><b>2</b></td><td>操作で指定されていないパラメーターは、​<em>完全に</em>​同じ名前のパラメーターの設定値を継承します。これらの名前のパラメーターは ​<code>ParameterGroup</code>​ に属します。</td></tr></tbody></table>

次の例は、上書きの動作を示しています。

```xml
<amqp:config name="config">
 <amqp:connection host="localhost" port="5671" virtualHost="/" username="guest" password="guest"/>
 <amqp:consumer-config numberOfConsumers="16" /> (1)
</amqp:config>

<flow name="amqpStatisticsListen">
  <amqp:listener config-ref="config" queueName="statisticsQueue" numberOfConsumers="1"/> (2)
  <!-- process statistics -->
  <logger level="INFO" message="#[payload]"/>
</flow>
```

<table><tbody><tr><td><i class="conum" data-value="1"></i><b>1</b></td><td>設定では、​<code>numberOfConsumers</code>​ は ​<code>16</code>​ に明示的に設定されていますが、​<code>ackMode</code>​ はデフォルト値を取得します。</td></tr><tr><td><i class="conum" data-value="2"></i><b>2</b></td><td>ソースでは、​<code>numberOfConsumers</code>​ が指定されているため、値 ​<code>1</code>​ を取得します。​<code>ackMode</code>​ は指定されていないため、設定からの値 ​<code>IMMEDIATE</code>​ を取得します。</td></tr></tbody></table>