Spring Data通过创建智能的DAO节省了很多时间,您基本上不需要编写任何代码就可以免费获得DAO。 它基本上遵循Eric Evans的DDD书中的“ 存储库模式 ” ,并将实体视为集合。 它有一个很好的约定,允许您为复杂查询指定条件,甚至可以将JPA Criteria API或QueryDSL流利API用于更复杂的查询/规范。 最好的部分是抽象不仅适用于JPA,而且适用于许多其他提供程序 。 在Spring生态系统(例如Spring Boot)中有一些使用spring-data的很好的例子,但是有时候您想在Spring Boot的神奇,迷人的世界之外使用它。

而且,如果您要进行认真的系统集成,那么您可能也正在使用Apache Camel ,因此在下面的快速博客(无极)中,我将向您展示与Camel一起使用时需要的重要组成部分……但是,没有任何内容这里太特别了。 我们从根本上解构了Spring Boot可以帮您解决的一些魔术问题,使您能够理解必须具备的必要组成部分(如果运行Tomcat,Dropwizard,Wildfly或任何容器,这是正确的)。

此示例代码位于我的github上,其中包含我们正在处理的一些代码 。

第一步,您将需要JPA和spring-data依赖项!

<!-- spring data + JPA -->
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId>
</dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId>
</dependency>
<dependency><groupId>org.hibernate.javax.persistence</groupId><artifactId>hibernate-jpa-2.1-api</artifactId><version>1.0.0.Final</version>
</dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>${hibernate.version}</version>
</dependency>
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version>
</dependency>

这将为我们准备类路径,其中应包括JPA API和我们将使用的提供程序的实体管理器。

接下来,我们应该在spring-context / bean-factory中添加以下内容:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/><property name="url" value="jdbc:derby:memory:orders;create=true"/><property name="username" value=""/><property name="password" value=""/>
</bean><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/>
</bean><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource"/><property name="persistenceXmlLocation" value="classpath:/META-INF/persistence.xml"/><property name="persistenceUnitName" value="sample"/><!-- spring based scanning for entity classes>--><property name="packagesToScan" value="org.jboss.fuse.examples.rest"/>
</bean><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/><property name="dataSource" ref="dataSource"/>
</bean>

这一切都是Spring ORM的事情 ; 这里没有什么太夸张的,但是spring-data需要的样板文件。

要使用JPA,我们还需要一个persistence.xml文件。 如果您想使用Mongo或其他方式,请参阅该特定的spring-data mdoule以了解如何执行此操作。

<persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"version="2.0"><persistence-unit name="sample"><provider>org.hibernate.ejb.HibernatePersistence</provider><properties><property name="hibernate.dialect" value="org.hibernate.dialect.DerbyTenSevenDialect"/></properties></persistence-unit>
</persistence>

这应该为我们使用spring-data提供了基础! 现在,让我们做一些有趣的事情。 我们将添加一个存储库,该存储库将允许我们对数据库执行CRUD操作(以及更多操作!):

package org.jboss.fuse.examples.repositories;import org.jboss.fuse.examples.rest.Organization;
import org.springframework.data.repository.PagingAndSortingRepository;/*** Created by ceposta * <a href="http://christianposta.com/blog>http://christianposta.com/blog</a>.*/
public interface OrganizationRepository extends PagingAndSortingRepository<Organization, Integer> {}

我们有我们的存储库,但是我们需要告诉spring如何找到它并应用一些魔术。 因此,我们将其像这样添加到spring上下文中(并让spring扫描软件包以发现存储库)

<jpa:repositories base-package="org.jboss.fuse.examples.repositories"/>

注意,这将需要适当的名称空间(假设我们正在使用spring XML配置;也支持java配置,但此处未显示):

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemaLocation="http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

现在,让我们将存储库注入到我们自己的POJO类中,以便可以使用它! 哇,哇……“我们实际上没有编写任何代码来实现此存储库”,您说……是的,这是真的! Spring-data为我们做到了!

让我们注入:

<bean id="orgCollection" class="org.jboss.fuse.examples.rest.OrganizationCollection"><property name="repository" ref="organizationRepository"/>
</bean>

请注意,存储库organizationRepository的名称是由Spring在扫描软件包中的存储库时按约定创建的,但是我们仍然可以保留它,并像在bean工厂中的任何其他spring bean一样使用它。 现在,让我们在骆驼路线中使用这个包装器类(在这种情况下为OrganizationCollection ):

<route id="findAll"><from uri="direct:findAll"/><bean ref="orgCollection" method="findAll"/>
</route><route id="orgById"><from uri="direct:orgById"/><bean ref="orgCollection" method="findById"/>
</route><route id="paginate"><from uri="direct:paginate"/><bean ref="orgCollection" method="findOrganizationWithPagination"/>
</route>

凉! 我们有3条单独的路线使用orgCollection pojo(依次使用利用spring-data的organizationRepository)。 让我们看一下该POJO:

package org.jboss.fuse.examples.rest;import org.apache.camel.Header;
import org.apache.camel.language.Simple;
import org.jboss.fuse.examples.repositories.OrganizationRepository;
import org.springframework.data.domain.PageRequest;public class OrganizationCollection {private OrganizationRepository repository;public Organization insertNewOrganization(@Simple("body.org_id") Integer id, @Simple("body.org_name") String name) {Organization org = new Organization(id, name);return repository.save(org);}public Iterable<Organization> findAll(){return repository.findAll();}public Iterable<Organization> findOrganizationWithPagination(@Header("pageNumber")int pageNum, @Header("pageSize")int size){return repository.findAll(new PageRequest(pageNum, size));}public Organization findById(@Header("id")int id) {return repository.findOne(id);}public OrganizationRepository getRepository() {return repository;}public void setRepository(OrganizationRepository repository) {this.repository = repository;}
}

我们注入OrganizationRepository并在这里使用它来查询数据存储。 请注意,这些参数具有Apache Camel注释,这些注释从标头和正文中提取值以用作参数。

翻译自: https://www.javacodegeeks.com/2015/12/using-spring-data-apache-camel.html

在Apache Camel中使用Spring数据相关推荐

  1. Apache Camel中的短重试与长重试

    <骆驼设计模式>一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践. 每个模式都基于真实的用例,并提供了Camel特定的实现细节和最佳实践. 为 ...

  2. Apache Camel中的断路器模式

    骆驼通常在分布式环境中用于访问远程资源. 远程服务可能由于各种原因和期间而失败. 对于短时间后暂时不可用且可恢复的服务,重试策略可能会有所帮助. 但是某些服务可能会失败或挂起更长时间,从而使调用应用程 ...

  3. Apache Camel中的recipientList和routingSlip的区别?

    二者都是根据消息来动态的路由到一个多个结点 简单用法如下: <route autoStartup="true"><from uri="direct:re ...

  4. apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    apache.camel 从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ A ...

  5. 在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

    从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样. 下一代代理Apache ActiveMQ Artemis(或仅是Art ...

  6. mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel

    mule esb 集成 公司之间的数据交换增加了很多. 必须集成的应用程序数量也增加了. 这些接口使用不同的技术,协议和数据格式. 然而,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支 ...

  7. springboot 整合 apache camel实现企业级数据集成和处理

    Apache Camel是一个集成框架,它具有用于集成各种应用程序的编程模型. 对于需要在不同的微服务和其他上下游系统(如数据库和消息传递系统)之间进行通信的微服务体系结构,它非常适合. 在本文中,我 ...

  8. java camel dsl,Apache Camel与Spring DSL

    我正在尝试使用spring DSL在Apache Camel中运行一个简单的应用程序 . 这是我的spring-config.xml 这是我的Java类测试: public class CamelSp ...

  9. apache camel_Apache Camel中的短重试与长重试

    apache camel <骆驼设计模式>一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践. 每种模式都基于真实的用例,并提供了Camel特定 ...

最新文章

  1. python语音翻译软件下载_python软件翻译
  2. python中是干嘛的-python中def是做什么的
  3. 真是O(1)吗?想清楚了没?
  4. 主机Ping扫描自动化工具
  5. ajax简单的验证,ajax初探--实现简单实时验证(示例代码)
  6. php redis 集合返回多条,详解PHP多个进程配合redis的有序集合实现大文件去重
  7. db2诊断系列之---定位锁等待问题
  8. cad2016中选择全图字体怎么操作_抖音上的书单都是用啥做的,抖音书单图片怎么做...
  9. oracle导入的表在哪,oracle导入导出表及表结构
  10. 微软软件基地落户广州
  11. ArcGIS制作三维地貌场景
  12. 即插即用!Batch Transformer
  13. 笔记本打开计算机不显示摄像头,笔记本电脑摄像头没有图像怎么回事_笔记本摄像头提示没有图像设备如何处理-win7之家...
  14. 使用POI操作Ecxel文档遇到转化成String类型的电话号码无法转化成Cell类型了
  15. CentOS 7 搭建邮件服务器搭建(postfix+dovecot)
  16. 一键adb关闭系统更新 坚果手机_华为手机通过ADB永久关闭系统更新
  17. 谷歌表格图表 横坐标 滚动_JS图表:Google表格
  18. MAC地址IP地址 端口
  19. Ubuntu 18.04安装Docker Dashboard
  20. 使用pngquant压缩png图片

热门文章

  1. Js对象如何添加方法、查看Api
  2. 《走遍中国》珍藏版(八)
  3. JDBC连接数据库教程,postgreSQL
  4. mysql binlog 备份恢复数据_Mysql结合备份+binlog恢复误删除操作数据
  5. kali linux改中文_kali linux 2019.4设置为中文方法
  6. super 和 this 关键字的比较+调用构造器(this)+动态绑定
  7. jstat分析_jstat –分析
  8. java策略设计模式_Java中的策略设计模式
  9. aws使用技巧_AWS:避免那些“神圣的法案”时刻的一些技巧
  10. arrays.sort(._Arrays.hashCode(Object [])与Objects.hash(Object…)