javascript
在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
總結
以上是生活随笔為你收集整理的在Apache Camel中使用Spring数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直角三角形的面积公式 你知道吗
- 下一篇: Spring Cloud对Hystrix