在收到提供者执行的结果时,当结果处理失败时,需要对其进行处理。
在Reference中,返回的Invoker是根据对应的容错机制生成的Invoker
failover cluster 失败的时候自动切换并重试其他服务器。 通过retries=2。 来设置重试次数(默认)
failfast cluster 快速失败,只发起一次调用 ; 写操作。比如新增记录的时候, 非幂等请求
failsafe cluster 失败安全。 出现异常时,直接忽略异常 – 写日志
failback cluster 失败自动恢复。 后台记录失败请求,定时重发
forking cluster 并行调用多个服务器,只要一个成功就返回。 只能应用在读请求
broadcast cluster 广播调用所有提供者,逐个调用。.3其中一台报错就会返回异常
@SPI(FailoverCluster.NAME)
public interface Cluster {
@Adaptive
Invoker join(Directory directory) throws RpcException;
}
public class FailoverCluster implements Cluster {
public final static String NAME = "failover";
public Invoker join(Directory directory) throws RpcException {
return new FailoverClusterInvoker(directory);
}
}
public class FailoverClusterInvoker extends AbstractClusterInvoker {
public Result doInvoke(Invocation invocation,
final List> invokers, LoadBalance loadbalance) t {
List> copyinvokers = invokers;
//检查属性
//默认次数是2次+1
int len = getUrl().getMethodParameter(invocation.getMethodName(),
"retries", 2) + 1;
if (len <= 0) {
len = 1;
}
// retry loop.
RpcException le = null; // last exception.
List> invoked = new ArrayList>(copyinvokers.size());
Set providers = new HashSet(len);
//循环重试次数
for (int i = 0; i < len; i++) {
//重试时,进行重新选择,避免重试时invoker列表已发生变化.
//注意:如果列表发生了变化,那么invoked判断会失效,因为invoker实例已经改变
if (i > 0) {
//检查是否已经注销
checkWheatherDestoried();
//重新获取invoke列表(避免重试时invoker列表已发生变化.)
copyinvokers = list(invocation);
//重新检查一下
checkInvokers(copyinvokers, invocation);
}
//选择对应的invoker
Invoker invoker = select(loadbalance, invocation,
copyinvokers, invoked);
invoked.add(invoker);
RpcContext.getContext().setInvokers((List)invoked);
try {
//执行
Result result = invoker.invoke(invocation);
return result;
} finally {
providers.add(invoker.getUrl().getAddress());
}
}
throw new RpcException("");
}
}
FailfastClusterInvoker 快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作。
public class FailfastClusterInvoker extends AbstractClusterInvoker{
public FailfastClusterInvoker(Directory directory) {
super(directory);
}
public Result doInvoke(Invocation invocation, List> invokers,
LoadBalance loadbalance) throws RpcException {
checkInvokers(invokers, invocation);
//选择invoker,执行,出现异常直接抛出
Invoker invoker = select(loadbalance, invocation, invokers, null);
try {
return invoker.invoke(invocation);
} catch (Throwable e) {
throw new RpcException("");
}
}
}
BroadcastClusterInvoker 广播调用所有提供者,逐个调用。其中一台报错就会返回异常
public Result doInvoke(final Invocation invocation, List>
invokers, LoadBalance loadbalance) throws RpcException {
checkInvokers(invokers, invocation);
RpcContext.getContext().setInvokers((List)invokers);
RpcException exception = null;
Result result = null;
//循环调用所有的提供者,只要出现异常,就抛出
for (Invoker invoker: invokers) {
try {
result = invoker.invoke(invocation);
} catch (RpcException e) {
exception = e;
logger.warn(e.getMessage(), e);
} catch (Throwable e) {
exception = new RpcException(e.getMessage(), e);
logger.warn(e.getMessage(), e);
}
}
if (exception != null) {
throw exception;
}
return result;
}
FailbackClusterInvoker 失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作。
//忽视异常,放入到列表中,定时等待重试
protected Result doInvoke(Invocation invocation, List> invokers,
LoadBalance loadbalance) throws RpcException {
try {
checkInvokers(invokers, invocation);
Invoker invoker = select(loadbalance, invocation, invokers, null);
return invoker.invoke(invocation);
} catch (Throwable e) {
addFailed(invocation, this);
return new RpcResult();
}
}
//启动定时,每隔5秒调用
private void addFailed(Invocation invocation, AbstractClusterInvoker router) {
if (retryFuture == null) {
synchronized (this) {
if (retryFuture == null) {
retryFuture =
scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
public void run() {
// 收集统计信息
try {
retryFailed();
} catch (Throwable t) { // 防御性容错
}
}
}, 5 * 1000, 5 * 1000, TimeUnit.MILLISECONDS);
}
}
}
failed.put(invocation, router);
}
void retryFailed() {
if (failed.size() == 0) {
return;
}
//循环调用出现异常的invoker
for (Map.Entry> entry : new
HashMap>(failed).entrySet()) {
Invocation invocation = entry.getKey();
Invoker invoker = entry.getValue();
try {
invoker.invoke(invocation);
failed.remove(invocation);
} catch (Throwable e) {
}
}
}
FailsafeClusterInvoker 失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作。
public Result doInvoke(Invocation invocation, List> invokers,
LoadBalance loadbalance) throws RpcException {
try {
checkInvokers(invokers, invocation);
Invoker invoker = select(loadbalance, invocation, invokers, null);
return invoker.invoke(invocation);
} catch (Throwable e) {
return new RpcResult(); // ignore
}
}
ForkingClusterInvoker 并行调用,只要一个成功即返回,通常用于实时性要求较高的操作,但需要浪费更多服务资源。
public Result doInvoke(final Invocation invocation, List>
invokers, LoadBalance loadbalance) throws RpcException {
checkInvokers(invokers, invocation);
final List> selected;
final int forks = getUrl().getParameter("forks",2);
final int timeout = getUrl().getParameter("timeout", 1000);
if (forks <= 0 || forks >= invokers.size()) {
selected = invokers;
} else {
selected = new ArrayList>();
//开启线程
for (int i = 0; i < forks; i++) {
//在invoker列表(排除selected)后,如果没有选够,则存在重复循环问题.
Invoker invoker = select(loadbalance, invocation,
invokers, selected);
if(!selected.contains(invoker)){//防止重复添加invoker
selected.add(invoker);
}
}
}
RpcContext.getContext().setInvokers((List)selected);
final AtomicInteger count = new AtomicInteger();
//创建队列,进入等待,只有调用成功或者出现异常达到次数,才唤醒
final BlockingQueue ref = new LinkedBlockingQueue();
for (final Invoker invoker : selected) {
executor.execute(new Runnable() {
public void run() {
try {
Result result = invoker.invoke(invocation);
//当成功了,即唤醒队列
ref.offer(result);
} catch(Throwable e) {
int value = count.incrementAndGet();
//当出现异常时,但是次数是selected,才唤醒
if (value >= selected.size()) {
ref.offer(e);
}
}
}
});
}
try {
Object ret = ref.poll(timeout, TimeUnit.MILLISECONDS);
if (ret instanceof Throwable) {
Throwable e = (Throwable) ret;
throw new RpcException("");
}
return (Result) ret;
} catch (InterruptedException e) {
throw new RpcException("");
}
}
你可能感兴趣的:(dubbo 集群容错)
不同类型的网站选择不同的服务器,那么应该怎么选择服务器呢?
咕噜分发企业签名-APP加固-彭于晏
服务器 运维
制作网站。但做一个盈利的网站并不是那么简单。服务器的选择与网站的性质密切相关。不同类型的网站选择不同的服务器。那么什么样的服务器更适合网站呢?1、站群现在,有很多站长都是站长,因为站长是一种可以在短时间内显著提高搜索引擎优化效果的方法。一个站点集群的特点之一是需要多个独立的ip,独立的服务器可以满足这一要求。特别是对于站群的独立服务器,大部分独立IP将达到数百个。2、对外贸易各外贸网站规模大、流量
如何理解分布式与集群,二者区别是什么?
weixin_39214481
分布式
分布式是指不同的业务分布在不同的地方,集群指的是将几台服务器集中在一起,实现同一业务。白话理解的话,比如公司项目上线初期(举例电子商务网站)初期:用户访问量低,只弄了一台服务器,一个tomcat项目运行一个web工程。中期:用户访问量提高,服务器崩了,为了解决这个问题,购买服务器,增加服务器数量,然后每个服务器中个各放了一份,使用nginx代理转发。(这就是运用集群原理)后期:用户访问量不断增加,
【YashanDB 知识库】如何处理 no free block in dictionary cache
数据库运维
问题现象1、共享集群中,创建用户卡住2、查询表或视图报错问题的风险及影响1、共享集群中,createtable、user等,因为需要等其他节点返回消息,如果某个节点dc不够,则会卡住。2、查询创建等报错,影响业务使用。问题影响的版本23.2.7.100及之前的所有版本问题发生原因dcpool不足解决方法及规避方式1、如果是sqlpool占用了sharepool的剩余空间,可以先清理sharepoo
WebSocket实战:如何实现百万级即时通讯
程序员没睡醒
websocket 网络协议 网络
WebSocket实战:如何实现百万级即时通讯(附Mermaid架构图+性能优化策略)一、WebSocket核心流程图解1.全链路通信流程(Mermaid)客户端负载均衡WS网关Redis集群业务服务TCP连接(HTTPUpgrade)转发WS握手请求HTTP101SwitchingProtocolsPingFramePongFrameloop[心跳检测]发布订单消息(PUBLISH)订阅频道消息
如何在 SpringBoot 项目创建并使用 Redis 的详细介绍
青灯文案
Redis Cache spring boot redis bootstrap
本文是博主整理项目时整理出来的,项目使用SpringBoot框架,使用Redis作为缓存组件,用于缓存部分热点接口数据。文章目录一、Redis的前置配置1、引入依赖2、单机配置3、集群配置4、两种配置路径解读二、创建Redis配置类1、简易版RedisConfig2、复杂版RedisConfig三、RedisTemplate类四、创建Redis操作类五、opsForValue方法六、在代码中使用R
全面指南:使用JMeter进行性能压测与性能优化(中间件压测、数据库压测、分布式集群压测、调优)
web13508588635
面试 学习路线 阿里巴巴 jmeter 性能优化 中间件
目录一、性能测试的指标1、并发量2、响应时间3、错误率4、吞吐量5、资源使用率二、压测全流程三、其他注意点1、并发和吞吐量的关系2、并发和线程的关系四、调优及分布式集群压测(待仔细学习)1.线程数量超过单机承载能力时的解决方案2.如何搭建分布式集群3.实施集群压测及监控4.处理集群中单台施压机报错的情况5.长时间压测(10小时)的注意事项6.处理混合场景:用户思考时间及多个服务同时压测7.开发压测
ubuntu22.04搭建ETCD集群
qq_43199968
etcd 数据库
一、软件环境ubuntu22.04etcd3.5.1二、服务器角色ubuntu01192.168.209.124ubuntu02192.168.209.125ubuntu03192.168.209.126三、使用cfssl生成自签证书1.下载cfssl工具(/home/wuyu)wgethttps://pkg.cfssl.org/R1.2/cfssl_linux-amd64wgethttps://
《Linux运维总结:基于Ubuntu 22.04+x86_64架构CPU部署etcd 3.5.15二进制分布式集群》
东城绝神
《Linux运维实战总结》 linux 运维 ubuntu etcd
总结:整理不易,如果对你有帮助,可否点赞关注一下?更多详细内容请参考:《Linux运维篇:Linux系统运维指南》一、功能简介1、什么是etcdetcd是一个分布式、可靠的键值存储系统,用于分布式系统中存储关键核心数据。它由CoreOS开发,并且是开源的,授权协议为Apache许可证。etcd内部采用了Raft一致性算法,可以实现配置共享和服务发现。etcd中文文档可参考如下:Etcd中文文档或者
TTRSS 迁移实战
背景几年前在云服务器上搭建了一套TTRss+RssHub集群,用于阅读文章.具体可以参见这篇文章:使用K8S部署RSS全套自托管解决方案-RssHub+TinyTinyRss-东风微鸣技术博客近期云服务器要到期了,刚好趁此机会将其从云上迁移到家里的Homelab2集群.迁移是2025年2月22日上午做的,结果非常顺利.做完后太太还没起床呢,那就再利用这段时间总结一下迁移过程.内容有些流水账,如果有
2.ELK之Elasticsearch常用DSL语句(kibana语句)
焱齿
elk elasticsearch
目录什么是DSL?零、ES基本操作1、查看索引/mapping2、查看集群健康状态3、查询ES中所有的index4、删除索引5、查看索引的分片情况6、根据docid查询文档7、常规查找——在/index/type中查找8、限制查找条数9、ES的基本CURD一、ES高级查询DSL0、ESmapping中的数据类型2、queryDSL——查询所有(match_all)3、queryDSL——关键词查询
Github上有哪些不错的Python开源项目?
cda2024
github python 开源
在当今快速发展的科技时代,Python已经成为编程语言界的明星,它简洁优雅的语法、强大的库支持以及广泛的社区贡献,使其在数据分析、机器学习、Web开发等多个领域大放异彩。而在GitHub这个全球最大的代码托管平台上,无数优秀的Python开源项目如雨后春笋般涌现,不仅为开发者提供了丰富的资源,也为技术爱好者提供了学习和实践的机会。本文将带你走进GitHub的Python开源世界,探索那些不容错过的
Spark on YARN的重要参数
大米饭精灵
Spark Yarn Spark Yarn
Spark属性或者去源码找Class类SparkSubmitArguments,最全了属性名称默认含义spark.yarn.am.memory512m用于客户端模式下的YARNApplicationMaster的内存量,格式与JVM内存字符串(例如512m,2g)相同。在集群模式下,spark.driver.memory改为使用。使用小写字母后缀,例如k,m,g,t,和p,为kibi-,mebi-
利用Redis发布订阅模式、SSE实现分布式实时站内信系统
weixin_38515820
Java redis redis 分布式 java
文章目录前言一、SSE是什么?二、单机与集群的站内信实现方式有何区别?三、Redis发布、订阅模式有何特点?四、代码演示1.数据模型小结2.引入依赖3.配置RedissonClient4.编写RestController用于测试5.编写用户消息订阅逻辑6.实现消息的发布7.实现广播消息的订阅8.个人与团队消息的订阅8.效果演示总结前言站内信功能在各大系统中被广泛应用,本文结合工作的实际场景,使用j
kafka判断生产者是否向kafka集群成功发送消息
weixin_43833540
工作中遇到的kafka问题 kafka 分布式
判断kafka生产者是否成功向Kafka集群发送消息,可以通过以下几种方式来判断:同步发送方式在同步发送方式中,生产者调用send()方法后,会等待Kafka的响应来确认消息是否发送成功。如果发送成功,send()方法会返回一个RecordMetadata对象,该对象包含了消息的元数据信息,如分区号(partition)、偏移量(offset)等。如果发送失败,则会抛出异常。步骤:调用produc
19、《Springboot+MongoDB整合:玩转文档型数据库》
wolf犭良
SpringBoot 数据库 spring boot mongodb
Springboot+MongoDB整合:玩转文档型数据库摘要:本文全面讲解SpringBoot与MongoDB的整合实践,涵盖环境搭建、CRUD操作、聚合查询、事务管理、性能优化等核心内容。通过15+个典型代码示例,演示如何高效操作文档数据库,深入剖析MongoTemplate与MongoRepository的差异化使用场景,提供索引优化方案与分片集群配置实战经验,最后针对生产环境常见问题给出解
提升游戏性能的魔法:C#与Unity中不容错过的脚本优化技巧
墨夶
C#学习资料1 游戏 c# unity
在当今竞争激烈的电子游戏市场,流畅的游戏体验和高效的性能表现往往是吸引玩家的关键因素。而作为开发者,如何在有限的资源条件下最大限度地发挥硬件潜力,成为了我们不得不面对的重要课题。幸运的是,在Unity这个广受欢迎的游戏开发平台上,借助C#的强大功能,我们可以采取一系列有效的措施来优化代码,确保游戏运行得既快又稳。今天,就让我们一起揭开这些隐藏在幕后的秘密武器,探索如何让您的作品脱颖而出!Unity
【Kafka】Kafka高性能解读
解决方案工程师
kafka 分布式
Kafka的高性能源于其分布式架构设计、高效数据存储和优化算法。以下是Kafka高性能的核心原理及其实现细节:1.分布式架构设计1.1分区(Partitioning)并行处理:将Topic划分为多个Partition,每个Partition独立存储和处理数据,支持水平扩展。负载均衡:Producer和Consumer可以并行读写不同Partition,充分利用集群资源。1.2副本机制(Replic
K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解
磐基Stack专业服务团队
Kubernetes kubernetes redis bootstrap
#作者:朱雷文章目录一、背景环境及方案说明1.1、环境说明1.2、方案一:使用配置文件设置密码1.3、方案二:使用args的命令行传参设置密码二、redissecretconfigmapdeployment参考2.1创建secret-redis.yaml参考2.2修改configmap配置参考2.2.1哨兵节点修改(每个节点都修改)2.2.2主从节点配置修改2.2.3使用命令行参数指定密码(本小节
OceanBase 初探学习历程之——安装部署
羽书飞影
oceanbase 学习
一、介绍OceanBase数据库是一个原生的分布式关系数据库,它是完全由阿里巴巴和蚂蚁集团自主研发的项目。OceanBase数据库构建在通用服务器集群上,基于Paxos协议和分布式架构,提供金融级高可用和线性伸缩能力,不依赖特定硬件架构,具备高可用、线性扩展、高性能、低成本等核心技术优势。OceanBase数据库具有如下特点:高可用单服务器故障能够自愈,支持跨城多机房容灾,数据零丢失,可满足金融行
【Flink 实战】Flink 中 Akka 通信与内存占用分析
roman_日积跬步-终至千里
# flink 实战 flink 大数据
文章目录一、Akka通信需要的内存二、Akka通信的超时和建议配置1.超时配置项调整建议2.常见调整例子JobManager和TaskManager之间的通信是通过Akka实现的。Akka是Flink中一个分布式通信框架,负责处理集群内各个组件之间的消息传递、任务调度、状态更新以及故障恢复等操作。在这个过程中,Akka的通信机制会消耗一定的内存,特别是在消息传递、队列管理和任务调度过程中。本文将详
时间同步服务器--Linux中
IJ[JJ
服务器 运维
时间同步服务器1.时间同步服务时间同步:多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等,利用NTP(NetworkTimeProtocol)协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一。时间同步实现:ntp,chrony。ntp:将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1ms,在
分布式消息中间件(十三)——RocketMQ延时消息
码炫课堂-码哥
rocketmq专题 rocketmq 消息中间件
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对
DeepSeek的架构设计
程序猿000001号
DeepSeek 架构设计
DeepSeek的架构设计一、基础架构层1.超大规模算力集群跨地域异构计算:南京/临港等多地超算中心构建混合集群,10万+GPU卡规模(含H100/A100等),通过自研RDMA网络实现μs级延迟能效优化:采用液冷+余热回收技术,PUE<1.1,算力密度达50kW/机柜故障自愈:基于强化学习的节点健康预测系统,实现硬件故障30秒内隔离2.数据工场体系多模态处理管道:文本:20PB语料库,支持164
分布式NAS集群+ceph+CTDB
Comedy_宁
分布式 ceph linux NAS CTDB
分布式存储系统中,分布式NAS、CTDB和Ceph常常被结合使用以提供高性能、高可用性和灵活扩展的存储解决方案。以下是这三者的关系及其在分布式存储系统中的角色:一、分布式NAS(NetworkAttachedStorage)分布式NAS是一种通过网络提供分布式文件存储服务的系统。它的核心功能是将存储资源分布在多个节点上,提供一个统一的文件系统视图,并通过网络文件系统协议(如NFS和SMB)供客户端
4.Ceph监控
yongbang_yan
ceph集群 运维
Ceph监控演示如何监控一个Ceph集群。我们将学习如何用ceph的命令行工具进行监控。监控集群的整体状态健康状态ceph命令的health选项查看集群的健康状态。#cephhealthdetailHEALTH_WARNclockskewdetectedonmon.ceph-node2;Monitorclockskewdetectedmon.ceph-node2addr192.168.1.121:
ceph中报错“ clock skew detected on mon.ceph2, mon.ceph3”
下一页盛夏花开
ceph ceph 运维
自己搭建的ceph集群,显示时间不同步:clockskewdetectedonmon.ceph2,mon.ceph3但是查看chrony进程已经启动,ceph配置文件中,如下参数也已经配置,
一次交换机故障导致的云平台(opensatck+ceph)不可用的记录
大新新大浩浩
openstack ceph 服务器 网络
前言发现几年前记录的一次由于交换机故障导致的云平台使用异常的问题,因为比较少见所以也整理记录一下一、细节过程用户联系说好多运行在云主机上的网页访问不了了,需要处理一下。甲方现场还挺远,我就先登陆在虚拟机上部署的堡垒机,发现堡垒机也不好使。机房运维联系说有台业务交换机坏了,有备件,正在更换。换上之后,过了一会,堡垒机就好使了。赶紧登陆上去检查服务。存储集群已经开始自动恢复,虚拟机也逐渐恢复了业务能力
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 6.2.14容器版哨兵集群》
东城绝神
《Linux运维实战总结》 运维 linux 架构 redis 哨兵集群
总结:整理不易,如果对你有帮助,可否点赞关注一下?更多详细内容请参考:《Linux运维篇:Linux系统运维指南》一、部署背景由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统,而作为基础组件中的redis针对不同的客户环境需要多次部署集群,作为一个运维工程师,提升工作效率也是工作中的重要一环。所以我觉得有必要针对X86_64+ARM64CPU架构redis6.2.14容器版哨兵集群编
docker创建kafka集群
陈小咩咩
kafaka kafka docker
今天我们来创建试着创建一下kafka集群,本次采用但节点的zookeeper注册中心搭建kafka集群,并且未配置kafka-manager.1、创建docker-compose的yml文件创建kafka文件夹,并在目录下编写docker-compose的docker-compose-zoosingle-kafka.yml文件,文件名随便自己取version:'3'services:zookeep
安装Kubernetes集群-Centos系统
写的花里胡哨
Linux部署 kubernetes centos 容器
文章参考网址:安装Kubernetes集群-K8S教程准备工作一、每个节点分别设置对应主机名hostnamectlset-hostnamemasterhostnamectlset-hostnamenode1hostnamectlset-hostnamenode2二、所有节点都添加hostsvi/etc/hosts172.16.0.4master172.16.32.2node1172.16.32.6
[星球大战]阿纳金的背叛
comsci
本来杰迪圣殿的长老是不同意让阿纳金接受训练的.........
但是由于政治原因,长老会妥协了...这给邪恶的力量带来了机会
所以......现代的地球联邦接受了这个教训...绝对不让某些年轻人进入学院
看懂它,你就可以任性的玩耍了!
aijuans
JavaScript
javascript作为前端开发的标配技能,如果不掌握好它的三大特点:1.原型 2.作用域 3. 闭包 ,又怎么可以说你学好了这门语言呢?如果标配的技能都没有撑握好,怎么可以任性的玩耍呢?怎么验证自己学好了以上三个基本点呢,我找到一段不错的代码,稍加改动,如果能够读懂它,那么你就可以任性了。
function jClass(b
Java常用工具包 Jodd
Kai_Ge
java jodd
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大! 写道 Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML < 1.5 Mb
Jodd 被分成众多模块,按需选择,其中
工具类模块有:
jodd-core &nb
SpringMvc下载
120153216
springMVC
@RequestMapping(value = WebUrlConstant.DOWNLOAD)
public void download(HttpServletRequest request,HttpServletResponse response,String fileName) {
OutputStream os = null;
InputStream is = null;
Python 标准异常总结
2002wmj
python
Python标准异常总结
AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointError 浮点计算错误 GeneratorExit generator.close()方法被调用的时候 ImportError 导入模块失
SQL函数返回临时表结构的数据用于查询
357029540
SQL Server
这两天在做一个查询的SQL,这个SQL的一个条件是通过游标实现另外两张表查询出一个多条数据,这些数据都是INT类型,然后用IN条件进行查询,并且查询这两张表需要通过外部传入参数才能查询出所需数据,于是想到了用SQL函数返回值,并且也这样做了,由于是返回多条数据,所以把查询出来的INT类型值都拼接为了字符串,这时就遇到问题了,在查询SQL中因为条件是INT值,SQL函数的CAST和CONVERST都
java 时间格式化 | 比较大小| 时区 个人笔记
7454103
java eclipse tomcat c MyEclipse
个人总结! 不当之处多多包含!
引用 1.0 如何设置 tomcat 的时区:
位置:(catalina.bat---JAVA_OPTS 下面加上)
set JAVA_OPT
时间获取Clander的用法
adminjun
Clander 时间
/**
* 得到几天前的时间
* @param d
* @param day
* @return
*/
public static Date getDateBefore(Date d,int day){
Calend
JVM初探与设置
aijuans
java
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台
SQL中ON和WHERE的区别
avords
SQL中ON和WHERE的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 www.2cto.com 在使用left jion时,on和where条件的区别如下: 1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
说说自信
houxinyou
工作 生活
自信的来源分为两种,一种是源于实力,一种源于头脑.实力是一个综合的评定,有自身的能力,能利用的资源等.比如我想去月亮上,要身体素质过硬,还要有飞船等等一系列的东西.这些都属于实力的一部分.而头脑不同,只要你头脑够简单就可以了!同样要上月亮上,你想,我一跳,1米,我多跳几下,跳个几年,应该就到了!什么?你说我会往下掉?你笨呀你!找个东西踩一下不就行了吗?
无论工作还
WEBLOGIC事务超时设置
bijian1013
weblogic jta 事务超时
系统中统计数据,由于调用统计过程,执行时间超过了weblogic设置的时间,提示如下错误:
统计数据出错!
原因:The transaction is no longer active - status: 'Rolling Back. [Reason=weblogic.transaction.internal
两年已过去,再看该如何快速融入新团队
bingyingao
java 互联网 融入 架构 新团队
偶得的空闲,翻到了两年前的帖子
该如何快速融入一个新团队,有所感触,就记下来,为下一个两年后的今天做参考。
时隔两年半之后的今天,再来看当初的这个博客,别有一番滋味。而我已经于今年三月份离开了当初所在的团队,加入另外的一个项目组,2011年的这篇博客之后的时光,我很好的融入了那个团队,而直到现在和同事们关系都特别好。大家在短短一年半的时间离一起经历了一
【Spark七十七】Spark分析Nginx和Apache的access.log
bit1129
apache
Spark分析Nginx和Apache的access.log,第一个问题是要对Nginx和Apache的access.log文件进行按行解析,按行解析就的方法是正则表达式:
Nginx的access.log解析正则表达式
val PATTERN = """([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\&q
Erlang patch
bookjovi
erlang
Totally five patchs committed to erlang otp, just small patchs.
IMO, erlang really is a interesting programming language, I really like its concurrency feature.
but the functional programming style
log4j日志路径中加入日期
bro_feng
java log4j
要用log4j使用记录日志,日志路径有每日的日期,文件大小5M新增文件。
实现方式
log4j:
<appender name="serviceLog"
class="org.apache.log4j.RollingFileAppender">
<param name="Encoding" v
读《研磨设计模式》-代码笔记-桥接模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 个人觉得关于桥接模式的例子,蜡笔和毛笔这个例子是最贴切的:http://www.cnblogs.com/zhenyulu/articles/67016.html
* 笔和颜色是可分离的,蜡笔把两者耦合在一起了:一支蜡笔只有一种
windows7下SVN和Eclipse插件安装
chenyu19891124
eclipse插件
今天花了一天时间弄SVN和Eclipse插件的安装,今天弄好了。svn插件和Eclipse整合有两种方式,一种是直接下载插件包,二种是通过Eclipse在线更新。由于之前Eclipse版本和svn插件版本有差别,始终是没装上。最后在网上找到了适合的版本。所用的环境系统:windows7JDK:1.7svn插件包版本:1.8.16Eclipse:3.7.2工具下载地址:Eclipse下在地址:htt
[转帖]工作流引擎设计思路
comsci
设计模式 工作 应用服务器 workflow 企业应用
作为国内的同行,我非常希望在流程设计方面和大家交流,刚发现篇好文(那么好的文章,现在才发现,可惜),关于流程设计的一些原理,个人觉得本文站得高,看得远,比俺的文章有深度,转载如下
=================================================================================
自开博以来不断有朋友来探讨工作流引擎该如何
Linux 查看内存,CPU及硬盘大小的方法
daizj
linux cpu 内存 硬盘 大小
一、查看CPU信息的命令
[root@R4 ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id"
model name : Intel(R) Xeon(R) CPU X5450 @ 3.00GHz
model name :
linux 踢出在线用户
dongwei_6688
linux
两个步骤:
1.用w命令找到要踢出的用户,比如下面:
[root@localhost ~]# w
18:16:55 up 39 days, 8:27, 3 users, load average: 0.03, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
放手吧,就像不曾拥有过一样
dcj3sjt126com
内容提要:
静悠悠编著的《放手吧就像不曾拥有过一样》集结“全球华语世界最舒缓心灵”的精华故事,触碰生命最深层次的感动,献给全世界亿万读者。《放手吧就像不曾拥有过一样》的作者衷心地祝愿每一位读者都给自己一个重新出发的理由,将那些令你痛苦的、扛起的、背负的,一并都放下吧!把憔悴的面容换做一种清淡的微笑,把沉重的步伐调节成春天五线谱上的音符,让自己踏着轻快的节奏,在人生的海面上悠然漂荡,享受宁静与
php二进制安全的含义
dcj3sjt126com
PHP
PHP里,有string的概念。
string里,每个字符的大小为byte(与PHP相比,Java的每个字符为Character,是UTF8字符,C语言的每个字符可以在编译时选择)。
byte里,有ASCII代码的字符,例如ABC,123,abc,也有一些特殊字符,例如回车,退格之类的。
特殊字符很多是不能显示的。或者说,他们的显示方式没有标准,例如编码65到哪儿都是字母A,编码97到哪儿都是字符
Linux下禁用T440s,X240的一体化触摸板(touchpad)
gashero
linux ThinkPad 触摸板
自打1月买了Thinkpad T440s就一直很火大,其中最让人恼火的莫过于触摸板。
Thinkpad的经典就包括用了小红点(TrackPoint)。但是小红点只能定位,还是需要鼠标的左右键的。但是自打T440s等开始启用了一体化触摸板,不再有实体的按键了。问题是要是好用也行。
实际使用中,触摸板一堆问题,比如定位有抖动,以及按键时会有飘逸。这就导致了单击经常就
graph_dfs
hcx2013
Graph
package edu.xidian.graph;
class MyStack {
private final int SIZE = 20;
private int[] st;
private int top;
public MyStack() {
st = new int[SIZE];
top = -1;
}
public void push(i
Spring4.1新特性——Spring核心部分及其他
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
配置HiveServer2的安全策略之自定义用户名密码验证
liyonghui160com
具体从网上看
http://doc.mapr.com/display/MapR/Using+HiveServer2#UsingHiveServer2-ConfiguringCustomAuthentication
LDAP Authentication using OpenLDAP
Setting
一位30多的程序员生涯经验总结
pda158
编程 工作 生活 咨询
1.客户在接触到产品之后,才会真正明白自己的需求。
这是我在我的第一份工作上面学来的。只有当我们给客户展示产品的时候,他们才会意识到哪些是必须的。给出一个功能性原型设计远远比一张长长的文字表格要好。 2.只要有充足的时间,所有安全防御系统都将失败。
安全防御现如今是全世界都在关注的大课题、大挑战。我们必须时时刻刻积极完善它,因为黑客只要有一次成功,就可以彻底打败你。 3.
分布式web服务架构的演变
自由的奴隶
linux Web 应用服务器 互联网
最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易
初探Druid连接池之二——慢SQL日志记录
xingsan_zhang
日志 连接池 druid 慢SQL
由于工作原因,这里先不说连接数据库部分的配置,后面会补上,直接进入慢SQL日志记录。
1.applicationContext.xml中增加如下配置:
<bean abstract="true" id="mysql_database" class="com.alibaba.druid.pool.DruidDataSourc