idea spring project

来源:互联网 发布:人工鱼群算法 编辑:程序博客网 时间:2024/05/18 20:31
一、Spring 
1.Spring Batch: Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。

业务方案:
1、批处理定期提交。
2、并行批处理:并行处理工作。
3、企业消息驱动处理
4、大规模的并行处理
5、手动或是有计划的重启
6、局部处理:跳过记录(如:回滚)
技术目标:
1、利用Spring编程模型:使程序员专注于业务处理,让Spring框架管理流程。
2、明确分离批处理的执行环境和应用。
3、提供核心的,共通的接口。
4、提供开箱即用(out of the box)的简单的默认的核心执行接口。
5、提供Spring框架中配置、自定义、和扩展服务。
6、所有存在的核心服务可以很容的被替换和扩展,不影响基础层。
7、提供一个简单的部署模式,利用Maven构建独立的Jar文件。

Spring Batch的结构:


这种分层结构有三个重要的组成部分:应用层、核心层、基础架构层。应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。应用层和核心层建立在基础构架层之上,基础构架层提供共通的读(ItemReader)、写(ItemWriter)、和服务(如RetryTemplate:重试模块。可以被应用层和核心层使用)。


2.Spring-Data-JPA:PA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术;JPA是一套规范,不是一套产品;


Spring-data-jpa和JPA区别
Spring data jpa是在JPA规范下提供了Repository层的实现,但是使用哪一种ORM需要你来决定。stackoverflow答案。虽然ORM框架都实现了JPA规范,但是在不同的ORM框架之间切换仍然需要编写不同的代码,而通过使用Spring data jpa能够方便大家在不同的ORM框架之间进行切换而不要更改代码。并且spring data jpa 对Repository层封装的很好,也省去了不少的麻烦。


3.Spring Integration
目标和原则
Spring Integration主要有如下两个目标:
l  提供一个简单的模型来实现复杂的企业集成解决方案
l  为基于Spring的应用添加异步的、消息驱动的行为
l  让Spring用户可以直观的、增量的采用
 
Spring Integration基于两个原则:
l  组件应该松耦合,方便模型化和易测试
l  框架应该强制业务逻辑和集成逻辑的关注点分离
l  扩展点本质上应该是抽象的,而且限定在一个清晰的边界内,来促进可重用性和可移植性。
 
主要组件
纵向地看,一个分层的架构利于关注点的分离,各层间基于接口的契约实现了松耦合。典型地,基于Spring的应用就是这样设计的,Spring框架和工具集提供了一个遵从最佳实践、全栈式开发企业级应用的强大基础。横向地看,消息驱动架构添加了横向视图,虽然这些目标还是相关的。分层架构是一个非常通用和抽象的范式,消息系统非常符合同样抽象的“管道和过滤器”模型。“过滤器”代表任何能够生产和(或)消费消息的组件,“管道”在过滤器间传输消息,所以组件间保持松耦合。值得指出的是,这两个高级范式不是互斥的。其中的消息基础设施支持包装“管道”到契约被定义为接口的层。同样地,“过滤器”一般被管理在逻辑上位于应用系统的服务层之上的层中,其与那些服务在相同的方式下通过接口交互。
 
消息
在Spring Integration中,消息是任何Java对象连同框架处理对象时使用的元数据的一个通用包装。它由负载和头部组成。负载可以是任何类型,头部保存一般的请求信息,例如id,时间戳,过期时间和返回地址。头部也被用来在各种传输协议间传值。比如,从接收到的一个文件创建一个消息时,可以把文件名存储在头部,这些下游的组件就可以使用它。同样地,如果一个消息的内容最终被一个对外接出的Mail适配器发送,各种属性(收件人,发送人,抄送人,主题等)可以被上游组件配置为消息头部值。开发者也可以在头部存储任意的键值对。
http://dl.javaeye.com/upload/picture/pic/70012/85f26759-f68e-3197-a8cc-9825dfafbf3b.png 
消息通道


