javaweb
文章平均质量分 85
jeanheo
这个作者很懒,什么都没留下…
展开
-
Spring4.1新特性——Spring缓存框架增强
Spring 4.1提供了对jcache的支持,并对cache抽象部分进行了一些简单的增强。在集成jcache时是非常费劲的,版本之间各种不兼容,不建议用于正式环境,在正式环境中可以使用如Guava Cache或Ehcache。 jcache依赖:Java代码 net.sf.ehcache ehcache-jcache ${ehca转载 2016-03-14 19:28:54 · 1114 阅读 · 0 评论 -
hibernate5(11)注解映射[3]一对多多对一双向关联
在上两篇文章里,我们详细地分别讲解了一对多和多对一的单向关联配置的具体属性含义,在这一篇文章里,我们完成两者的的整合建立双向关联。 在实际的博客网站中,我们可能需要根据文章读取作者(用户)信息,但肯定也要让用户能获取自己的文章信息,针对这种需求,我们可以建立文章(多)对用户(一)的双向关联映射。 下面先看实例映射配置文件:/********************一方配置User********原创 2016-04-08 08:51:45 · 6334 阅读 · 0 评论 -
hibernate5(12)注解映射[4]一对一外键关联
在实际博客网站中,文章内容的数据量非常多,它会影响我们检索文章其它数据的时间,如查询发布时间、标题、类别的等。这个时候,我们可以尝试将文章内容存在另一张表中,然后建立起文章——文章内容的一对一映射一对一关联有两种方式,一种是外键关联,另一种是复合主键关联。外键关联下面我们先看一个一对一单向关联的实例/*************关联关系维护方************/原创 2016-04-09 09:52:36 · 7074 阅读 · 1 评论 -
Quartz任务调度(3)存储与持久化操作配置详细解析
内存存储RAMJobStoreQuartz默认使用RAMJobStore,它的优点是速度。因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快。而无须访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的。因而我们每次重启程序,Scheduler 的状态,包括 Job 和 Trigger 信息都丢失了。 Quartz 的内存 J原创 2016-03-26 22:06:00 · 14028 阅读 · 1 评论 -
spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能
引介增强实例需求在前面我们已经提到了前置、后置、环绕、最终、异常等增强形式,它们的增强对象都是针对方法级别的,而引介增强,则是对类级别的增强,我们可以通过引介增强为目标类添加新的属性和方法,更为诱人的是,这些新属性或方法是可以根据我们业务逻辑需求而动态变化的。怎么来理解这一点?我们先展示一个用引介增强解决的显示需求问题,现在先来看看我们的一个需求: 我们要设计一个定时任务,在每天特定流量高峰时间原创 2016-03-23 13:48:15 · 6672 阅读 · 5 评论 -
spring学习笔记(12)@AspectJ研磨分析[3]增强织入顺序实例详解
增强的织入顺序当一个连接点同时织入多个增强时,就存在顺序调用问题: 1. 增强在同一个切面类中定义:依照增强在切面类中定义的顺序依次织入。 2. 增强位于不同的切面,但果这些切面都实现了org.springframework.core.Ordered 接口,则由接口注解的顺序号决定,顺序号越小,对于不同的增强,织入顺序为: 1. 前置增强->越先织入 2. 后置增强->越后原创 2016-03-22 09:46:12 · 3401 阅读 · 1 评论 -
springMVC4(16)拦截器解析与登陆拦截模拟
在SpringMVC中,我们会经常使用到拦截器,虽然SpringAOP也能帮我们实现强大的拦截器功能,但在Web资源供给上,却没有SpringMVC来得方便快捷。 使用SpringMVC拦截器的核心应用场景是根据我们的实际需求,个性化定制拦截器,再对特定url进行拦截处理。 而自定义拦截器,首先需要我们实现HandlerInterceptor拦截器接口,下面是它的定义:原创 2016-04-08 20:36:25 · 14732 阅读 · 0 评论 -
springMVC4(15)RestFul多视图混合输出
混合使用多种视图技术。在前面文章里,我们对jsp、json、xml个中视图都进行了较为详细的实例解析,但涉及到的都是单视图使用配置。在实际开发中,我们可能需要混合是使用多种视图技术。尤其是针对REST编程风格,我们可以通过一个URL、多种视图来切合REST风格的同一资源、多种表述。 现在加入我们要输出JSP、JSON、XML多种视图技术,如果使用我之前文章《springMVC4(4)json与对象原创 2016-04-07 00:19:26 · 6716 阅读 · 1 评论 -
spring学习笔记(25)spring整合quartz多版本实现企业级任务调度
在我们的另一个专栏《深入浅出Quartz任务调度》详细的讲解了使用Quartz适用于从普通门户至网站企业级系统的任务调度实现方法。在下面我们结合实例来完整spring和quartz的整合工作,将我们对quartz的配置统一交给spring容器进行管理。quartz1与quartz2两个版本的差别较大,他们的具体差别可参考我的另一篇文章Quartz任务调度(1)概念例析快速入门 。鉴于我们的实际项目中原创 2016-03-28 16:58:21 · 2069 阅读 · 1 评论 -
spring学习笔记(24)基于注解配置事务
使用注解的方式配置事务极为便利,在xml文件上只需声明我们的注解,然后即可直接在相应service类通过标注注解来完成事务配置。相对于配置在xml文件,简洁了需要,但配置信息分散,会导致易读性大大减弱。使用步骤:1. 在spring容器中注册注解搜索器目的是使分散在各业务类中的注解得以生效 tx:annotation-driven transaction-manage原创 2016-03-26 14:40:32 · 1402 阅读 · 1 评论 -
hibernate5(10)注解映射[2]一对多单向关联
一对多单向关联映射在实际的博客网站中,用户肯定需要获取自己所写的文章,这时可以建立用户(一)对文章(多)的单向关联映射。 先来看我们的一方配置实例package com.zeng.model;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax原创 2016-04-07 09:26:33 · 8079 阅读 · 1 评论 -
Spring4.1新特性——Spring MVC增强
Spring 4.1对Spring MVC部分做的增强是最多的,提供了一些视图解析器的mvc标签实现简化配置、提供了GroovyWebApplicationContext用于Groovy web集成、提供了Gson、protobuf的HttpMessageConverter、提供了对groovy-templates模板的支持、JSONP的支持、对Jackson的@JsonView的支持等。转载 2016-03-14 19:34:28 · 2297 阅读 · 0 评论 -
Spring4.1新特性——Spring缓存框架增强
本文其实不应该算作Spring4.1新特性,该测试框架目前是独立于Spring Framework发展的。Spring MVC Test HtmlUnit提供了Spring MVC测试框架、HtmlUnit、 WebDriver、Geb的集成测试,简化页面自动化测试,利用这些技术可以完成无需启动服务器即可进行页面测试、自动化页面/页面流程测试、Javascript测试、Mock Servi转载 2016-03-14 19:36:08 · 895 阅读 · 0 评论 -
spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例
database2在这一篇文章中,我们要用JNDI访问我们的应用服务器配置好的多数据源。在本实例中,我们使用本地的tomcat服务器来模拟远程服务器,由于本地只有mysql数据库,故通过访问不同的mysql数据库不同database来模拟同时访问不同数据库如mysql和oracle等。 下面是我们的配置步骤。 1. 在服务器配置全局数据源 1. 在我们的tomcat服务器下找到c原创 2016-03-25 00:24:21 · 2537 阅读 · 2 评论 -
spring学习笔记(19)mysql读写分离后端AOP控制实例
在这里,我们接上一篇文章,利用JNDI访问应用服务器配置的两个数据源来模拟同时操作不同的数据库如同时操作mysql和oracle等。实际上,上个例子可能用来模拟mysql数据库主从配置读写分离更贴切些。既然如此,在本例中,我们就完成读写分离的模拟在web端的配置实例。续上次的例子,关于JNDI数据源的配置和spring datasource的配置这里不再重复。下面着重加入AOP实现DAO层动态原创 2016-03-25 00:19:31 · 1450 阅读 · 0 评论 -
spring学习笔记(7)AOP前夕[2]CGLib动态代理实例解析
CGLib动态代理基本原理CGLib——Code Generation Library,它是一个动态字节代码生成库,基于asm。使用CGLib时需要导入asm相关的jar包。而asm又是何方神圣? asm是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class原创 2016-03-24 18:51:39 · 2246 阅读 · 2 评论 -
spring学习笔记(22)声明式事务配置,readOnly无效写无异常
在上一节内容中,我们使用了编程式方法来配置事务,这样的优点是我们对每个方法的控制性很强,比如我需要用到什么事务,在什么位置如果出现异常需要回滚等,可以进行非常细粒度的配置。但在实际开发中,我们可能并不需要这样细粒度的配置。另一方面,如果我们的项目很大,service层方法很多,单独为每个方法配置事务也是一件很繁琐的事情。而且也可能会造成大量重复代码的冗杂堆积。面对这些缺点,我们首要想到的就是我们sp原创 2016-03-26 00:33:02 · 4346 阅读 · 0 评论 -
spring学习笔记(23)基于tx/aop配置切面增强事务
在上一篇文章中,我们使用了声明式事务来配置事务,使事务配置从service逻辑处理中解耦出来。但它还存在一些缺点: 1. 我们只针对方法名的特定进行拦截,但无法利用方法签名的其它信息定位,如修饰符、返回值、方法入参、异常类型等。如果我们需要为同名不同参的同载方法配置不同事务就会出问题了。 2. 事务属性的配置串虽然能包含较多信息,但配置较易出错。针对这些问题,我们可以基于Schema,引入tx和原创 2016-03-26 01:34:24 · 5700 阅读 · 0 评论 -
spring学习笔记(21)编程式事务配置,service层概念引入
编程式事务配置实例导入访问数据库事务导入在我之前的文章《spring学习笔记(19)mysql读写分离后端AOP控制实例》中模拟数据库读写分离的例子,在访问数据库时使用的方法是:public <E> E add(Object object) { return (E) getSessionFactory().openSession().save(object);}通过直接开启session而原创 2016-03-25 22:59:46 · 2673 阅读 · 0 评论 -
hibernate5(9)注解映射[1]多对一单向关联
在实际的项目开发中,我们常常需要建立我们实体类间的复杂关系,比如在一个博客网站中,用户会写文章,则文章与用户的关系就是多对一的映射关系。 现在先看一个配置实例:我们的文章实体类package com.zeng.model;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persi原创 2016-04-07 19:52:23 · 4869 阅读 · 4 评论 -
Quartz任务调度(1)概念例析快速入门
Quartz框架需求引入在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的需求,在《spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能》,我们通过引介增强来简单地模拟实现了一个定时器。它可能只需要我们自己维护一条线程就足以实现定时监控。但在实际开发中,我们遇到的需求会复杂很多,可能涉及多点任务调度,需要我们多线程并发协作、线程池的维护、对运行时间规则进行更细原创 2016-03-27 14:14:15 · 7106 阅读 · 9 评论 -
Quartz任务调度(2)CronTrigger定制个性化调度方案
Cron表达式1. 时间字段与基本格式Cron表达式有6或7个空格分割的时间字段组成: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ,-*/ 2 分支 0-59 ,-*?/ 3 小时 0-23 ,-*/ 4 日期 1-31 ,-*/LWC 5 月份 1原创 2016-03-26 22:51:04 · 2946 阅读 · 2 评论 -
spring学习笔记(26)spring整合Quartz2持久化稳健任务调度
在《Quartz任务调度(3)存储与持久化操作配置详细解析 》一文中,我们通过配置quartz.properties属性文件实现了Quartz的数据库持久化操作。现在整合spring的原理,就是相当于把我们在属性文件中的配置属性整合进SchedulerFactoryBean中,来生成我们的Scheduler类。 这里需要特别注意的是,我们通过Bean配置生成的JobDetail和CronTrigg原创 2016-03-28 17:04:53 · 3749 阅读 · 2 评论 -
【Pigeon源码阅读】服务发现与调用初始化流程解析(五)
文章目录测试代码InvokerConfig定义服务调用方静态初始化流程ServiceFactory静态初始化ServiceFactory#getService方法实现调用方启动类InvokerBootStrap 初始化流程解析序列化类创建服务代理对象ServiceInvocationProxy注册负载均衡管理器区域路由策略发布客户端到注册中心基于Xml配置完成服务注册测试代码以下面最小化代码初...原创 2019-02-01 11:34:20 · 876 阅读 · 0 评论 -
【Pigeon源码阅读】服务调用请求流程解析(六)
文章目录服务代理对象调用原理InvocationContext 调用上下文讲解pigeon自带拦截器解析RemoteCallMonitorInvokeFilterTraceFilterFaultInjectionFilterDegradationFilterClusterInvokeFilterGatewayInvokeFilterContextPrepareInvokeFilterSecurit...原创 2019-02-01 11:35:37 · 1054 阅读 · 0 评论 -
【Pigeon源码阅读】服务提供响应流程解析(七)
文章目录Netty接收调用方请求过程RequestThreadPoolProcessor 请求线程池处理器拦截器链初始化原理线程池选取原理流量控制原理拦截器执行逻辑WriteResponseProcessFilterContextTransferProcessFilterExceptionProcessFilterSecurityFilterip黑白名单过滤请求app黑白名单过滤token鉴权Ga...原创 2019-02-01 11:36:52 · 597 阅读 · 1 评论 -
【Pigeon源码阅读】RPC底层通信实现原理(八)
文章目录pigeon TCP协议格式粘包半包问题定长消息头格式默认协议消息格式统一协议消息格式消息体Netty3 Handler相关实现上下游传递原理相关实现ChannelHandlerContextOneToOneDecoder &amp; OneToOneEncoderSimpleChannelHandlerChannelEventpigeon RPC通信的核心实现原理服务端实现FrameDe...原创 2019-02-01 11:38:57 · 1185 阅读 · 0 评论 -
【Pigeon源码阅读】客户端集群访问策略实现原理(九)
策略介绍和配置示例在pigeon开源版本中,目前实现了4种集群策略:failfast:调用服务的一个节点失败后抛出异常返回,可以同时配置重试timeoutRetry和retries属性failover:调用服务的一个节点失败后会尝试调用另外的一个节点,可以同时配置重试timeoutRetry和retries属性failsafe:调用服务的一个节点失败后不会抛出异常,返回null,后续版本...原创 2019-02-01 11:42:00 · 466 阅读 · 0 评论 -
【Pigeon源码阅读】区域路由策略实现原理(十)
文章目录DefaultRouteManagerRegionPolicyManager区域路由基础配置配置初始化路由策略应用流程AutoSwitchRegionPolicy 自动切换区域路由路由规则源码实现WeightBasedRegionPolicy 基于权重区域路由路由规则源码实现ForceRegionPolicy 强制区域路由路由规则源码实现在几个集群访问策略中,都需要通过ClientMan...原创 2019-02-01 11:42:50 · 736 阅读 · 0 评论 -
【Pigeon源码阅读】客户端负载均衡实现原理(十一)
文章目录客户端负载均衡入口负载均衡策略总体实现负载均衡策略实现AbstractLoadBalanceRandomLoadBalance 基于权重随机策略AutoawareLoadBalance 最小请求数策略RoundRobinLoadBalance 基于权重轮询策略WeightedAutoawareLoadBalance 基于权重最小请求数策略权重计算方法weightFactors 权重因子Re...原创 2019-02-06 10:22:28 · 639 阅读 · 0 评论 -
【Pigeon源码阅读】高可用之服务限流实现原理(十二)
pigeon服务限流pigeon支持4个纬度的限流策略,当客户端请求达到服务端统计的限流阈值时,会抛出RejectedException。具体限流策略包括:应用限流:限制某个客户端应用的最大QPS应用方法限流:限制某个客户端应用访问某个服务方法的最大QPS单机总限流:限制服务端单机的最大QPS方法线程数限流:限制单个方法最大访问线程数,避免因为单个方法异常流量过大阻塞线程池,导致其他方...原创 2019-02-06 10:22:45 · 516 阅读 · 0 评论 -
【Pigeon源码阅读】高可用之故障注入实现原理(十三)
故障注入pigeon提供故障注入功能来模拟在调用出现异常时的处理测试,由客户端拦截器FaultInjectionFilter完成,具体有两种故障注入方式,分别为:EXCEPTION:抛出注入异常FaultInjectionException超时:尝试模拟请求特定时长,然后抛出RequestTimeoutException超时异常。相关的配置如下:pigeon.fault.injec...原创 2019-02-06 10:22:48 · 1270 阅读 · 1 评论 -
【Pigeon源码阅读】服务注册发布流程(四)
文章目录测试代码ProviderConfig定义ServerConfig配置服务提供方静态初始化流程ServiceFactory静态初始化ProviderBootStrap初始化流程注册服务调用请求的处理拦截器初始化序列化工厂初始化注册管理器addService发布服务流程检查服务名ServicePublisher添加解析服务启动netty RPC服务器调用ServicePublisher发布服务...原创 2019-02-01 11:33:28 · 1135 阅读 · 0 评论 -
【Pigeon源码阅读】整合Spring注解解析原理(三)
文章目录pigeon使用方法pigeon注解解析器注册xml pigeon注解标签解析AnnotationBean扫描特定包@Service注解类原理AnnotationBean 注解@Service属性依赖注入原理AnnotationBean 注解@Reference属性依赖注入原理pigeon使用方法pigeon通过配置<pigeon:annotation package="com....原创 2019-02-01 11:21:08 · 1004 阅读 · 0 评论 -
hibernate5(13)注解映射[5]一对一共享主键关联
一对一共享主键下面我们直接通过实例来讲解共享主键配置: 主键主控方:Articlepackage com.zeng2.model;@Table(name = "t_article2")@Entitypublic class Article { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Inte原创 2016-04-10 09:09:02 · 5569 阅读 · 0 评论 -
hibernate5(14)注解映射[6]多对多中间表关联
在我们的角色管理系统中,一个用户可以有多种角色,一种角色可以赋予多个用户,显然用户和角色就是典型的多对多关系。又或者博客网站上,用户与文章点赞记录也是一个多对多关系,即一个用户可以点赞多篇文章,一篇文章可以给多个用户点赞等,这时候,我们往往需要附加一些信息,比如授权时间、点赞时间等。在上面两个实例中,都可对应于hibernate多对多映射关系的两种方式,在多对多映射中,我们往往使用中间表来建立关联关原创 2016-04-11 08:54:40 · 9683 阅读 · 0 评论 -
hibernate5(15)注解映射[7]集合关联
集合注解映射集合关系映射可以看成是一对多关系映射的一种简化,在一个电商系统里,出售的产品可能会有多张展示图片,如果我们使用一对多来建立关联映射时,需要创建一个实体类Images,里面可能有属性:图片在服务器的访问路径url和图片所属产品productId。但如果我们使用集合关系映射,则无需新建一个实体类,只需在Product中定义一个集合成员属性即可。Set集合在产品中,我们的图片路径一般是不会相同原创 2016-04-13 08:42:36 · 6134 阅读 · 2 评论 -
hibernate5(2)初入门配置实例
入门实例:向数据库插入一个对象1. 第一步需要引入我们的jar包,推荐使用maven管理项目,直接在pom.xml中添加<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.hibernate-version>5.1.0.Final</org.hibernate-ver原创 2016-03-30 01:08:05 · 21169 阅读 · 4 评论 -
设计模式全面摘录笔记
本篇文章参考自http://www.runoob.com/design-pattern/design-pattern-intro.html,主要是对里面提到的各种设计模式介绍的提取设计模式的类型创建型模式这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Patter原创 2017-04-28 12:02:11 · 560 阅读 · 0 评论 -
Volatile关键字深入解析
Volatile关键字volatile 是轻量级的synchronized,在多处理器开发中保证了共享变量的“可见性”,即当一个线程修改共享变量时,另外一个线程能读到这个修改的值,和Synchronized区别在于,它的使用的执行成本更低,它不会引起线程上下文的切换和调度。如果一个字段被声明为bolatile,Java线程内存模型确保所有线程看到这个变量的值是一致的原创 2017-04-21 14:38:51 · 447 阅读 · 0 评论