spring-integration
Jdbc एकीकरण
खोज…
Jdbc इनबाउंड एडाप्टर - xml कॉन्फ़िगरेशन
आधिकारिक संदर्भ दस्तावेज में , यह कहता है:
एक इनबाउंड चैनल एडाप्टर का मुख्य कार्य SQL चयन क्वेरी को निष्पादित करना और परिणाम को संदेश के रूप में सेट करना है। संदेश पेलोड संपूर्ण परिणाम सेट है, जिसे एक सूची के रूप में व्यक्त किया गया है, और सूची में आइटम का उपयोग किए जाने वाले पंक्ति-मैपिंग रणनीति पर निर्भर करता है। डिफ़ॉल्ट रणनीति एक सामान्य मैपर है जो क्वेरी परिणाम में प्रत्येक पंक्ति के लिए एक मैप देता है।
सोर्स कोड
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इनबाउंड चैनल अडैप्टर। यहSELECT * FROM BOOKSSQLSELECT * FROM BOOKSbookRowMapperनिष्पादित करता है और परिणाम सेट कोList<Book>bookRowMapperList<Book>में बीनbookRowMapperमाध्यम सेbookRowMapper। अंत में, यह इस पुस्तक सूची को चैनलchannelभेजता है। -
channel: संदेश स्थानांतरित करें -
outbound: एक सामान्य आउटबाउंड एडाप्टर। जेनेरिक इनबाउंड और आउटबाउंड चैनल एडाप्टर देखें
-
Jdbc आउटबाउंड चैनल एडाप्टर - xml कॉन्फ़िगरेशन
वसंत एकीकरण संदर्भ डॉक्यूमेंट में , यह कहता है:
आउटबाउंड चैनल एडाप्टर इनबाउंड का व्युत्क्रम है: इसकी भूमिका एक संदेश को संभालने और SQL क्वेरी को निष्पादित करने के लिए इसका उपयोग करने के लिए है। संदेश पेलोड और हेडर डिफ़ॉल्ट रूप से क्वेरी के इनपुट पैरामीटर के रूप में उपलब्ध हैं ...
जावा कोड
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 config फाइल
<?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और:pricesqlParameterSourceबीन के माध्यम से SPEL जैसेpayload.titleका उपयोग कर। टाइटल औरpayload.price.price शीर्षक और मूल्य के रूप में संदेश पेलोड प्राप्त करता है।
-