一个消息通道代表“管道和过滤器”架构中的一个“管道”。消息生产者发送消息到通道,消息消费者从通道接收消息。消息通道因此解耦了消息组件,同时也提供了消息拦截和监控的切入点。
http://dl.javaeye.com/upload/picture/pic/70010/e1a34489-ce88-33de-b2f0-a1968dfab532.png 
一个消息通道可能符合点对点模式或者发布-订阅模式。如果是点对点模式的通道,发布到通道中的每个消息,最多只有一个消费者可以接收。如果是发布-订阅模式的通道,则会尝试广播每个消息给其所有的订阅者。Spring Integration支持这两种模式。
鉴于“点对点模式”和“发布订阅模式”定义了每个消息最终有多少消息消费者接收的两种方式,这里有一个重要的考虑:通道是否应该缓冲消息?Spring Integration中,轮询通道(Pollable Channels)具有在一个队列中缓冲消息的能力。缓冲的优势在于它能够调节接入消息流量,从而防止系统负荷过载。然而,正如其名称所示,这也增加了一些复杂性,只有配置了轮询器后,一个消息消费者才能从这个通道中接收消息。另外来说,订阅通道(Subscribable Channel)要求连接它的消费者依从简单的消息驱动模式。Spring Integration中还有多种通道的可用实现,将在第3.2章节“消息通道实现”中详细讨论。
 
消息终端
Spring Integration的主要目标之一是通过控制反转简化企业集成解决方案的开发。这意味着你应该不需要直接实现消息消费者和生产者,更不需要在消息通道中构建和调用发送接收操作的细节。相反地,你只需要关注于你基于普通对象实现的特定领域模型。然后,通过宣告式的配置,你可以“连接”你的领域特定代码到Spring Integration提供的消息基础设施。负责这些连接的代码是消息终端。这并不是说必须直接连接到现有应用的代码。任何现有的企业集成解决方案,都需要一些用于集成相关的代码,例如路由选择和协议转换。其中的一个要点就是实现集成逻辑和业务逻辑关注点的分离。换句话说,作为web应用中的MVC模式,其目标应该是提供一个简单而专用的层,转换接入的请求到服务层调用,然后转换服务层返回值到接出的响应。下一节将讲述处理这些响应的各种消息端点概况,接下来的章节,将为你展示Spring Integration每个宣言式的配置选项是如何提供一个非侵入性的使用方式的。
 
消息端点
一个消息端点代表“管道和过滤器架构”中的一个“过滤器”。就像前面提到的,端点的主要角色是连接应用代码到消息框架,当然它使用非侵入性的方式。换句话说,应用代码应该完全意识不到消息对象或者消息通道的存在。这就好比MVC模式中的控制器角色。就像控制器处理HTTP请求,消息端点处理消息。而控制器被映射到URL模式,消息端点被映射到消息通道。这两个例子中存在相同的目标:从基础设置中分离应用代码。《企业应用集成》一书中详细地讨论了这些概念及其各种模式。这里我们只概括地描述Spring Integration支持的主要端点类型和它们的角色。本章将提供实例代码并详细阐述。
 
消息转换器
消息转换器负责转换一个消息的内容或结构,并返回翻修改后的消息。最常见的转换器可能是把消息负载从一种格式转换成另一种格式的转换器(例如从XML文档转换成java.lang.String字符串)。同样地,转换器也可以被用于添加、删除和修改消息头中的值。
 
过滤器
消息过滤器最终决定消息是否被发送到输出通道。这简单地依赖于一个布尔型的测试方法,它可以检查消息是否包含特定的负载内容的类型,一个属性值,是否包含消息头等等。如果一个消息被接受,它将被发送到输出通道,否则消息将被丢弃(或者在一个更严格的实现里,应该抛出一个异常信息)。消息过滤器通常和发布订阅通道一起使用,此时多个消费者接收到相同的消息,而在某些条件下使用过滤器可以减少需要处理的消息数量。
 
