教程:http://www.tutorialspoint.com/spring/aop_with_spring.htm
http://examples.javacodegeeks.com/enterprise-java/spring/aop/spring-aop-example/
http://hyhai7.iteye.com/blog/837497
http://www.journaldev.com/2583/spring-aop-example-tutorial-aspect-advice-pointcut-joinpoint-annotations-xml-configuration
自定义注解:
http://www.cnblogs.com/shipengzhi/articles/2716004.html
2015年8月23日星期日
Spring cache
官方doc:
http://spring.io/guides/gs/caching/
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html
Blog介绍:https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/
http://spring.io/guides/gs/caching/
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html
Blog介绍:https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/
spring schedule
http://spring.io/guides/gs/scheduling-tasks/
官方doc:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
http://gong1208.iteye.com/blog/1773177
Spring整合JMS
JMS原理:http://docs.oracle.com/cd/E19148-01/820-0533/aeras/index.html
JMS和MQ原理:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt127
基于spring Boot和annotion的实例:http://spring.io/guides/gs/messaging-jms/
基于配置文件的JMS实例:
http://haohaoxuexi.iteye.com/blog/1893038
http://haohaoxuexi.iteye.com/blog/1893676-介绍了各种listener
http://haohaoxuexi.iteye.com/blog/1900937-介绍了messageConverter
http://haohaoxuexi.iteye.com/blog/1983532-介绍了事务支持
官方doc:
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html
JMS和MQ原理:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt127
基于spring Boot和annotion的实例:http://spring.io/guides/gs/messaging-jms/
基于配置文件的JMS实例:
http://haohaoxuexi.iteye.com/blog/1893038
http://haohaoxuexi.iteye.com/blog/1893676-介绍了各种listener
http://haohaoxuexi.iteye.com/blog/1900937-介绍了messageConverter
http://haohaoxuexi.iteye.com/blog/1983532-介绍了事务支持
官方doc:
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jms.html
2015年8月18日星期二
Spring Batch
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。
适用的业务方案:
1、批处理定期提交。
2、并行批处理:并行处理工作。
3、企业消息驱动处理
4、大规模的并行处理
5、手动或是有计划的重启
6、局部处理:跳过记录(如:回滚)
适用的业务方案:
1、批处理定期提交。
2、并行批处理:并行处理工作。
3、企业消息驱动处理
4、大规模的并行处理
5、手动或是有计划的重启
6、局部处理:跳过记录(如:回滚)
外部控制器调用JobLauncher启动一个Job,Job调用自己的Step去实现对数据的操作,Step处理完成后,再将处理结果一步步返回给上一层,这就是Batch处理实现的一个简单流程。
参考:
http://www.ibm.com/developerworks/cn/java/j-lo-springbatch1/
http://www.ibm.com/developerworks/cn/java/j-lo-springbatch2/
2015年8月9日星期日
Spring Data Redis资料整理
Redis介绍
http://www.ibm.com/developerworks/cn/java/os-springredis/
Spring 整合 Redis:spring data redis基础使用
http://blog.csdn.net/java2000_wl/article/details/8543203/
http://www.ibm.com/developerworks/cn/java/os-springredis/
Spring 整合 Redis:spring data redis基础使用
http://blog.csdn.net/java2000_wl/article/details/8543203/
使用Spring Data + Redis实现缓存:基于@cache实现
http://www.jdon.com/repository/redis.html
http://blog.joshuawhite.com/java/caching-with-spring-data-redis/
Spring Cache注解+Redis
http://hanqunfeng.iteye.com/blog/2176172
Spring Data Redis实现一个订阅/发布系统
http://www.open-open.com/lib/view/open1351324403395.html
使用Spring Data Redis操作Redis
涉及进行master切换,事务相关内容
http://aiilive.blog.51cto.com/1925756/1627455
两种方式实现pub/sub消息系统:注册bean和使用Redis命名空间的方式配置
http://aiilive.blog.51cto.com/1925756/1627478
Spring-data-redis:特性与实例
http://shift-alt-ctrl.iteye.com/blog/1886831
Redis连接池简单介绍
http://shift-alt-ctrl.iteye.com/blog/1885910
Spring-data-redis: 事务与pipeline
http://shift-alt-ctrl.iteye.com/blog/1887473
Spring-data-redis: pub/sub消息订阅-->redis的消息订阅不是持久化的
http://shift-alt-ctrl.iteye.com/blog/1887700
改进为持久化的消息队列:http://shift-alt-ctrl.iteye.com/blog/1867454
征服redis系列
http://snowolf.iteye.com/blog/1630697 安装和简单的使用
http://snowolf.iteye.com/blog/1633196 客户端进行shard
http://snowolf.iteye.com/blog/1666908
http://www.jdon.com/repository/redis.html
http://blog.joshuawhite.com/java/caching-with-spring-data-redis/
Spring Cache注解+Redis
http://hanqunfeng.iteye.com/blog/2176172
Spring Data Redis实现一个订阅/发布系统
http://www.open-open.com/lib/view/open1351324403395.html
使用Spring Data Redis操作Redis
涉及进行master切换,事务相关内容
http://aiilive.blog.51cto.com/1925756/1627455
两种方式实现pub/sub消息系统:注册bean和使用Redis命名空间的方式配置
http://aiilive.blog.51cto.com/1925756/1627478
Spring-data-redis:特性与实例
http://shift-alt-ctrl.iteye.com/blog/1886831
Redis连接池简单介绍
http://shift-alt-ctrl.iteye.com/blog/1885910
Spring-data-redis: 事务与pipeline
http://shift-alt-ctrl.iteye.com/blog/1887473
Spring-data-redis: pub/sub消息订阅-->redis的消息订阅不是持久化的
http://shift-alt-ctrl.iteye.com/blog/1887700
改进为持久化的消息队列:http://shift-alt-ctrl.iteye.com/blog/1867454
征服redis系列
http://snowolf.iteye.com/blog/1630697 安装和简单的使用
http://snowolf.iteye.com/blog/1633196 客户端进行shard
http://snowolf.iteye.com/blog/1666908
2015年8月5日星期三
Spring Data初见
Spring Data 作为SpringSource的其中一个父项目, 旨在统一和简化对各类型持久化存储, 而不拘泥于是关系型数据库还是NoSQL 数据存储。无论是哪种持久化存储, 数据访问对象(或称作为DAO,即Data Access Objects)通常都会提供对单一域对象的CRUD (创建、读取、更新、删除)操作、查询方法、排序和分页方法等。Spring Data则提供了基于这些层面的统一接口(CrudRepository,PagingAndSortingRepository)以及对持久化存储的实现。
Spring Data包括许多子项目:
Spring Data 项目旨在为大家提供一种通用的编码模式。数据访问对象实现了对物理数据层的抽象, 为编写查询方法提供了方便。通过对象映射, 实现域对象和持续化存储之间的转换, 而模板提供的是对底层存储实体的访问实现。
使用 Spring Data JPA 进行持久层开发大致需要的三个步骤:
1.声明持久层的接口,该接口继承 Repository,Repository 是一个标记型接口,它不包含任何方法,当然如果有需要,Spring Data 也提供了若干 Repository 子接口,其中定义了一些常用的增删改查,以及分页相关的方法。
2.在接口中声明需要的业务方法。Spring Data 将根据给定的策略来为其生成实现代码。
3.在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象。配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。
此外,<jpa:repository> 还提供了一些属性和子标签,便于做更细粒度的控制。可以在 <jpa:repository> 内部使用 <context:include-filter>、<context:exclude-filter> 来过滤掉一些不希望被扫描到的接口。
Spring Data JPA:
Spring Data JPA 的发布包包含Spring Data Commons 和 Spring Data JPA 两个发布包,Commons 是 Spring Data 的公共基础包。使用 Spring Data JPA 进行持久层开发大致需要的三个步骤:
1.声明持久层的接口,该接口继承 Repository,Repository 是一个标记型接口,它不包含任何方法,当然如果有需要,Spring Data 也提供了若干 Repository 子接口,其中定义了一些常用的增删改查,以及分页相关的方法。
2.在接口中声明需要的业务方法。Spring Data 将根据给定的策略来为其生成实现代码。
3.在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象。配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。
此外,<jpa:repository> 还提供了一些属性和子标签,便于做更细粒度的控制。可以在 <jpa:repository> 内部使用 <context:include-filter>、<context:exclude-filter> 来过滤掉一些不希望被扫描到的接口。
接口继承
持久层接口继承 Repository 并不是唯一选择。Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。
1.如果持久层接口较多,且每一个接口都需要声明相似的增删改查方法,直接继承 Repository 就显得有些啰嗦,这时可以继承 CrudRepository,它会自动为域对象创建增删改查方法,供业务层直接使用。开发者只是多写了 "Crud" 四个字母,即刻便为域对象提供了开箱即用的十个增删改查方法。
2.使用 CrudRepository 也有副作用,它可能暴露了你不希望暴露给业务层的方法。比如某些接口你只希望提供增加的操作而不希望提供删除的方法。针对这种情况,开发者只能退回到 Repository 接口,然后到 CrudRepository 中把希望保留的方法声明复制到自定义的接口中即可.
3.分页查询和排序是持久层常用的功能,Spring Data 为此提供了 PagingAndSortingRepository 接口,它继承自 CrudRepository 接口,在 CrudRepository 基础上新增了两个与分页有关的方法。但是,我们很少会将自定义的持久层接口直接继承自 PagingAndSortingRepository,而是在继承 Repository 或 CrudRepository 的基础上,在自己声明的方法参数列表最后增加一个 Pageable 或 Sort 类型的参数,用于指定分页或排序信息即可,这比直接使用 PagingAndSortingRepository 提供了更大的灵活性。
4.JpaRepository 是继承自 PagingAndSortingRepository 的针对 JPA 技术提供的接口,它在父接口的基础上,提供了其他一些方法,比如 flush(),saveAndFlush(),deleteInBatch() 等。如果有这样的需求,则可以继承该接口。
1.如果持久层接口较多,且每一个接口都需要声明相似的增删改查方法,直接继承 Repository 就显得有些啰嗦,这时可以继承 CrudRepository,它会自动为域对象创建增删改查方法,供业务层直接使用。开发者只是多写了 "Crud" 四个字母,即刻便为域对象提供了开箱即用的十个增删改查方法。
2.使用 CrudRepository 也有副作用,它可能暴露了你不希望暴露给业务层的方法。比如某些接口你只希望提供增加的操作而不希望提供删除的方法。针对这种情况,开发者只能退回到 Repository 接口,然后到 CrudRepository 中把希望保留的方法声明复制到自定义的接口中即可.
3.分页查询和排序是持久层常用的功能,Spring Data 为此提供了 PagingAndSortingRepository 接口,它继承自 CrudRepository 接口,在 CrudRepository 基础上新增了两个与分页有关的方法。但是,我们很少会将自定义的持久层接口直接继承自 PagingAndSortingRepository,而是在继承 Repository 或 CrudRepository 的基础上,在自己声明的方法参数列表最后增加一个 Pageable 或 Sort 类型的参数,用于指定分页或排序信息即可,这比直接使用 PagingAndSortingRepository 提供了更大的灵活性。
4.JpaRepository 是继承自 PagingAndSortingRepository 的针对 JPA 技术提供的接口,它在父接口的基础上,提供了其他一些方法,比如 flush(),saveAndFlush(),deleteInBatch() 等。如果有这样的需求,则可以继承该接口。
查询方式
1.通过解析方法名创建查询
框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。
2.使用 @Query 创建查询
@Query 注解的使用非常简单,只需在声明的方法上面标注该注解,同时提供一个 JP QL 查询语句即可,如下所示:
3.通过调用 JPA 命名查询语句创建查询
命名查询是 JPA 提供的一种将查询语句从方法体中独立出来,以供多个方法共用的功能。Spring Data JPA 对命名查询也提供了很好的支持。用户只需要按照 JPA 规范在 orm.xml 文件或者在代码中使用 @NamedQuery(或 @NamedNativeQuery)定义好查询语句,唯一要做的就是为该语句命名时,需要满足”DomainClass.methodName()”的命名规则。假设定义了如下接口
1.通过解析方法名创建查询
框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。
2.使用 @Query 创建查询
@Query 注解的使用非常简单,只需在声明的方法上面标注该注解,同时提供一个 JP QL 查询语句即可,如下所示:
3.通过调用 JPA 命名查询语句创建查询
命名查询是 JPA 提供的一种将查询语句从方法体中独立出来,以供多个方法共用的功能。Spring Data JPA 对命名查询也提供了很好的支持。用户只需要按照 JPA 规范在 orm.xml 文件或者在代码中使用 @NamedQuery(或 @NamedNativeQuery)定义好查询语句,唯一要做的就是为该语句命名时,需要满足”DomainClass.methodName()”的命名规则。假设定义了如下接口
Spring Data JPA 对事务的支持
默认情况下,Spring Data JPA 实现的方法都是使用事务的。针对查询类型的方法,其等价于 @Transactional(readOnly=true);增删改类型的方法,等价于 @Transactional。可以看出,除了将查询的方法设为只读事务外,其他事务属性均采用默认值。
如果用户觉得有必要,可以在接口方法上使用 @Transactional 显式指定事务属性,该值覆盖 Spring Data JPA 提供的默认值。同时,开发者也可以在业务层方法上使用 @Transactional 指定事务属性,这主要针对一个业务层方法多次调用持久层方法的情况。持久层的事务会根据设置的事务传播行为来决定是挂起业务层事务还是加入业务层的事务。具体 @Transactional 的使用可以参考Spring的参考文档。
订阅:
博文 (Atom)


