Flex Gateway新着情報
Governance新着情報
Monitoring API Managerデータベース用 Anypoint Connector (Database Connector) では、データを一括管理できるようにする Bulk insert、Bulk update、Bulk delete 操作がサポートされています。これにより、1 つの挿入、更新、または削除操作を何度も実行する場合よりもパフォーマンスが向上します。
これらの操作は、対応する単一操作と似ていますが、入力パラメーターをキー - 値のペアで受け取るのではなく、一括操作ではキー - 値のペアのリストとして受け取ることを想定しています。一括操作を実行すれば、不要なステップを回避して次の利点を得ることができます。
クエリが 1 回だけ解析される
実行されるステートメントは 1 つのみのため、必要なデータベース接続は 1 つのみである
ネットワークオーバーヘッドを最小限に抑えられる
RDBMS で一括操作を実行できる。
一括操作の一部のステートメントが正常に実行されても、他のステートメントがエラーとなることがあります (たとえば、Bulk insert 操作で 100 行のうち 1 行の挿入に失敗すると、エラーの内容を示す例外が 1 件スローされます)。実行を直ちに中止して残りの操作をすべて無視するか、または残りのステートメントの実行を継続するかは、ドライバーが決定します。どちらの場合でも、エラーが発生した場合には、Mule アプリケーションログでエラーの原因を確認してください。
次の例は、MySQL データベースで顧客データと商品データを挿入、更新、削除する操作を Mule アプリケーションで設定する方法を示しています。この例を実行するには、次の操作が必要です。
CUSTOMERS
と PRODUCTS
という 2 つのテーブルを作成する SQL ステートメントを実行します。
SQL データベース接続を設定します。
Mule アプリケーションを作成します。
アプリケーションを実行し、curl コマンドを使用してアプリケーションをテストします。
SQL データベース接続を設定して Mule アプリケーションを作成する前に、次の SQL ステートメントを実行して CUSTOMERS
と PRODUCTS
というテーブルを作成し、4 件の商品データを PRODUCTS
テーブルに挿入します。
CREATE DATABASE DEMO;
USE DEMO;
CREATE TABLE CUSTOMERS (
ID bigint AUTO_INCREMENT PRIMARY KEY,
NAME varchar(30) NOT NULL,
LAST_NAME varchar(30) NOT NULL
);
CREATE TABLE PRODUCTS (
ID bigint AUTO_INCREMENT PRIMARY KEY,
PRICE numeric(8, 2) NOT NULL,
ITEM varchar(30) NOT NULL
);
INSERT INTO PRODUCTS (PRICE, ITEM) values (50.0, 'shampoo');
INSERT INTO PRODUCTS (PRICE, ITEM) values (150.5, 'olive oil');
INSERT INTO PRODUCTS (PRICE, ITEM) values (11, 'coconut oil');
INSERT INTO PRODUCTS (PRICE, ITEM) values (133, 'wine');
テーブルを作成したら、Anypoint Studio に移動して MySQL データベース接続を設定します。
Studio で新しい Mule プロジェクトを作成します。
[Global Elements (グローバル要素)] ビューに移動します。
[Create (作成)] をクリックして、[Choose Global Type (グローバル種別の選択)] ビューを開きます。
[Filter (検索条件)] 項目に「http
」と入力し、[HTTP Listener config (HTTP リスナー設定)] を選択して [OK] をクリックします。
この設定は、Mule アプリケーションフローを開始する HTTP Listener ソース用です。
[HTTP Listener config (HTTP リスナー設定)] ウィンドウで、次の項目に入力します。
Protocol (プロトコル): HTTP (Default)
Host (ホスト): All Interfaces [0.0.0.0] (default)
Port (ポート): 8081
[OK] をクリックします。
[Global Elements (グローバル要素)] ビューで [Create (作成)] をクリックして [Choose Global Type (グローバル種別の選択)] ビューを開きます。
[Filter (検索条件)] 項目に「database
」と入力し、[Database Config (データベース設定)] を選択して [OK] をクリックします。
[Database Config (データベース設定)] ウィンドウで [Name (名前)] を dbConfig
に設定します。
[Connection (接続)] 項目で [MySQL Connection (MySQL 接続)] を選択します。
[Configure (設定)] をクリックし、必要な MySQL JDBC ドライバーを追加して、次のいずれかを選択します。
Add recommended library (推奨されるライブラリを追加)
推奨されるライブラリをインストールします。
Use local file (ローカルファイルを使用)
ローカルファイルを使用してライブラリをインストールします。
Add Maven dependency (Maven 連動関係を追加)
Maven 連動関係をインストールしてプロジェクトに追加します。
[Connection (接続)] セクションで、次の項目に入力します。
Host (ホスト): localhost
Port (ポート): 3306
User (ユーザー): root
Password (パスワード): mulesoft
Database (データベース): demo
[Test Connection (接続をテスト)] をクリックして、Mule がデータベースに接続できることを確認します。
[OK] をクリックします。
次のスクリーンショットは、データベースのグローバル要素設定を示しています。
最初のフローは、顧客の項目を CUSTOMERS
テーブルに一括挿入します。このフローを作成する手順は、次のとおりです。
[Mule Palette (Mule パレット)] ビューで、[HTTP] の [Listener] ソースを選択してキャンバスにドラッグします。
このソースは受信 HTTP メッセージ属性をリスンすることでフローを開始します。
[Connector configuration (コネクタ設定)] 項目で HTTP_Listener_config
グローバル設定を選択します。
[Path (パス)] を /insert
に設定します。
[Bulk insert] 操作を [Listener] ソースの右にドラッグします。
[Connector configuration (コネクタ設定)] で Database_Config
を選択します。
[Input Parameters (入力パラメーター)] に次の式を入力します。
[{'id': 2, 'name': 'George', 'lastName': 'Costanza'}, {'id': 3, 'name': 'Cosmo', 'lastName': 'Kramer'}]
[SQL Query text (SQL クエリテキスト)] に以下を入力します。
INSERT INTO CUSTOMERS (NAME, LAST_NAME) values (:name, :lastName)
2 つ目のフローは、PRODUCTS
テーブルで商品の価格を一括更新します。このフローを作成する手順は、次のとおりです。
[Mule Palette (Mule パレット)] ビューで、[HTTP] の [Listener] ソースを選択して、最初のフローの下にドラッグします。
このソースは受信 HTTP メッセージ属性をリスンすることでフローを開始します。
[Connector configuration (コネクタ設定)] 項目で HTTP_Listener_config
グローバル設定を選択します。
[Path (パス)] を update
に設定します。
[Set Payload] コンポーネントを [Listener] ソースの右にドラッグします。
[Value (値)] に次の式を入力します。
[{
discountRate: 0.1,
price: 50
},
{
discountRate: 0.2,
price: 150.5
}]
[Bulk update] 操作を [Set Payload] ソースの右にドラッグします。
[Connector configuration (コネクタ設定)] で Database_Config
を選択します。
[SQL Query text (SQL クエリテキスト)] に次の式を入力します。
UPDATE PRODUCTS SET PRICE = PRICE * :discountRate WHERE PRICE = :price
3 つ目のフローは、PRODUCTS
テーブルから商品データを一括削除します。このフローを作成する手順は、次のとおりです。
[Mule Palette (Mule パレット)] ビューで、[HTTP] の [Listener] ソースを選択して、最初のフローの下にドラッグします。
このソースは受信 HTTP メッセージ属性をリスンすることでフローを開始します。
[Connector configuration (コネクタ設定)] 項目で HTTP_Listener_config
グローバル設定を選択します。
[Path (パス)] を /delete
に設定します。
[Set Payload] コンポーネントを [Listener] ソースの右にドラッグします。
[Value (値)] に次の式を入力します。
[{
price: 11
},
{
price: 133
}]
[Bulk delete] 操作を [Set Payload] コンポーネントの右にドラッグします。
[Connector configuration (コネクタ設定)] で Database_Config
を選択します。
[SQL Query text (SQL クエリテキスト)] に次の式を入力します。
DELETE FROM PRODUCTS WHERE PRICE = :price
Mule アプリケーションを実行およびテストする手順は、次のとおりです。
Studio でプロジェクトを保存します。
[Run (実行)] > [Run (実行)] をクリックしてアプリケーションをデプロイします。
インターネットブラウザーで、次の CURL コマンドを実行してアプリケーションをテストします。
curl http://localhost:8081/insert
curl http://localhost:8081/update
curl http://localhost:8081/delete
この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:http="http://www.mulesoft.org/schema/mule/http"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
<db:config >
<db:my-sql-connection host="localhost" port="3306" user="root" password="mulesoft" database="demo" />
</db:config>
<http:listener-config name="HTTP_Listener_config" >
<http:listener-connection host="0.0.0.0" port="8081" />
</http:listener-config>
<flow name="dbcon-demoFlow">
<http:listener config-ref="HTTP_Listener_config" path="/insert"/>
<db:bulk-insert config-ref="Database_Config">
<db:bulk-input-parameters ><![CDATA[#[[{'id': 2, 'name': 'George', 'lastName': 'Costanza'}, {'id': 3, 'name': 'Cosmo', 'lastName': 'Kramer'}]]]]></db:bulk-input-parameters>
<db:sql ><![CDATA[INSERT INTO CUSTOMERS (NAME, LAST_NAME) values (:name, :lastName)]]></db:sql>
</db:bulk-insert>
</flow>
<flow name="dbcon-demoFlow1" >
<http:listener config-ref="HTTP_Listener_config" path="update"/>
<set-payload value="#[[{
discountRate: 0.1,
price: 50
},
{
discountRate: 0.2,
price: 150.5
}]]" doc:name="Set Payload" />
<db:bulk-update config-ref="Database_Config">
<db:sql ><![CDATA[UPDATE PRODUCTS SET PRICE = PRICE * :discountRate WHERE PRICE = :price]]></db:sql>
</db:bulk-update>
</flow>
<flow name="dbcon-demoFlow2" >
<http:listener config-ref="HTTP_Listener_config" path="/delete"/>
<set-payload value="#[[{
price: 11
},
{
price: 133
}]]" doc:name="Set Payload" />
<db:bulk-delete doc:name="Bulk delete" config-ref="Database_Config">
<db:sql ><![CDATA[DELETE FROM PRODUCTS WHERE PRICE = :price]]></db:sql>
</db:bulk-delete>
</flow>
</mule>