spring-integration
Jdbcの統合
サーチ…
Jdbcインバウンド・アダプター - xml構成
公式の参考資料では 、それは言う:
インバウンド・チャネル・アダプタの主な機能は、SQL SELECT問合せを実行し、結果セットをメッセージとして出力することです。メッセージ・ペイロードは、結果セット全体であり、リストとして表され、リスト内の項目のタイプは、使用される行マッピング・ストラテジーに依存します。デフォルトの戦略は、クエリ結果の各行のMapを返す汎用マッパーです。
ソースコード
public class Application { static class Book { String title; double price; Book(String title, double price) { this.title = title; this.price = price; } double getPrice() { return price; } String getTitle() { return title; } @Override public String toString() { return String.format("{title: %s, price: %s}", title, price); } } static class Consumer { public void consume(List<Book> books) { books.stream().forEach(System.out::println); } } static class BookRowMapper implements RowMapper<Book> { @Override public Book mapRow(ResultSet rs, int rowNum) throws SQLException { String title = rs.getString("TITLE"); double price = rs.getDouble("PRICE"); return new Book(title, price); } } public static void main(String[] args) { new ClassPathXmlApplicationContext( "classpath:spring/integration/stackoverflow/jdbc/jdbc.xml"); } }XML設定ファイル
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-jdbc="http://www.springframework.org/schema/integration/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/integration/jdbc http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd"> <jdbc:embedded-database id="dataSource" type="H2"> <jdbc:script location="classpath:spring/integration/stackoverflow/jdbc/schema.sql"/> </jdbc:embedded-database> <bean id="bookRowMapper" class="spring.integration.stackoverflow.jdbc.Application$BookRowMapper"/> <int:channel id="channel"/> <int-jdbc:inbound-channel-adapter id="jdbcInbound" channel="channel" data-source="dataSource" query="SELECT * FROM BOOKS" row-mapper="bookRowMapper"> <int:poller fixed-rate="1000"/> </int-jdbc:inbound-channel-adapter> <int:outbound-channel-adapter id="outbound" channel="channel" method="consume"> <bean class="spring.integration.stackoverflow.jdbc.Application$Consumer"/> </int:outbound-channel-adapter> </beans>schema.sql
CREATE TABLE BOOKS ( TITLE VARCHAR(20) NOT NULL, PRICE DOUBLE NOT NULL ); INSERT INTO BOOKS(TITLE, PRICE) VALUES('book1', 10); INSERT INTO BOOKS(TITLE, PRICE) VALUES('book2', 20);概要:
-
jdbcInbound:jdbcInboundインバウンド・チャネル・アダプター。 SQLSELECT * FROM BOOKSを実行し、結果セットをList<Book>BeanbookRowMapper介してList<Book>bookRowMapperます。最後に、この書籍リストをチャンネルchannelます。 -
channel:メッセージを転送する -
outbound:一般的なアウトバウンド・アダプター。 汎用インバウンドおよびアウトバウンドチャネルアダプタを参照してください。
-
Jdbcアウトバウンド・チャネル・アダプター - xml構成
Spring Integration Reference Docuementには 、次のように書かれています。
アウトバウンド・チャネル・アダプターは、インバウンドの逆です。その役割は、メッセージを処理してSQL照会の実行に使用することです。メッセージのペイロードとヘッダーは、デフォルトでクエリの入力パラメータとして使用できます。
Javaコード
public class OutboundApplication { static class Book { String title; double price; Book(String title, double price) { this.title = title; this.price = price; } public double getPrice() { return price; } public String getTitle() { return title; } } static class Producer { public Book produce() { return IntStream.range(0, 3) .mapToObj(i -> new Book("book" + i, i * 10)) .collect(Collectors.toList()) .get(new Random().nextInt(3)); } } public static void main(String[] args) { new ClassPathXmlApplicationContext( "classpath:spring/integration/stackoverflow/jdbc/jdbc-outbound.xml"); } }XML設定ファイル
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-jdbc="http://www.springframework.org/schema/integration/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/integration/jdbc http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="jdbc:h2:tcp://localhost/~/booksystem"/> <property name="username" value="sa"/> <property name="password" value=""/> <property name="driverClassName" value="org.h2.Driver"/> </bean> <jdbc:initialize-database> <jdbc:script location="classpath:spring/integration/stackoverflow/jdbc/schema.sql"/> </jdbc:initialize-database> <int:channel id="channel"/> <int:inbound-channel-adapter channel="channel" method="produce" > <bean class="spring.integration.stackoverflow.jdbc.OutboundApplication$Producer"/> <int:poller fixed-rate="1000"/> </int:inbound-channel-adapter> <int-jdbc:outbound-channel-adapter id="jdbcOutbound" channel="channel" data-source="dataSource" sql-parameter-source-factory="sqlParameterSource" query="INSERT INTO BOOKS(TITLE, PRICE) VALUES(:title, :price)"/> <bean id="sqlParameterSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory"> <property name="parameterExpressions"> <map> <entry key="title" value="payload.title"/> <entry key="price" value="payload.price"/> </map> </property> </bean> </beans>schema.sql
DROP TABLE IF EXISTS BOOKS; CREATE TABLE BOOKS ( TITLE VARCHAR(20) NOT NULL, PRICE DOUBLE NOT NULL );BOOKSテーブルを見ることができ、レコードが挿入されていることがわかります。または、int-jdbc:inbound-channel-adapterを記述してBOOKSテーブルをカウントすると、カウント数が連続的に増加していることがわかります。概要:
-
inbound:Bookオブジェクトをメッセージペイロードとして取得し、それをチャネルchannel送信するために使用される汎用インバウンドアダプタ。 -
channel:メッセージの転送に使用されます。 -
jdbcOutbound:JDBCアウトバウンドアダプタは、それが持つメッセージ受信Bookタイプを、次にクエリパラメータの準備:titleと:price経由sqlParameterSourceようSPELを使って豆payload.titleとpayload.priceタイトルを取得し、価格メッセージのペイロードを形成することを。
-
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow

