在Apache Camel中使用Spring数据

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python协程池操作mysql_python_协程方式操作数据库

#!/usr/bin/python3# -*- coding: utf-8 -*-import requestsimport geventimport pymysqlfrom gevent import monkey# 堵塞标记monkey.patch_all()class SqlSave(object):"""协程方式写入数据库"""def __init__(self):SQL_DBA {‘host‘: ‘loc…

bootstrap在ie8下,兼容媒体查询

最近使用bootstrap做网站的时候发现&#xff0c;在ie8下的媒体查询一直失效&#xff1a; 后来解决了&#xff0c;做如下记录&#xff1a; 1、必须运行在服务器下 2、hack 条件语法&#xff0c;如下&#xff1a; <!--[if lte ie 9]><script src"js/html5shiv.min.…

java 冒号 正则表达式_Java正则表达式问号冒号的使用

在Java和Javascript中正则表达式字符串前面加上?:表示非捕获型匹配&#xff0c;否则就是捕获型匹配。捕获型括号会将匹配到的内容捕获到一些变量里&#xff0c;这些变量按照捕获型括号的左括号为顺序从1开始编号。为了避免括号太多使编号混乱&#xff0c;也为了避免无用的捕获…

Hibernate中的一对多XML映射

一对多关系指出一个实体的单个实例与另一个实体的多个实例相关联。 换句话说&#xff0c;一个表中的每个记录与另一个表中的多个记录相关联。 让我们看看如何通过XML映射文件在Hibernate中定义这种关系。 1.实体关系图 假设我们已经在数据库中创建了学生表和部门表&#xff0…

java resize_OpenCV3 Java图像放大缩小 修改图像大小(Imgproc.resize)

Imgproc.resize()方法参数&#xff1a;src&#xff1a;输入&#xff0c;原图像&#xff0c;即待改变大小的图像&#xff1b;dst&#xff1a;输出&#xff0c;改变大小之后的图像&#xff0c;这个图像和原图像具有相同的内容&#xff0c;只是大小和原图像不一样而已&#xff1b;…

mongodb中Gson和java##Bean对象转化类

此类使用感觉比较繁琐, 每个字段加注解才可以使用, 不如mongoTemplate使用方便, 但如果使用mongo客户端的话, 还是比手动拼接快一点, 所以贴在这儿 package com.iwhere.util;import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java…

java中sql查询语句_JAVA中用 SQL语句操作小结

1、添加记录(INSERT)使用SQL语句的INSERT命令可以向数据库中插入记录&#xff0c;INSERT命令的基本形式为&#xff1a;INSERT INTO 表名 [(字段名1,字段名2…)] VALUES (值1,值2,…)若在输入记录时&#xff0c;每个字段均有内容&#xff0c;可省略表名后的字段名。该SQL语句用于…

专题:二分图匹配

挖坑转载于:https://www.cnblogs.com/bestwzh/p/6487477.html

camel eip_Apache Camel教程– EIP,路由,组件,测试和其他概念的简介

camel eip公司之间的数据交换增加了很多。 必须集成的应用程序数量也增加了。 这些接口使用不同的技术&#xff0c;协议和数据格式。 但是&#xff0c;这些应用程序的集成应以标准化的方式建模&#xff0c;有效实现并由自动测试支持。 企业集成模式&#xff08;EIP&#xff09;…

java map 不存在的key_java – HashMap表示即使它确实存在,Key也不存在

我遇到了一个有趣的问题,我很确定是HashMap的错.考虑以下调试代码(AMap是HashMap,key是传递给此方法的值)System.out.println("getBValues - Given: " key);System.out.println("getBValues - Contains Key: " AMap.containsKey(key));System.out.printl…

XML 解析器

XML Parser 所有现代浏览器都有内建的 XML 解析器。 XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。 解析 XML 文档 下面的代码片段把 XML 文档解析到 XML DOM 对象中&#xff1a; if (window.XMLHttpRequest){// code for IE7, Firefox, Chrome,…

JavaOne和OOW 2015总结

大家好&#xff01; 终于&#xff0c;我回来了一个很棒的JavaOne和OOW2015。在这篇文章中&#xff0c;我想分享我的经验&#xff0c;一些照片和我参加的演讲的摘要。 会议前 我于2015年6月24日星期六乘Copa航空公司CLO-PTY-SFO飞往旧金山。 从哥伦比亚出发&#xff08;大约8小…

java mongodb dbref_Spring DATA MongoDB @DBref查询,or和and联合查询

DBref文档关联&#xff0c;在按该类型查询的时候&#xff0c;在字段名后加上关联表的字段名即可&#xff0c;如&#xff1a;Criteria.where("bloggroup.$id")&#xff0c;$id代表关联表的oid字段。or和and联合查询比如查询 (A 1 and b 2 )or (A 3 and b 4)&#x…

【hdoj_2152】Fruit(母函数)

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2152 本题采用母函数模板求解&#xff0c;母函数模板如下&#xff1a; http://blog.csdn.net/ten_sory/article/details/59483762 本题中的价值v[i]均为1&#xff0c;s[i]A[i],e[i]B[i]&#xff0c;套用上述模板&am…

java holdslock_一种检测Java并发程序代码分支路径lock是否遗漏的方法

开发java程序中&#xff0c;程序员往往会用synchronized lock 进行临界资源保护和线程同步&#xff1b;android平台上&#xff0c;提供了一些技巧来减少锁被错误使用&#xff1a;使用Locked后缀作为函数名字&#xff1a;Locked函数被调用&#xff0c;需调用方(或者更上层调用方…

Marin说PCB之 PCB封装和原理图封装的藕断丝连--续集(2)

最近天气越来越冷了&#xff0c;小编我在上海漂泊的十多年了&#xff0c;感觉今年似乎是最冷的一年啊。家里的秋裤都不管用了&#xff0c;要换成大棉裤和军大衣啊。而且现在羽绒服大部分都很贵&#xff0c;动不动上千元了&#xff0c;都赶得上小编我几个月的私房钱了都&#xf…

调整线程池的重要性

无论您是否知道&#xff0c;您的Java Web应用程序很可能都使用线程池来处理传入的请求。 这是许多人忽略的实现细节&#xff0c;但是迟早您需要了解如何使用该池以及如何为您的应用程序正确调整池。 本文旨在说明线程模型&#xff0c;什么是线程池以及正确配置线程池所需执行的…

在线原理图绘制网站推荐

如今专业EDA软件已经基本在硬件公司普及并正版化&#xff0c;优秀的EDA工具包括 Cadence公司的OrCAD、Allegro软件&#xff0c;Mentor Graphics的PADS&#xff0c; Altium公司的Altium Designer等等&#xff0c;但是它们在功能异常强大的同时也在一些时候显得非常复杂&#xff…

java map与set的区别_java 集合(list,set,map)三者之间的关系和区别

原java 集合(list&#xff0c;set&#xff0c;map)三者之间的关系和区别一&#xff1a;先上一张关系图&#xff0c;让大家看的更明白。备注&#xff1a;其中红色部分为实现&#xff0c;其他地方均为接口。二&#xff1a;各自的特点。List 有序,可重复ArrayList优点: 底层数据结…

数据竞赛利器 —— xgboost 学习清单

1. 入门大全 xgboost 作者给出的一份完备的使用 xgboost 进行数据分析的完整示例代码&#xff1a;A walk through python example for UCI Mushroom dataset is provided.2. 参数调优 Complete Guide to Parameter Tuning in XGBoost (with codes in Python)转载于:https://www…