一键生成论文的网站,外贸营销网站建设介绍,平台企业,群晖wordpress配置JDBC入站通道适配器的基本功能是执行SQL查询#xff0c;提取数据并将以Message形式封装的结果集传递到本地通道。 您可以在JDBC入站通道适配器的示例中阅读有关此内容的更多信息。 有效负载的类型由行映射策略决定。 默认情况下会产生类型为List的有效负载#xff0c;其中每… JDBC入站通道适配器的基本功能是执行SQL查询提取数据并将以Message形式封装的结果集传递到本地通道。 您可以在JDBC入站通道适配器的示例中阅读有关此内容的更多信息。 有效负载的类型由行映射策略决定。 默认情况下会产生类型为List的有效负载其中每个元素都是列值的Map。 在上一篇有关Jdbc入站适配器的文章中我们使用了默认的行映射策略这就是为什么该消息包含映射值列表作为有效负载的原因。 列值将作为Map返回列名为键值。 在本文中我们将看到如何自定义映射策略以便有效负载是POJO的列表。 我们还将学习如何处理JDBC消息和使用transactional元素。 在开始示例之前首先将模块依赖项添加到pom.xml 。 依存关系 添加以下依赖项 spring-core spring-context spring-integration-core spring-integration-jdbc –返回此值以访问jdbc适配器 mysql-connector-java –我们将使用MySQL作为数据库因此您需要添加MySql驱动程序 pom.xml project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javarticles.spring.integration.jms/groupIdartifactIdspringintegrationjms/artifactIdversion0.0.1-SNAPSHOT/versiondependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework.integration/groupIdartifactIdspring-integration-core/artifactIdversion4.1.2.RELEASE/version/dependencydependencygroupIdorg.springframework.integration/groupIdartifactIdspring-integration-jdbc/artifactIdversion4.1.2.RELEASE/versionscopecompile/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.26/version/dependency /dependenciespropertiesspring.version4.1.4.RELEASE/spring.version/properties/project自定义行映射器 文章 package com.javarticles.spring.integration.jdbc;public class Article {private int id;private String name;private String tags;private String category;private String author;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getTags() {return tags;}public void setTags(String tags) {this.tags tags;}public String getCategory() {return category;}public void setCategory(String category) {this.category category;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author author;}public String toString() {StringBuilder sb new StringBuilder(id: );sb.append(id).append(, name: ).append(name).append(, tags: ).append(tags).append(, category: ).append(category).append(, author).append(author);return sb.toString();}
} 我们将通过实现org.springframework.jdbc.core.RowMapper接口并通过row-mapper属性引用此类来定制有效负载对象。 ArticleRowMapper package com.javarticles.spring.integration.jdbc;import java.sql.ResultSet;
import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class ArticleRowMapper implements RowMapperArticle {public Article mapRow(ResultSet rs, int rowNum) throws SQLException {String name rs.getString(name);String category rs.getString(category);String author rs.getString(author);String tags rs.getString(tags);int id rs.getInt(id);Article article new Article();article.setId(id);article.setCategory(category);article.setAuthor(author);article.setName(name);article.setTags(tags);return article;}
} 这是架构和一些测试数据 db-schema.sql drop table if exists articles;
CREATE TABLE articles (ID INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,NAME VARCHAR(100) NOT NULL,CATEGORY VARCHAR(50) NOT NULL,TAGS VARCHAR(100) NOT NULL,AUTHOR VARCHAR(50) NOT NULL,SENT INT,PRIMARY KEY (ID)
) ENGINEInnoDB AUTO_INCREMENT2 DEFAULT CHARSETutf8; db-test-data.sql insert into articles(id, name, category, tags, author, sent) values (1, SpringIntegration Example, spring, spring,integration, Joe, 0);
insert into articles(id, name, category, tags, author, sent) values (2, NamedParameterJdbcTemplate Example, spring, spring,jdbcTemplate, Sam, 0);
insert into articles(id, name, category, tags, author, sent) values (3, MVC Example, spring, spring, Joe, 0); 我们还将在这里介绍交易概念。 提取文章后我们希望将“已发送”列更新为1这样就不会在下一次轮询中显示已阅读的文章。 我们将简单地将tansactional元素添加到poller元素。 这将导致更新和选择查询在同一事务中运行。 由于我们依赖交易因此我们需要配置交易管理器。 我们引入的另一件事是服务适配器以防您想处理JDBC消息。 JdbcMessageHandler package com.javarticles.spring.integration.jdbc;import java.util.List;public class JdbcMessageHandler {public void handleMessage(ListArticle articleList) {System.out.println(In JdbcMessageHandler: articleList);}
} 让我们看看我们的配置。 jdbcInboundApplicationContext.xml ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:inthttp://www.springframework.org/schema/integrationxmlns:jdbchttp://www.springframework.org/schema/jdbc xmlns:int-jdbchttp://www.springframework.org/schema/integration/jdbcxmlns:contexthttp://www.springframework.org/schema/context xmlns:phttp://www.springframework.org/schema/pxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/integrationhttp://www.springframework.org/schema/integration/spring-integration.xsdhttp://www.springframework.org/schema/integration/jdbchttp://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsdhttp://www.springframework.org/schema/jdbchttp://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsdint-jdbc:inbound-channel-adapter iddataChannelqueryselect * from articles where authorJoe and sent 0 updateupdate articles set sent 1 where id in (:id)data-sourcedataSource row-mapperarticleRowMapperint:poller fixed-rate100int:transactional //int:poller/int-jdbc:inbound-channel-adapterint:service-activator input-channeldataChannel refjdbcMessageHandler /bean idjdbcMessageHandlerclasscom.javarticles.spring.integration.jdbc.JdbcMessageHandler /bean idtransactionManagerclassorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource //beanint:poller defaulttrue fixed-rate100 /int:channel iddataChannelint:queue //int:channeljdbc:initialize-database data-sourcedataSourceenabledtruejdbc:script locationclasspath:db-schema.sql /jdbc:script locationclasspath:db-test-data.sql //jdbc:initialize-databasebean iddataSourceclassorg.springframework.jdbc.datasource.DriverManagerDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver /property nameurl valuejdbc:mysql://localhost/test /property nameusername valueroot /property namepassword valuemnrpass //beanbean idarticleRowMapperclasscom.javarticles.spring.integration.jdbc.ArticleRowMapper /
/beans 我们的主类看起来很简单我们只需要加载上下文即可启动轮询。 SpringIntegrationJdbcInboundRowMapper示例 package com.javarticles.spring.integration.jdbc;import java.io.IOException;
import java.sql.SQLException;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringIntegrationJdbcInboundRowMapperExample {public static void main(String[] args) throws InterruptedException, IOException, SQLException {ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(jdbcInboundApplicationContext.xml);Thread.sleep(1000);context.close();}} 输出 In JdbcMessageHandler:[id: 1, name: SpringIntegration Example, tags: spring,integration, category: spring, authorJoe, sent: 0, id: 3, name: MVC Example, tags: spring, category: spring, authorJoe, sent: 0]下载源代码 这是有关带有RowMapper的Jdbc入站适配器的示例。 您可以在此处下载源代码 springintegrationJdbcRowMapper.zip 翻译自: https://www.javacodegeeks.com/2015/05/spring-integration-jdbc-rowmapper-example.html