注意
应当注意不要混淆“管道和过滤器”架构模式中常说的“过滤器”和在两个通道之间有选择地限制消息流动的特定端点类型。Spring Integration中的端点更接近于“管道和过滤器”架构模式中的“过滤器”:任何组件都可以被连接到消息通道,来发送和(或)接收消息。
 
路由
消息路由负责决定下个消息将由哪些通道接收。典型地,这种决定是基于消息的内容和(或)消息头部中的可用元数据。一个消息路由常常作为动态配置输出通道的一个动态选择,用在消息激活器或是其它的能发送响应消息的端点上。同样地,相对于被动的消息过滤器方式,消息路由提供一个主动的方式被多个订阅者使用,就像上面描述的那样。
 
消息分解器
消息分解器是另外一种类型的消息端点,它负责从一个输入通道中接收一个消息,把消息分解成多个消息,然后把它们发送到相应的输出通道。一个典型的例子就是把一个复合的负载对象分解成一组包含各个子负载的消息。
 
聚合器
集合器基本上是分解器的镜像,也是一种消息端点,它接收多个消息,然后把他们合并成一个单独的消息。事实上,聚合器经常和管道中的分解器一起用来减少消费者数量。技术上来说,聚合器比分解器更复杂,因为它需要维持状态(被聚合的多个消息),决定整组消息何时可用,以及必要时处理超时。此外,在超时的情况下,聚合器需要知道是发送部分的消息,还是丢弃它们到一个单独的通道。Spring Integration提供了可配置的超时处理策略,在超时时发送部分结果,还是发送到收集丢弃消息的通道。
 
服务激活器
服务激活器是一个连接服务实例到消息系统的通用端点。输入消息通道必须被配置,然后如果被调用的服务方法能够返回一个值,说明输出消息通道可能也被提供了。
 
通道适配器
通道适配器是一个连接消息通道到其他系统或是传输的端点。通道适配器可以是接入或是接出的。典型地,通道适配器可以在消息和其他任何发送到/接收于其他系统(文件、HTTP请求,JMS消息等等)的对象或资源之间做一些映射。依赖于传输,通道适配器也可以构造或是修改消息头的值。Spring Integration提供了一些通道适配器。


4.Spring MVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。


5.Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。


6.Spring Web Flow
Spring Web Flow (SWF) 是Spring Framework的一个脱离模块。这个模块是Spring Web应用开发模块栈的一部分,Spring Web包含Spring MVC。Spring Web Flow 的目标是成为管理Web应用页面流程的最佳方案。当你的应用需要复杂的导航控制,例如向导,在一个比较大的事务过程中去指导用户经过一连串的步骤的时候,SWF将会是一个功能强大的控制器。
基本元素编辑
Flow 可看作是客户端与服务器的一次对话( conversation )。 Flow 的完成要由分多个步骤来实现,在 Spring Web Flow 的语义中,步骤指的就是 state 。 Spring Web Flow 提供了五种 state ,分别是 Action State 、 View State 、 Subflow State 、 Decision State 、 End State ,这些 state 可用于定义 flow 执行过程中的各个步骤。除了 End State 外,其他 state 都可以转换到别的 state ,一般通过在 state 中定义 transition 来实现到其他 state 的转换,转换的发生一般由事件( event )来触发。
7.Spring Web Services
Spring提供标准Java web services APIs完全支持:使用JAX-WS暴露web业务;使用JAX-WS访问web业务;为了在Spring核心中添加JAX-WS的支持,Sprig也强化了Spring web services,一种契约优先,文档驱动的web Services的解决方案。Spring为JAX-WS Servlet终端实现类(SpringBeanAutowiringSupport)提供了一个方便的基类。为暴露AccountService,扩展了Spring的SpringBeanAutowiringSupport类并在这里实现了业务逻辑,通常委托这个调用给业务层。
原创粉丝点击