Mryqu's Notes


  • 首页

  • 搜索
close

[Spring Boot] Use alwaysUseFullPath for Spring MVC URL mapping

时间: 2015-12-03   |   分类: Service+JavaEE   Spring     |   阅读: 125 字 ~1分钟
简介 SpringMVC的URL映射有一个控制路径匹配的参数alwaysUseFullPath。当它被设置为true后,总是使用当前servlet上下文中的全路径进行URL查找,否则使用当前servlet映射内的路径。默认为false。下面示例一下当一个请求的全路径通过servlet映射找到所服务的RequestDispatcherservelet后alwaysUseFullPath为false时URL映射表现: servlet mapping = “/*”; request URI = “/test/a” -> “/test/a” servlet mapping = “/”; request URI = “/test/a” -> “/test/a” servlet mapping = “/test/*”; request URI = “/test/a” -> “/a” servlet mapping = “/test”; request URI = “/test” -> "" servlet mapping = “/*.test”; request URI = “/a.test” -> "" 从org.springframework.web.util.UrlPathHelper的getLookupPathForRequest方法可知,当alwaysUseFullPath为true时使用getPathWithinApplication获得待查找的全路径,否则使用getPathWithinServletMapping获得待查找的剩余路径。 如果对alwaysUseFullPath的设置进行修改,对RestController的请求映射也要做相应的设置修改。 @RequestMapping(value = {"**/test/dosomething**"}, method = RequestMethod.POST, produces = { MediaType.APPLICATION_JSON_VALUE }) 假设servlet映射为"/test/*“且RestControoler仅在方法级别进行请求映射,如果alwaysUseFullPath为true时请求映射为上面的”/test/dosomething"。则在alwaysUseFullPath改为false后,请求映射相应改为"/dosomething"即可。 alwaysUseFullPath设置范例 想在SpringBoot应用中设定alwaysUseFullPath为true,可通过BeanPostProcessor完成其设置。 @SpringBootApplication public class Application implements BeanPostProcessor { public static void main(String[] args) { final ApplicationContext applicationContext = SpringApplication.
阅读全文 »

[Hadoop] YARN中Application Manager和Application Master区别

时间: 2015-11-28   |   分类: BigData     |   阅读: 28 字 ~1分钟
术语Application Master和Application Manager经常被交换使用。其实,ApplicationMaster是一个主要的容器,用于请求、启动和监控应用特定资源;而ApplicationManager是资源管理器中的一个部件。 一个作业在YARN中启动流程如下: 首先客户端向YARN资源管理器提交应用,包括请求容器启动上下文所需的信息。 接着资源管理器中的应用管理器协商好一个容器,为应用引导一个Application Master实例。 之后Application Master向资源管理器注册并请求容器。 当ApplicationMaster同节点管理器进行通信启动所授予的容器之后,为每个容器指定容器启动上下文描述(CLC,包括执行启动的命令、安全令牌、依赖[可执行文件、压缩包]、环境变量等等)。 Application Master管理应用执行。在执行期间,应用向ApplicationMaster提供进度和状态信息。客户端通过查询资源管理器或直接与ApplicationMaster联系,可以监控应用的状态。 Application Master向资源管理器报告应用结束。 应用管理器负责维护一系列已提交的应用。当应用提交后,它首先验证应用规格,为ApplicationMaster拒绝任何请求无法满足资源的应用(例如,集群中没有节点有足够资源运行ApplicationMaster自身)。之后确保没有已经运行的使用相同应用ID的其他应用,错误的客户端或恶意客户端有可能导致此类问题。最后,将提交的应用转给调度器。已结束应用从资源管理器内存完全清除之前,此部件也负责记录和管理这些已结束应用。当应用结束,它将应用汇总信息放在守护进程的日志文件。最后,应用管理器在应用完成用户请求后很久都会在缓存中保留该已结束应用。配置参数yarn.resourcemanager.max-completed-applications控制资源管理器在任意时刻可以记住的已结束应用的最大数量。该缓存是先入先出队列,为了存放最新的已结束应用,最老的应用将被移出。 参考 Difference between Application Manager and Application Master in YARN? Application Master 启动流程与服务简介

[MapR培训笔记]Hadoop基础

时间: 2015-11-25   |   分类: BigData     |   阅读: 314 字 ~2分钟
学习目标 大数据介绍: 理解大数据定义,判断是否存在大数据问题,描述如何用Hadoop解决大数据问题; Hadoop核心元素:描述分布式文件系统如何工作,map/reduce如何在分布式文件系统上处理数据; Hadoop工具生态系统: 了解Hadoop相关工具及其作用; 解决大数据用例: 描述Hadoop生态系统如何协同解决各种大数据用例,如何在不同场景下选择工具。 第一课 数据如何变大 学习目标 定义大数据及大数据问题 描述Hadoop主要部件 大数据 差不多是4V中的前三个,以及使数据难于描述、存储或处理的一些其他特性 Volume(大量):太大以至于系统无法处理 Variety(多样): 太多不同种类的数据,无法简单描述 Velocity(高速): 数据产生太快以至于系统无法处理 Value(价值): Hadoop主要部件 Google收到大数据挑战后,认识到无法用传统关系型数据库解决,创建了GFS+BigTabel+Map/Reduce。 GFS将文件分割成块,分布在集群的节点上。文件块在不同节点进行复制,以防止节点故障导致的数据丢失。 BigTable是使用GFS存储和获取数据的(分布式、多级)数据库系统。BigTable使用行键、列键和时戳映射到所存储的数据,可以不重写已有数据在不同时间对相同信息进行采集。行被分片为称之为Tablet的子表,分布到集群内。BigTable被设计成可以处理大量数据,可以无需重新配置已有文件的情况下向集群添加新的节点。 并行处理范式map/reduce被用于处理存储在GPS上的数据。map/reduce代表处理的两个步骤。在mapping阶段,所有数据在逻辑上分割,map函数应用于所有割片以生成键值对。框架对所有来自mapper的键值对进行排序然后在reducer之间分片。在reduce阶段,reduce函数应用于所有分片。map/reduce是一种分而治之的方式,将单个庞大的作业分解成一系列小的可管理的任务。 Google实验多年后发表了论文阐述了他们的大数据解决方案。DougCutting以此在Yahoo开发一个项目,后来开源成Apache基金会项目下的Hadoop(Cutting儿子玩具象的名字)。 Mapr利用Hadoop理念,开发了更快、更稳定的企业版Hadoop。 第二课 Hadoop核心 学习目标 本地&分布式文件系统 MapR-FS中的数据管理 (使用命令行)执行数据管理 Map Reduce范式 本地文件系统 HFS/NTFS(读写)和CDFS(只读)都是本地文件系统。文件系统中每个文件都由一个iNode和一系列数据块构成。iNode存储文件元数据,例如文件类型、权限、所有者、文件名和最后一次修改时间等信息,它还存储文件所存储的数据块的指针。数据块用于存储文件的实际内容。 本地文件系统的常见问题 硬盘故障:本地硬盘镜像(RAID-1) 丢失:云镜像 人为失误 误删:定期增量备份 空间不足:增加硬盘、硬盘阵列(RAID-0) 分布式文件系统 分布式文件系统行为与RAID-0类似,但硬盘分布在多个服务器上。由Sun微系统公司开发的网络文件系统NFS仍广泛用于在网络内存储和获取数据。 分布式文件系统当处理数据时致力于透明性,即对于客户端程序来说,文件系统与本地文件系统类似,分布式文件系统不可见。由于数据在网络内多个机器内分布,分布式文件系统使用数据定位器存储数据位置信息。与本地文件系统中的iNode类似,数据定位器只想数据在分布式文件系统中存储的位置。 MapR-FS存储 MapRFS是分布式文件系统,是Hadoop的MapR分发版的底层文件系统。它支持所有前面提到的本地文件系统特性,包括读写访问、本地或远程镜像,及在联机时对文件系统扩容的能力。此外,MapR文件系统可以加载并直接处理已有HDFS或NFS文件系统中的数据。 物理存储 集群是一组使用分布文件系统(例如MapR-FS)的计算机。集群中每个计算机称为一个节点,每个节点有一或多个物理硬盘。 在MapR-FS中,硬盘组合成组,称为存储池(storagepool)。默认一个存储池有三块硬盘组成。当数据写往存储池,数据在三个磁盘拆分写入,增加写速度。每个节点包含一或多个存储池,所有节点上的所有存储池构成了MapR-FS上的全部可用存储。 逻辑存储 MapR-FS将数据写入称之为容器(container)的逻辑单元。一个容器默认大小32GB,一个存储池通常有多个容器。容器内的数据在集群内节点间复制以防止单点故障或硬盘故障。 容器组合成卷(volume)。卷是跨集群内一组节点的数据资源逻辑抽象概念。所有容器及其副本在卷拓扑内的节点上分布。MapR-FS使用称之为容器定位数据库(CDLB)的特定服务存储容器及其副本的位置。CLDB为MapR-FS执行数据定位功能。它为数据存储在那个容器及找到集群内容器及其副本提供查找信息。 许多集群存储策略定义在卷这一级。 定义 拓扑(Topology)、快照(Snapshots)、配额(Quotas)、复制(Replication)、镜像(Mirrors)、权限(Permissions)、压缩(Compression)。 拓扑:可以配置不同的拓扑以实施某些数据存放在某些物理位置,例如机架和节点。通过这种方式,你可以设计数据来开发引用局部性以获得性能、可用性和其他适用于你的任意标准。之后可以将这些拓扑与卷进行关联。 压缩: 卷内数据当被写入硬盘时会被自动压缩。 镜像:可以配置策略集群内本地镜像或远程另一集群镜像。镜像对磁盘故障济公一定程度的保护,远程镜像当整个集群故障时可用于灾难恢复。 卷快照:在维护活动卷的持续一致性的同时,员徐创建数据的时间点版本。快照对用户错误提供一定程度的保护,也可以让你在任意时间返回某个数据集版本。快照可以手工创建,也可以基于计划自动定期执行。 配额:磁盘空间使用的上限。每个卷、用户或组都可以有一个配额。用户和组配额适用于对该用户和组所负责的所有卷的大小之和。硬配额在达到配额后会阻止写入,软配额则是发送告警邮件。 权限: 卷级别的权限可被设置为dump、restore、modify、delete或fullcontrol。卷内的文件和目录可以有标准的UNIX权限。 复制:包含卷内容的容器可被冗余复制。默认的复制因子为3,原始数据加上两个备份,但是每个卷都可以设置自己的复制因子。卷内所有容器具有相同的复制设置。 汇总 MapR文件系统支持POSIX语义及NFS导出。 MapR文件系统被写入到一个卷,卷是复制、镜像、快照、拓扑和使用权限等数据管理功能的一个管理抽象。 卷数据保存在容器内,卷用于定义数据位置及数据复制。 容器被写入到存储池,存储池是一个或多个物理硬盘。
阅读全文 »

[OpenUI5] 控件的Property、Aggregation和Association如何自动具有的Getter和Setter?

时间: 2015-11-13   |   分类: FrontEnd     |   阅读: 239 字 ~2分钟
定义了OpenUI5控件的Property、Aggregation、Association和Event后,该控件就会出现这些Property、Aggregation和Association的Getter和Setter,是什么机制自动生成的这些Getter和Setter的? OpenUI5控件都继承自sap.ui.core.Control,其父类为sap.ui.core.Element,在祖父类为sap.ui.base.ManagedObject。sap.ui.base.ManagedObject类定义了Properties、Aggregations、Associations和Events这些管理特性。 Getter和Setter的生成机制都在sap.ui.core.ManagedObjectMetadata中实现的。首先我们看一下sap.ui.core.ManagedObjectMetadata这个类的源代码片段: ManagedObjectMetadata.prototype.generateAccessors = function() { var proto = this.getClass().prototype, prefix = this.getName() + ".", methods = this._aPublicMethods, n; function add(name, fn, info) { if ( !proto[name] ) { proto[name] = (info && info.deprecated) ? deprecation(fn, prefix + info.name) : fn; } methods.push(name); } for (n in this._mProperties) { this._mProperties[n].generate(add); } for (n in this._mAggregations) { this._mAggregations[n].generate(add); } for (n in this._mAssociations) { this._mAssociations[n].generate(add); } for (n in this._mEvents) { this.
阅读全文 »

[Git] 操作Git仓库已删除文件

时间: 2015-11-11   |   分类: Tool   Git     |   阅读: 88 字 ~1分钟
忙着工作,忽然出了一下神,觉得自己对Git仓库已删除文件的操作还没有练习过,决定找资料学习一下。 列举所有Git仓库已删除文件 下列命令可以列举出所有提交信息及被删除的文件: git log --diff-filter=D --summary 下列命令可以列举出所有被删除的文件,不显示提交信息: git log --diff-filter=D --summary | grep delete 列举一个Git仓库已删除文件的提交历史信息 仅使用git log无法查看Git仓库已删除文件的提交历史信息。 git log $deletedFile fatal: ambiguous argument 'deletedFile': unknown revision or path not in the working tree. 下列命令则可以: git log -- $deletedFile 恢复一个Git仓库已删除文件 找到删除该文件的提交哈希值 git rev-list -n 1 HEAD -- $deletedFile 通过删除该文件提交($deletingCommit)的前一个提交($deletingCommit~1)恢复已删除文件: git checkout $deletingCommit~1 -- $deletedFile 参考 Is there a way in Git to list all deleted files in the repository Git: Getting the history of a deleted file
阅读全文 »

Twitter API访问频次限制处理

时间: 2015-11-10   |   分类: DataBuilder     |   阅读: 41 字 ~1分钟
在我前面的博文社交媒体API访问频次限制中,列举了Twitter API访问频次限制。 Twitter API访问频次限制 TwitterAPI访问频次按15分钟为间隔。有两类桶:15分钟内允许15次调用,及15分钟内允许180次调用。Twitter搜索属于后者,在15分钟内允许180次调用。 当向Twitter发送请求后,可以通过解析响应头来获取限制信息。该信息是基于应用/用户上下文的: X-Rate-Limit-Limit: 对给定请求的访问速率上限 X-Rate-Limit-Remaining: 15分钟时间窗中剩余请求数 X-Rate-Limit-Reset: 速率限制复位前(基于UTC)的剩余时间窗秒数 一旦对Twitter的请求超过了频次限制,Twitter将返回HTTP 429 “Too ManyRequests”响应码及如下消息体: { "errors": [ { "code": 88, "message": "Rate limit exceeded" } ] } 除了通过解析响应头,还可以通过向Twitter发送rate_limit_status请求获取API访问限制信息。 Twitter4J对Twitter API访问频次限制的处理 Twitter4J的RateLimitStatusJSONImpl类用于处理响应头中的访问限制信息: Twitter4J的TwitterResponseImpl抽象类用于存放解析过的访问限制信息以供应用程序使用: 此外,还可以注册RateLimitStatusListener监听器实例。由Twitter4J的TwitterBaseImpl类可知,当解析到响应头中的API访问频次限制信息,RateLimitStatusListener监听器实例的onRateLimitStatus方法会被调用;当收到的响应码为420"Enhance Your Claim"、503 “Service Unavailable"或429 “Too ManyRequests”,RateLimitStatusListener监听器实例的onRateLimitReached方法将会被调用。

[Git] 分支笔记

时间: 2015-11-08   |   分类: Tool   Git     |   阅读: 185 字 ~1分钟
最近接触了一些Git远程分支的操作和管理,做个笔记。 创建本地分支 git branch [branch] 切换本地分支 git checkout [branch] 删除本地分支 git branch -D [branch] 重命名本地分支 git branch -m [oldbranch] [newbranch] 查看分支 # 查看本地分支 (-v选项可以显示sha1和提交消息标题) git branch git branch -v # 查看远程分支 git branch -r git branch -rv # 查看本地和远程分支 git branch -a git branch -av 向远程分支推送(远程分支不存在则会创建远程分支) # 期望本地分支与远程分支同名,可以先切换到本地分支进行提交 git push [remote] [branch] # 通过-u选项同时使新创建的远程分支成为本地分支的上游分支 git push -u [remote] [branch] # 期望本地分支与远程分支使用不同名称 git push [remote] [localbranch]:[remotebranch] # 例子: git push origin v9:v9 使用存在的远程分支创建本地分支,远程分支也成为新创建的本地分支的上游分支 # 期望本地分支与远程分支同名 git checkout --track [remote]/[remotebranch] # 例子: git checkout --track origin/v9 # 当git checkout [branch]执行时,本地分支不存在且仅与一个远程分支名匹配事, # 其效果等同上面--track选项。 # 期望本地分支与远程分支使用不同名称 git checkout -b [localbranch] [remote]/[remotebranch] # 例子: git checkout -b v9test origin/v9 本地分支和远程分支都存在的情况下,使远程分支也成为本地分支的上游分支 # 使远程分支成为当前本地分支的上游分支 git branch -u [remote]/[remotebranch] # 使远程分支成为某一特定本地分支的上游分支 git branch --set-upstream-to=[remote]/[remotebranch] [localbranch] 去除本地分支的上游分支 git branch --unset-upstream [branch] 删除远程分支 git push [remote] :[remotebranch] # 或 git push --delete [remote] [remotebranch] 在本地库删除已废弃的远程分支 # 远程分支被别人删除后,自己本地库中该远程分支为废弃状态,可使用下列命令移除该远程分支 git remote prune [remote] 参考 Git Branching - Branches in a Nutshell
阅读全文 »

社交媒体API访问频次限制

时间: 2015-11-07   |   分类: DataBuilder     |   阅读: 128 字 ~1分钟
Facebook API访问频次限制 Facebook Graph API访问频次限制 Facebook Marketing API访问频次限制 FAcebook Graph API允许每用户每60分钟200次API调用。Facebook MarketingAPI随广告用户级别变化。 Twitter API访问频次限制 TwitterAPI访问频次按15分钟为间隔。有两类桶:15分钟内允许15次调用,及15分钟内允许180次调用。Twitter搜索属于后者,在15分钟内允许180次调用。 Google Analytics API Limits and Quotas Google Analytics Core Reporting API - API Limits and Quotas Google Analytics Real Time Reporting API - API Limits and Quotas Google Analytics Multi-Channel Funnels Reporting API - API Limits and Quotas 每个项目每天50000个请求,可增加。 每个IP 10 QPS(query per second)。 在Developers Console上,该配额是指per-userlimit。默认设置为1秒1个查询,可被调整为最大值10。 如果你的应用从单个IP地址发出所有API请求,你需要考虑在每个请求中使用userIP或quotaUser参数以获取对每个用户QPS的满配额。 Understand YouTube Analytics API Quota Usage 暂时没有查到Youtube Analytics API固定配额,不过看起来查询维度对配额使用的影响更大。
阅读全文 »

[Spring Boot] Hello MethodInvokingFactoryBean and MethodInvokingBean

时间: 2015-11-05   |   分类: Service+JavaEE   Spring     |   阅读: 170 字 ~1分钟
简介 在用spring管理我们的类的时候有时候希望有些属性值是来源于一些配置文件,系统属性,或者一些方法调用的结果,对于前两种使用方式可以使用spring的PropertyPlaceholderConfigurer类来注入,对于后一种则可以使用org.springframework.beans.factory.config.MethodInvokingFactoryBean类来生成需要注入的bean的属性。 通过MethodInvokingFactory Bean类,可注入方法返回值。MethodInvokingFactoryBean用来获得某个方法的返回值,该方法既可以是静态方法,也可以是实例方法。该方法的返回值可以注入bean实例属性,也可以直接定义成bean实例。 MethodInvokingBean是MethodInvokingFactoryBean的父类,更为简单。跟MethodInvokingFactoryBean相比,不会对容器返回任何值。 类层次关系 示例代码: package com.yqu.methodinvoker; import java.util.Arrays; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.MethodInvokingBean; import org.springframework.beans.factory.config.MethodInvokingFactoryBean; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class Application { private static final Logger log = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication app = new SpringApplication(Application.class); app.setWebEnvironment(false); app.setShowBanner(false); app.run(args); log.info("sysProp http.proxyHost:"+System.getProperty("http.proxyHost")); log.info("sysProp http.proxyPort:"+System.getProperty("http.proxyPort")); } @Bean public MethodInvokingFactoryBean methodInvokingFactoryBean() { MethodInvokingFactoryBean mfBean = new MethodInvokingFactoryBean(); mfBean.setStaticMethod("java.lang.System.setProperties"); Properties props = System.
阅读全文 »

Spring Social合集

时间: 2015-11-01   |   分类: DataBuilder     |   阅读: 956 字 ~5分钟
Hello Spring Social Twitter 学习了Spring Accessing Twitter Data Guide ,稍作修改,练习一下用Spring Social Twitter搜索推文。 代码 src/main/java/com/yqu/springtwitter/Application.java package com.yqu.springtwitter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } src/main/java/com/yqu/springtwitter/HelloController.java package com.yqu.springtwitter; import javax.inject.Inject; import org.springframework.social.connect.ConnectionRepository; import org.springframework.social.twitter.api.SearchResults; import org.springframework.social.twitter.api.Twitter; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/") public class HelloController { private Twitter twitter; private ConnectionRepository connectionRepository; @Inject public HelloController(Twitter twitter, ConnectionRepository connectionRepository) { this.
阅读全文 »
15 16 17 18 19 20 21 22 23

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%