spring-integration
Jdbc 통합
수색…
Jdbc 인바운드 어댑터 - xml 구성
공식 참조 문서에서 , 그것은 말한다 :
인바운드 채널 어댑터의 주요 기능은 SQL SELECT 쿼리를 실행하고 결과 집합을 메시지로 변환하는 것입니다. 메시지 페이로드는 전체 결과 집합이며 List로 표시되며 목록의 항목 유형은 사용되는 행 매핑 전략에 따라 다릅니다. 기본 전략은 쿼리 결과의 각 행에 대해 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: Jdbc 인 Y 운드 채널 어댑터. 그것은 SQL 실행SELECT * FROM BOOKS하고 결과 집합 변환List<Book>빈을 통해bookRowMapper. 마지막으로이 책 목록을 채널channel로 보냅니다. -
channel: 메시지 전송 -
outbound: 일반 아웃 바운드 어댑터. 일반 인바운드 및 아웃 바운드 채널 어댑터를 참조하십시오.
-
Jdbc 아웃 바운드 채널 어댑터 - xml 구성
Spring Integration Reference Docuement 에서 다음과 같이 말합니다 :
아웃 Y 운드 채널 어댑터는 인 Y 운드의 역입니다. 역할은 메시지를 처리하고이를 사용하여 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

