- 浏览: 355721 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (83)
- 网银支付 加密解密说明 (1)
- JAVA (24)
- facebook (2)
- Jquery (2)
- Google Analytics 开源 (1)
- Google Goagent (1)
- memcached (2)
- eclipse (2)
- linux (5)
- MongoDB (3)
- Maven (5)
- VBScript (1)
- mysql (4)
- Schedule (1)
- GitHub (2)
- NFS (1)
- Dubbo (1)
- Spring (8)
- jenkins (2)
- HTTP (1)
- Velocity (1)
- Lua (1)
- Jetty (3)
- Python (2)
- fiddler (2)
- Node (1)
- Xshell (1)
- StarUml (3)
- Nginx (1)
最新评论
-
763863446:
非常感谢作者,刚才自定义了宏,但是在 velocit ...
volicity 自定义指令 Directive 并获取ApplicationContext -
xiyuhanfei:
Dubbo 远程Debug、远程Jconsole -
ly_ltw:
15018710182 写道别用构造函数方法,换成Securi ...
Java heap space 问题查找 -
15018710182:
别用构造函数方法,换成Security.addProvider ...
Java heap space 问题查找 -
TimerBin:
这个是需要重新加载的,在此时使用的zookeeper只充当pr ...
Spring MVC Zookeeper 统一配置管理
收藏列表
标题 | 标签 | 来源 | |
linux shell 常用命令 | linux | ||
1、grep 文件内容筛选命令可以进行文件查询 grep命令主要参数: -c:只输出匹配行的计数。 -I:不处理二进制文件 -i:不区分大小写(只适用于单字符)。 -r:递归处理目录下的所有文件。 -h:查询多文件时不显示文件名。 -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。 -w:包含正则表达式。 grep "sort" *.doc 常见文件名的匹配 grep -c "sort" data.doc 输出data.doc中含有sort的行数 grep -n "sort" data.doc 显示data.doc中所有匹配sort的行和行号 grep -vn "sort" data.doc 输出data.doc 中所有不包含sort行 grep -i "ab" data.doc 输出data.doc中所含有ab或Ab字符串的行 grep '[239].' data.doc 输出所有含有23或9开头的 此格式可对正则表达式支持 2、crontab 指定特定的时间启动工作 在etc/crontab目录下 crontab -e 设置命令 第1个数字:分钟 每小时中的第几分钟执行 0-59 第2个数字:小时 每天的第几个小时执行 0-23 第3个数字:日期 每月的第几天执行 0-31 第4个数字:月份 每年的第几个月执行 0-12 第5个数字:星期 每周的第几天执行 0-6 其他:要执行的命令 #多个命令时可以将命令写到一个.SH文件中这里只定时设置该sh文件执行便可 0 2 * * * data 》 /home/chen/mydata 在每天的两点执行这个命令 crontab -r 终止任务调度命令 crontab -l 显示当前任务调度命令 3、ls -l 用以查询文件的权限信息 格式-rw-r-r -表示文件类型(普通文件) r表示可读4 w表示可写2 x表示了执行1 4、chmod [-cfvR] [--help] [--version] mode file... 为文件设置权限 file文件名称信息 mode:权限设定字符串 格式:[ugoa...][[+-=][rwxX] u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是 可以用a表示ugo + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 -c : 若该档案权限确实已经更改,才显示其更改动作 -f : 若该档案权限无法被更改也不要显示错误讯息 -v : 显示权限变更的详细资料 -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) --help : 显示辅助说明 --version : 显示版本 chmod ugo+r file1.txt 将file1设为所有人皆可读取 也可以使用chmod a+r file1.txt 将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 : chmod ug+w,o-w file1.txt file2.txt 将 ex1.py 设定为只有该档案拥有者可以执行 : chmod u+x ex1.py 将目前目录下的所有档案与子目录皆设为任何人可读取 : chmod -R a+r * 此外chmod也可以用数字来表示权限如 chmod 777 file 语法为:chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限 读r=4,写w=2,执行x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=7。 范例: chmod a=rwx file 和 chmod 777 file 效果相同 ---- chmod u=7 g=7 o=7 file 为所有人设置全部权限 chmod ug=rwx,o=x file 和 chmod 771 file 效果相同 chmod u=7 g=7 o=1 file 表示此文件 档案拥有者 统一群体者有读写执行的权利 但是其他人不具备此权利 若用chmod 4755 文件名称 可使此程序具有root的权限-----》chmod u=7 g=5 o=5 file 其中的4表示具有所有者相当的权限 用于对文件进行权限的提升 5、netstat -a 查询端口 -a (all)显示所有选项,默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化成数字。 -l 仅列出有在 Listen (监听) 的服務状态 -p 显示建立相关链接的程序名 -r 显示路由信息,路由表 -e 显示扩展信息,例如uid等 -s 按各个协议进行统计 -c 每隔一个固定时间,执行该netstat命令。 netstat -an | grep ':80' 找出某个运行的端口 6、ps命令查找进程 -e 显示所有进程,环境变量 -f 全格式 -h 不显示标题 -l 长格式 -w 宽输出 a显示终端上地所有进程,包括其他用户地进程 r只显示正在运行地进程 x显示没有控制终端地进程 ps -ef | grep java 查询系统中java 进程 kill -9 [pid] 根据pid杀死进程 7、tar linux系统下 打包压缩命令 tar [主选项+辅选项] 文件或者目录 c 封装包裹 x 拆开包裹 t 不拆包查看包裹内东西 -z :打包拆包过程中是否使用gzip 压缩或解压? 一般格式为xx.tar.gz或xx. tgz -j :打包拆包过程中bzip2 压缩或解压?一般格式为xx.tar.bz2 -v :压缩过程中是否显示文件压缩过程 -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加其他参数! -p :使用原文件的原来属性(属性不会依据使用者而变) --exclude FILE:在压缩的过程中,不要将 FILE 打包! tar -cvf 目标文件名.tar 源文件 打包不压缩 tar -zcvf 目标文件名.tar.gz 源文件 打包后,以 gzip 压缩 tar -jcvf 目标文件名.tar.gz 源文件 打包后,以 bzip2 压缩 tar -ztvf 目标文件名.tar.gz 查看文件包中内容信息 tar -zxvf 目标文件名.tar.gz 地址 解压缩拆包 |
|||
Dubbo 云服务学习笔记 | dubbo | http://code.alibabatech.com/wiki/display/dubbo/ | |
Dubbo标签说明 第1章 dubbo:service 说明 服务配置:用于服务提供者对服务信息的定义设置。 常用属性。 1) Interface/class/必填:服务接口名称,值为接口的限定名称。 2) Ref/Object/必填:引用接口实现对象Bean的ID属性名称。 3) Version/String/可选:指定接口版本信息,用于区分不兼容版本接口信息。 4) Group/String/可选:指定接口实现信息,用于区分一个接口存在多个实现类。 5) Path/String/可选:服务路径,默认为接口名称,用于自定义服务路径名称。 6) Delay/Int/可选:用于指定延迟服务注册时间单位毫秒,当为-1时表示当Spring容器初始化完成后再进行服务注册。 7) Timerout/Int/可选:远程服务调用超时时间,默认为1000毫秒,可以对接口中的每个方法进行独立定义其远程调用超时时间,推荐用于在服务提供端进行定义。 8) Retries/Int/可选:当远程访问失败时进行的重新访问次数,默认为2并不包含第一次访问,如果当访问失败后不再访问则设置为0。 9) Connections/Int/可选:最大链接数,根据不同协议而定,当为rmi、http、hessian协议时表示的为消费者可提供的最大链接数,当为dubbo协议时表示的为建立的长链接个数。 10) Loadbalance/String/可选:负载均衡策略,默认为random(随机)、roundrobin(轮循)、leastactive(最少活跃调用)。 11) Async/Boolean/可选:可以实现同多线程相似效果,用于指定此次执行访问是否忽略返回值,默认为false表示为同步执行。True表示不阻塞线程,直接反馈返回无意思返回值。 12) Stub/boolean或class/可选:用于处理服务业务验证信息,在服务远程之前执行,用于对服务参数信息进行验证,当为boolean值时为true时会默认调用接口+ Local后缀实现类,当为Class时需要指定的类的限定名实现于BarService接口。 13) Mock/boolean或class/可选:用于处理不可控的异常信息,在服务远程之后执行,用于使用在对错误信息进行友好提示,当为boolean值时为true时表示如果出现错误也不抛出,当为Class时需要指定的类的限定名实现于BarService接口。 14) Token/string或boolean/可选:用于指定服务是否生成访问令牌,用于防止消费者绕过注册中心对提供者直接访问,当为String时表示服务令牌为固定值,在消费者进行使用时也需要进行指定固定指令,在点对点进行调用时,需要关闭令牌功能。 15) Registry/String/可选:用于指定注册中心,默认值会指向全部定义的registry,值为Registry标签中Id属性,如果同时注册到多个注册中心时多个注册中心间使用”,”号进行分割,如果将此值设置为N/A表示此服务不注册任何注册中心中。 16) Provider/String/可选:用于指定服务提供方的一些详细配置信息,即provider标签的ID属性名称信息,默认使用配置中第一个provider标签。 17) Deprecated/Boolean/可选:用于标识此服务是否已经过了维护期,默认为false,当设置为true时在消费方进行使用时会提示警告error日志。 18) Dynamic/Boolean/可选:表示此服务是否需要自动注册,默认为true,多用一些第三方服务内容,指定他们跳出服务容器对服务进行自动注册操作,须人工进行开启或停止。 19) Accesslog/String或Boolean/可选:是否输出远程服务访问日志信息,默认为false,设置为true是默认将日志指定到当前应用的Log4j日志,当为String类型时,可以对其指定日志输入文件信息。 20) Owner/String/可选:用于指定此服务负责人,推荐填写负责人公司邮箱名称前缀。多个时使用”,”号分割,可在注册中心中查看到该服务的负责人信息。 21) Document/String/可选:用于指定服务说明文档的URL信息。 22) Weight/int/可选:服务权重,在服务进行负载均衡时使用,用于表示服务在负载均衡中所占的调用比例。 23) Executes/int/可选:用于指定服务或服务中的方法可并行执行的最大请求数。 24) Actives/int/可选:指定一个消费者可以在这个服务或这个方法中可并行执行的请求数。 25) Proxy/string/可选:用于指定服务动态代理方式,可选jdk/javassist两种动态代理方式,默认为javassist方式。 26) Cluster/String/可选:指定服务的集群方式,默认为failover()、 27) Filter/String/可选:对服务指定的过滤器名称,多个过滤器时可使用”,”号进行分隔。 28) Lintener/String/可选:服务提供方的监听器名称,多个名称用”,”号分隔。 29) Protocol/string/可选:指定服务的访问协议protocol标签中定义的id属性名称,如果有多个协议使用时可以使用”,”号分隔。 30) Layer/String/可选:服务提供者所在的分层。 31) Register/Boolean/可选:指定该协议的服务是否注册到注册中心,默认为true。 简单例子: 第2章 dubbo:reference 说明 引用配置:用于服务消费者对服务信息的引用配置。 所有属性 1) Id/String/必填:引用服务的Bean标签中属性Id名称 2) Interface/class/必填:服务接口名称,值为接口的限定名称。 3) Version/String/可选:指定接口版本信息,用于区分不兼容版本接口信息。 4) Group/String/可选:指定接口实现信息,用于区分一个接口存在多个实现类。 5) Timerout/Int/可选:远程服务调用超时时间,默认为1000毫秒,可以对接口中的每个方法进行独立定义其远程调用超时时间,推荐用于在服务提供端进行定义。 6) Retries/Int/可选:当远程访问失败时进行的重新访问次数,默认为2并不包含第一次访问,如果当访问失败后不再访问则设置为0。 7) Connections/Int/可选:最大链接数,根据不同协议而定,当为rmi、http、hessian协议时表示的为消费者可提供的最大链接数,当为dubbo协议时表示的为建立的长链接个数。 8) Loadbalance/String/可选:负载均衡策略,默认为random(随机)、roundrobin(轮循)、leastactive(最少活跃调用)。 9) Async/Boolean/可选:可以实现同多线程相似效果,用于指定此次执行访问是否忽略返回值,默认为false表示为同步执行。True表示不阻塞线程,直接反馈返回无意思返回值。 10) Check/Boolean/可选:表示在Spring容器加载时是否对服务进行检测,true时表示如果启动时不存在直接报错,false时表示不存在忽略。 11) Url/String/可选:绕过注册中心直接使用服务时使用。例如:dubbo://xxx.xxx.xxx.xxx:20880/XxxService 12) Stub/boolean或class/可选:用于处理服务业务验证信息,在服务远程之前执行,用于对服务参数信息进行验证,当为boolean值时为true时会默认调用接口+ Local后缀实现类,当为Class时需要指定的类的限定名实现于BarService接口。 13) Mock/boolean或class/可选:用于处理不可控的异常信息,在服务远程之后执行,用于使用在对错误信息进行友好提示,当为boolean值时为true时表示如果出现错误也不抛出,当为Class时需要指定的类的限定名实现于BarService接口。 14) Cache/String或者Boolean/可选:结果缓存,用于加速热门数据的访问速度。值包含lru(保证最热的数据被缓存)、threadlocal(线程缓存)、jcache(可以依赖于其他三方缓存)。 15) Validation/Boolean/可选:服务方法参数注解验证开关,true时表示开启方法参数注解验证。 16) Proxy/String/可选:指定使用的动态代理方式,jdk代理、javassist代理(默认)。 17) Client/String/可选::客户端传输类型设置,如Dubbo协议的netty或mina。 18) Registry/String/可选:用于指定注册中心,默认值会指向全部定义的registry,值为Registry标签中Id属性,如果同时注册到多个注册中心时多个注册中心间使用”,”号进行分割,如果将此值设置为N/A表示此服务不注册任何注册中心中。 19) Owner/String/可选:用于指定此服务负责人,推荐填写负责人公司邮箱名称前缀。多个时使用”,”号分割,可在注册中心中查看到该服务的负责人信息。 20) Actives/int/可选:指定一个消费者可以在这个服务或这个方法中可并行执行的请求数。 21) Cluster/String/可选:指定服务的集群方式,默认为failover()、 22) Filter/String/可选:对服务指定的过滤器名称,多个过滤器时可使用”,”号进行分隔。 23) Lintener/String/可选:服务提供方的监听器名称,多个名称用”,”号分隔。 24) Protocol/string/可选:指定服务的访问协议protocol标签中定义的id属性名称,如果有多个协议使用时可以使用”,”号分隔。 25) Layer/String/可选:服务提供者所在的分层。 26) Init/boolean/可选:用于指定初始化引用时间,默认为False表示为当有使用该引用时进行初始化,true时为服务加载时进行引用初始化 第3章 dubbo:protocol 说明 用于指定服务在传输过程中所使用的传输协议 所有属性 1) Id/String/可选:标识协议的唯一名称,默认与name属性相同,也就是dubbo:service中protocol属性所填入的值。 2) Name/String/必填:协议名称,更准确的讲应当叫做协议类型,值包含dubbo(默认)、rmi、http和hessian等。 3) Port/string/可选:协议端口,dubbo协议默认端口20880、rmi(1099)、http和hessian(80)。 4) Host/string/可选:服务主机IP,在多网卡时使用,默认会自动获取服务IP。 5) Threadpool/string/可选:线程池的类型,fixed(默认)表示估计大小的线程池数数量,启动时就保持一直开启;cached缓存线程池,空闲时一分钟自动删除,当使用时重新创建;limited可增长线程池,当线程池链接不够使用时会自动增长线程池大小,但不会自动关闭。 6) Accepts/int/可选:服务提供者可接受的最大链接数和service标签中的connections属性意义相同,并此数量会受其限制。 7) Payload/int/可选:表示请求和响应的数据包大小限制,默认为88388608(=8m)单位字节。 8) Codec/String/可选:协议使用的编码格式,默认为dubbo。 9) Serialization/String/可选:协议的序列化方式,默认情况下dubbo协议的序列化方式为hessian2、rmi(java)、http和hessian(json)。 10) Accesslog/String或Boolean/可选:是否输出远程服务访问日志信息,默认为false,设置为true是默认将日志指定到当前应用的Log4j日志,当为String类型时,可以对其指定日志输入文件信息。 11) Path/string/可选:服务路径,默认为接口名称和Service中指定的Path值应当保持一致,表示服务的自定义服务路径名称。 12) Transporter/String/可选:协议的服务端和客户端实现类型,dubbo协议默认为netty类型。 13) Server/String/可选:协议的服务端实现类型,dubbo协议默认为netty类型;http协议默认的为servlet类型 14) Client/String/可选:协议的客户端实现类型,dubbo协议默认为netty类型。 15) Dispatcher/String/可选:用于指定协议信息在发送时使用的线程模型,dubbo协议默认为all,all所有消息都是用线程池;direct所用消息都不使用线程池,只使用IO线程完成;message只用请求和响应使用线程池,其他断开、心跳等消息使用IO线程完成;execution只有请求使用线程池,其他响应、断开、心跳等消息使用IO线程完成;connection将断开连接有序放入队列在IO线程上执行,其他的消息使用线程池完成。 16) Queques/int/可选:指定当线程满了时处于排队等待的线程数量,默认为0。 17) Charset/string/可选:序列化编码格式默认为UTF-8 18) Heartbeat/int/可选:心跳间隔时间。注:心跳:用于检查长连接是否能正常使用,看它是否还活着。 19) telnet/String/可选:指定可执行的telnet指令,多个指令用”,”号分隔。指定该属性后可以在DOS命令行中对服务连接信息进行命令检测。 20) Registry/String/可选:用于指定注册中心,默认值会指向全部定义的registry,值为Registry标签中Id属性,如果同时注册到多个注册中心时多个注册中心间使用”,”号进行分割,如果将此值设置为N/A表示此服务不注册任何注册中心中。 21) Contextpath/string/可选: 22) Default/boolean/可选:是否指定默认所有的服务都使用该协议,默认为true,如果设置为false时使用该协议的服务必须在service标签中显示指定protocol属性值。 第4章 dubbo:registry 说明 用于定义注册中心信息,可配置多个。 所有属性 1) Id/String/可选:标识注册中心的唯一名称,在service标签registry属性、reference标签registry属性指定使用关联值。 2) Address/String/必填:注册中心的服务地址信息,在同一个集群下的多个注册中心可使用”,”号进行分隔,如果不在同一集群下须定义多个注册中心registry标签。服务器端口默认为9090。 3) Protocol/String/可选:注同中心地址类型,支持dubbo(云地址),http(远程地址),local(本地地址)三种类型。 4) Port/String/可选:注册中心端口,当address属性中端口未设置时使用其指定端口。 5) Username/string/可选:注册中心用户名称 6) Password/String/可选:注册中心用户密码 7) Transport/String/可选:用于指定网络传输方式,可选mina,netty(默认)。 8) Timeout/int/可选:注册中心请求访问超时时间,单位毫秒,默认5000毫秒。 9) Session/int/可选:注册中心会员检测时间,简单可理解为心跳间隔时间。 10) File/string/可选:在注册中心不可使用时会使用到,用以缓存注册中心服务地址和服务提供者列表信息,多个注册中心间不公用。 11) Wait/int/可选:停止时等待通知完成时间(毫秒)。 12) Check/Boolean/可选:在容器启动时检测注册中心是否存在,当为true时不存在会报错,反之则不处理。 13) Registry/boolean/可选:是否可向此注册中心注册服务,默认为true表示可向其进行注册服务,false时不可注册。 14) Subscribe/Boolean/可选:是否可向此注册中心订阅服务,默认为true表示可向其进行订阅服务,false时不可订阅。 15) Dynamic/Boolean/可选:指定该注册中心是否自动生效,默认为true自动生效,如果设置为false时此注册中心须人工进行干预手动进行开启、禁用。 16) Default/Boolean/可选:是否对全部服务生效,默认为true,当为false时表示不对所有服务生效,只有在service标签中指定了registry属性的使用该注册中心。 第5章 dubbo:monitor 说明 监控中心用于统计服务的调用次数和调用时间的监控。 所有属性 1) protocol /String/可选:监控中心协议,默认为dubbo协议,当其为registry时表示通过注册中心进行监控。 2) address/String/可选:直连监控中心服务器地址 第6章 dubbo:application 说明 用于配置当前应用信息,不管该应用是提供者还是消费者 所有属性 1) name/String/必填:当前项目中Application配置文件名称。 2) version/String/可选:当前引用版本,用于区分不兼容版本接口信息。 3) Owner/String/可选:用于指定此配置负责人,推荐填写负责人公司邮箱名称前缀。多个时使用”,”号分割,可在注册中心中查看到该配置的负责人信息。 4) Organization/String/可选:组织名称,可根据此值在注册中心中区分服务提供者信息。 5) Architecture/String/可选:用于服务分层对应的架构。如,intl、china。不同的架构使用不同的分层。 6) Environment/String/可选:在开发测试中长用,用于表示此配置只能在其指定的路径下进行使用。 7) Compiler/String/可选:类在使用中动态生成的方式,jdk、javassist(默认)。 8) Logger/string/可选:日志输出方式,slf4j(默认)、jcl、log4j、jdk。 第7章 dubbo:module 说明 模块配置,用于配置当前模块信息,用于注册中心计算模块间依赖关系 所有属性 1) Name/string/必填:模块名称,定义模块的唯一标识。 2) Version/String/可选:模块版本。 3) Owner/String/可选:模块负责人。 4) Organization/String/可选:组织名称,可根据此值在注册中心中区分服务提供者信息。 第8章 dubbo:provider 说明 服务提供者缺省配置信息,当标签service或者protocol标签中没有对其属性进行配置时默认使用此处配置信息,可以理解为服务提供者的全局属性配置信息。 所有属性 1) Id/String/可选:唯一标识ID可在service中provider属性中进行引入使用。 2) Protocol/string/可选:指定服务的访问协议protocol标签中定义的id属性名称,如果有多个协议使用时可以使用”,”号分隔。 3) Host/string/可选:服务主机IP,在多网卡时使用,默认会自动获取服务IP。 4) Threads/Int/可选:服务线程池大小,默认100. 5) Payload/int/可选:表示请求和响应的数据包大小限制,默认为88388608(=8m)单位字节。 6) Path/string/可选:服务路径,默认为接口名称和Service中指定的Path值应当保持一致,表示服务的自定义服务路径名称。 7) Server/String/可选:协议的服务端实现类型,dubbo协议默认为netty类型;http协议默认的为servlet类型 8) Client/String/可选:协议的客户端实现类型,dubbo协议默认为netty类型。 9) Codec/String/可选:协议使用的编码格式,默认为dubbo。 10) Serialization/String/可选:协议的序列化方式,默认情况下dubbo协议的序列化方式为hessian2、rmi(java)、http和hessian(json)。 11) Default/boolean/可选:是否指定默认所有的服务都使用该默认配置,默认为true,如果设置为false时使用该协议的服务必须在service标签中显示指定provider属性值。 12) Filter/String/可选:对服务指定的过滤器名称,多个过滤器时可使用”,”号进行分隔。 13) Lintener/String/可选:服务提供方的监听器名称,多个名称用”,”号分隔。 14) Threadpool/string/可选:线程池的类型,fixed(默认)表示估计大小的线程池数数量,启动时就保持一直开启;cached缓存线程池,空闲时一分钟自动删除,当使用时重新创建。 15) Accepts/int/可选:服务提供者可接受的最大链接数和service标签中的connections属性意义相同,并此数量会受其限制。 16) Version/String/可选:指定接口版本信息,用于区分不兼容版本接口信息。 17) Group/String/可选:指定接口实现信息,用于区分一个接口存在多个实现类。 18) Delay/Int/可选:用于指定延迟服务注册时间单位毫秒,当为-1时表示当Spring容器初始化完成后再进行服务注册。 19) Timerout/Int/可选:远程服务调用超时时间,默认为1000毫秒,可以对接口中的每个方法进行独立定义其远程调用超时时间,推荐用于在服务提供端进行定义。 20) Retries/Int/可选:当远程访问失败时进行的重新访问次数,默认为2并不包含第一次访问,如果当访问失败后不再访问则设置为0。 21) Connections/Int/可选:最大链接数,根据不同协议而定,当为rmi、http、hessian协议时表示的为消费者可提供的最大链接数,当为dubbo协议时表示的为建立的长链接个数。 22) Loadbalance/String/可选:负载均衡策略,默认为random(随机)、roundrobin(轮循)、leastactive(最少活跃调用)。 23) Async/Boolean/可选:可以实现同多线程相似效果,用于指定此次执行访问是否忽略返回值,默认为false表示为同步执行。True表示不阻塞线程,直接反馈返回无意思返回值。 24) Stub/boolean或class/可选:用于处理服务业务验证信息,在服务远程之前执行,用于对服务参数信息进行验证,当为boolean值时为true时会默认调用接口+ Local后缀实现类,当为Class时需要指定的类的限定名实现于BarService接口。 25) Mock/boolean或class/可选:用于处理不可控的异常信息,在服务远程之后执行,用于使用在对错误信息进行友好提示,当为boolean值时为true时表示如果出现错误也不抛出,当为Class时需要指定的类的限定名实现于BarService接口。 26) Token/string或boolean/可选:用于指定服务是否生成访问令牌,用于防止消费者绕过注册中心对提供者直接访问,当为String时表示服务令牌为固定值,在消费者进行使用时也需要进行指定固定指令,在点对点进行调用时,需要关闭令牌功能。 27) Registry/String/可选:用于指定注册中心,默认值会指向全部定义的registry,值为Registry标签中Id属性,如果同时注册到多个注册中心时多个注册中心间使用”,”号进行分割,如果将此值设置为N/A表示此服务不注册任何注册中心中。 28) Dynamic/Boolean/可选:表示此服务是否需要自动注册,默认为true,多用一些第三方服务内容,指定他们跳出服务容器对服务进行自动注册操作,须人工进行开启或停止。 29) Accesslog/String或Boolean/可选:是否输出远程服务访问日志信息,默认为false,设置为true是默认将日志指定到当前应用的Log4j日志,当为String类型时,可以对其指定日志输入文件信息。 30) Owner/String/可选:用于指定此服务负责人,推荐填写负责人公司邮箱名称前缀。多个时使用”,”号分割,可在注册中心中查看到该服务的负责人信息。 31) Document/String/可选:用于指定服务说明文档的URL信息。 32) Weight/int/可选:服务权重,在服务进行负载均衡时使用,用于表示服务在负载均衡中所占的调用比例。 33) Executes/int/可选:用于指定服务或服务中的方法可并行执行的最大请求数。 34) Actives/int/可选:指定一个消费者可以在这个服务或这个方法中可并行执行的请求数。 35) Proxy/string/可选:用于指定服务动态代理方式,可选jdk/javassist两种动态代理方式,默认为javassist方式。 36) Cluster/String/可选:指定服务的集群方式,默认为failover()。 37) Dispatcher/String/可选:用于指定协议信息在发送时使用的线程模型,dubbo协议默认为all,all所有消息都是用线程池;direct所用消息都不使用线程池,只使用IO线程完成;message只用请求和响应使用线程池,其他断开、心跳等消息使用IO线程完成;execution只有请求使用线程池,其他响应、断开、心跳等消息使用IO线程完成;connection将断开连接有序放入队列在IO线程上执行,其他的消息使用线程池完成。 38) Queques/int/可选:指定当线程满了时处于排队等待的线程数量,默认为0。 39) Charset/string/可选:序列化编码格式默认为UTF-8 40) Buffer/int/可选:网络读写缓冲区大小,默认8192字节。 41) Lothreads/int/可选:IO线程池与CPU配置紧密相关不建议配置。 42) Layer/String/可选:服务提供者所在的分层。 43) telnet/String/可选:指定可执行的telnet指令,多个指令用”,”号分隔。指定该属性后可以在DOS命令行中对服务连接信息进行命令检测。 44) Contextpath/string/可选: 第9章 dubbo:consumer 说明 服务消费者缺省配置信息,当标签reference标签中没有对其属性进行配置时默认使用此处配置信息,可以理解为服务消费者的全局属性配置信息。 常用属性 1) Timerout/Int/可选:远程服务调用超时时间,默认为1000毫秒,可以对接口中的每个方法进行独立定义其远程调用超时时间,推荐用于在服务提供端进行定义。 2) Retries/Int/可选:当远程访问失败时进行的重新访问次数,默认为2并不包含第一次访问,如果当访问失败后不再访问则设置为0。 3) Loadbalance/String/可选:负载均衡策略,默认为random(随机)、roundrobin(轮循)、leastactive(最少活跃调用)。 4) Async/Boolean/可选:可以实现同多线程相似效果,用于指定此次执行访问是否忽略返回值,默认为false表示为同步执行。True表示不阻塞线程,直接反馈返回无意思返回值。 5) Connections/Int/可选:最大链接数,根据不同协议而定,当为rmi、http、hessian协议时表示的为消费者可提供的最大链接数,当为dubbo协议时表示的为建立的长链接个数。 6) Check/Boolean/可选:表示在Spring容器加载时是否对服务进行检测,true时表示如果启动时不存在直接报错,false时表示不存在忽略。 7) Proxy/String/可选:指定使用的动态代理方式,jdk代理、javassist代理(默认)。 8) Owner/String/可选:用于指定此服务负责人,推荐填写负责人公司邮箱名称前缀。多个时使用”,”号分割,可在注册中心中查看到该服务的负责人信息。 9) Actives/int/可选:指定一个消费者可以在这个服务或这个方法中可并行执行的请求数。 10) Cluster/String/可选:指定服务的集群方式,默认为failover()。 11) Filter/String/可选:对服务指定的过滤器名称,多个过滤器时可使用”,”号进行分隔。 12) Lintener/String/可选:服务提供方的监听器名称,多个名称用”,”号分隔。 13) Registry/String/可选:用于指定注册中心,默认值会指向全部定义的registry,值为Registry标签中Id属性,如果同时注册到多个注册中心时多个注册中心间使用”,”号进行分割,如果将此值设置为N/A表示此服务不注册任何注册中心中。 14) Layer/String/可选:服务提供者所在的分层。 15) Init/boolean/可选:用于指定初始化引用时间,默认为False表示为当有使用该引用时进行初始化,true时为服务加载时进行引用初始化 16) Cache/String或者Boolean/可选:结果缓存,用于加速热门数据的访问速度。值包含lru(保证最热的数据被缓存)、threadlocal(线程缓存)、jcache(可以依赖于其他三方缓存)。 17) Validation/Boolean/可选:服务方法参数注解验证开关,true时表示开启方法参数注解验证。 第10章 dubbo:method 说明 服务中方法配置,属于标签service和标签reference的子标签信息,用于对服务的方法信息进行配置。 常用属性 1) Name/String/必填:方法名 2) Timeout/int/可选:方法调用超时时间。 3) Retries/Int/可选:当远程访问失败时进行的重新访问次数,默认为2并不包含第一次访问,如果当访问失败后不再访问则设置为0。 4) Loadbalance/String/可选:负载均衡策略,默认为random(随机)、roundrobin(轮循)、leastactive(最少活跃调用)。 5) Async/Boolean/可选:可以实现同多线程相似效果,用于指定此次执行访问是否忽略返回值,默认为false表示为同步执行。True表示不阻塞线程,直接反馈返回无意思返回值。 6) Actives/int/可选:指定一个消费者可以在这个服务或这个方法中可并行执行的请求数。 7) Executes/int/可选:用于指定服务或服务中的方法可并行执行的最大请求数。 8) Deprecated/Boolean/可选:用于标识此服务是否已经过了维护期,默认为false,当设置为true时在消费方进行使用时会提示警告error日志。 9) Sent/Boolean/可选:当为true时表示当消息发出后返回信息(默认);当为false时表示把消息放入到队里就返回信息,不管消息是否发送成功。 10) Sticky/Boolean/可选:默认为fasle,用与指定此接口的全部方法是否使用同一个provider配置。 11) Return/Boolean/可选:方法调用是否需要返回值与Async联合使用,只有async属性设置为true时才会生效,返回future、onreturn等方法,如果async属性设置为false时,返回null。 12) Oninvoke/String/可选:方法执行前执行,此处值可以指定为定义的某个Service中的某个方法,前提这个服务要在Spring容器中加载。 13) Onreturn/String/可选:方法执行返回后执行,此处值可以指定为定义的某个Service中的某个方法,前提这个服务要在Spring容器中加载。 14) Onthrow/String/可选:方法执行中出现异常时执行,此处值可以指定为定义的某个Service中的某个方法,前提这个服务要在Spring容器中加载。 15) Cache/String或者Boolean/可选:结果缓存,用于加速热门数据的访问速度。值包含lru(保证最热的数据被缓存)、threadlocal(线程缓存)、jcache(可以依赖于其他三方缓存) 16) Validation/Boolean/可选:服务方法参数注解验证开关,true时表示开启方法参数注解验证。 第11章 dubbo:argument 说明 属于method标签的子标签信息与method标签联合使用,用于对方法参数特征进行描述,用于在服务端的方法中存在需要客户端进行执行返回的参数时使用。 常用属性 1) Index/int/必填:方法参数的下标索引。 2) Type/String/必填:与index属性二选其一进行定义,使用接口的限定名为其类型定义。 3) Callback/Boolean/可选:指定参数是否为callback接口,如果设置为true时,表示此参数可以使用客户端逻辑执行得到结果信息。 第12章 dubbo:parameter 说明 该标签可为protocol、service、provider、reference、consumer的子标签,用于配置其属性参数信息,以上标签中全部属性都可以使用该标签进行指定定义。 常用属性 1) Key/string/必填:参数名称。 2) Value/String/必填:参数值。 |
|||
Spring MVC Controller 多个Validator使用 | spring mvc initbinder validator | ||
在项目中使用了Spring Mvc Validator验证,实现一个Controller 中多个方法分别使用不同的Validator对其方法参数进行验证。 验证类Validator代码信息: package com.validator; import org.springframework.validation.Validator; import com.baozun.mp2.rpc.api.member.dto.MemberInDto; /** * UserValidator 对用户信息进行验证 * */ public class UserValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return clazz.equals(User.class); } @Override public void validate(Object target, Errors errors) { User user = (User) target; if(StringUtils.isNotBlank(user.getPassword()) && user.getPassword().length()<6){ errors.rejectValue("password",null, "password at least is 6 length"); } } } Controller代码信息: import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.validation.DataBinder; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import com.baozun.mp2.rpc.api.member.dto.MemberInDto; import com.baozun.web.controller.validator.MemberInDtoValidator; /** * 会员信息修改controller * */ @Controller public class UserController { /** * 初始化 验证类 信息 * * 如果其@InitBinder未设置value属性名称信息 时表示该UserController 下的editMember1、editMember2、editMember3方法执行时均会进入到AllValidator执行supports方法 * @param binder */ @InitBinder() public void initBinderAll(DataBinder binder) { binder.setValidator(new AllValidator());//AllValidator全局验证信息 } /** * 初始化 验证类 信息 * * 如果其@InitBinder已设置value属性名称信息时,表示该UserController 下的方法中存在userInVo参数名称的方法在调用时会执行UserValidator验证的supports方法,也就是在editMember1和editMember2方法调用时会执行。 * @param binder */ //问题1、此时editMember1、editMember2和editMember3三个方法中都不存在userInVo名称的参数,为何editMember1、editMember2方法调用时会执行此验证?因为:editMember1和editMember2中都存在UserInVo 参数,在Spring在未见到@ModelAttribute注解时会默认将其参数UserInVo默认命名为userInVo。所以! //问题2、editMember1方法和editMember2方法的区别是什么?细心的人会发现editMember1比editMember2参数UserInVo前方多出了@Valid注解,因此区别就在于editMember1在调用时会先将UserValidator验证中的supports和validate方法全部执行完才会执行editMember1方法体,而editMember方法在调用时只会将UserValidator验证中的supports方法执行,而不会执行validate方法,然后再执行editMember2方法体。 //问题3、此时为何editMember3方法调用时不会执行此验证方法?是因为editMember3使用了@ModelAttribute注解将UserInVo参数名修改为了user与此验证设置的value属性值不想同因此不会执行。 @InitBinder(value="userInVo") public void editMemberInitBinder(DataBinder binder) { binder.setValidator(new UserValidator()); } /** * 会员信息修改方法1 * @param userInVo 会员修改参数信息 * @param bindingResult * @return */ //@Valid @RequestMapping("/editMember1") public String editMember(@Valid UserInVo user, BindingResult bindingResult) { //所有验证错误信息 List<FieldError> fieldErrorList = bindingResult.getFieldErrors(); return "跳转地址"; } @RequestMapping("/editMember2") public String editMember2(UserInVo user, BindingResult bindingResult) { //所有验证错误信息 List<FieldError> fieldErrorList = bindingResult.getFieldErrors(); return "跳转地址"; } @RequestMapping("/editMember3") public String editMember3(@ModelAttribute("user") UserInVo uservo, BindingResult bindingResult) { //所有验证错误信息 List<FieldError> fieldErrorList = bindingResult.getFieldErrors(); return "跳转地址"; } } 在Spring MVC Validator 使用过程中可通过上面代码说明的方式,实现同一个Controller中 定义多个Validator。 根据不同的方法调用不同的Validator。 |
|||
cglib、jkd、JavaAssit 三种动态代理小例 | 动态代理 | ||
一、代理简单理解说明 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 二、代理身边常用例子 Spring AOP、Hibernate实现类的延迟加载、 三、代理的类型 静态代理:在程序运行之前就通过编译工具生成了代理类文件信息,在运行时直接对其进行编译。 动态代理:在程序运行时,运用反射机制根据定义的不同的代理形势直接生成编译后代理类信息。 注:cglib动态代理使用的为Spring的jar和其net.sf.cglib.proxy下的jar区别不大 package com.test; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import javassist.util.proxy.MethodHandler; import javassist.util.proxy.ProxyFactory; import javassist.util.proxy.ProxyObject; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; public class Medium { public static void main(String[] args) throws Exception { TenantInter tenant = new Tenant(); //Jdk代理 使用接口形式 实现类的代理 编译快 运行慢 TenantInter tenants = (TenantInter) Proxy.newProxyInstance(tenant.getClass().getClassLoader(),tenant.getClass().getInterfaces(),new JdkMedium(new Tenant())); tenants.tenement(); System.out.println(); //javassist 使用接口形式 实现类的代理 可以脱离java虚拟机独立运行 效率较Jdk代理要慢 Hibernate 3.3以后版本使用了此代理方式 ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setInterfaces(tenant.getClass().getInterfaces()); TenantInter tenantInter = (TenantInter) proxyFactory.createClass().newInstance(); ((ProxyObject)tenantInter).setHandler(new JavaAssitMedium(new Tenant())); tenantInter.tenement(); System.out.println(); //cglib 代理 使用的是为代理类生成子类方式 实现代理 运行期代理 编译慢 但其运行较快 将类直接编译为 不能用于final定义的类 Tenant gclibTenant = (Tenant) new CglibMedium().getProxy(Tenant.class); gclibTenant.tenement(); System.out.println(); } /** * Jdk 代理类 </br> 借指中介 * JdkMedium */ static class JdkMedium implements InvocationHandler { final Object delegate; JdkMedium(Object delegate) { this.delegate = delegate; } public Object invoke(Object object, Method method, Object[] objects) throws Throwable { System.out.println("Jdk 来帮你找房源"); return method.invoke(delegate, objects); } } /** * JavaAssit 代理类 </br> 借指中介 * JavaAssitMedium */ static class JavaAssitMedium implements MethodHandler { final Object delegate; JavaAssitMedium(Object delegate) { this.delegate = delegate; } public Object invoke(Object self, Method m, Method proceed, Object[] args) throws Throwable { System.out.println("JavaAssit 帮你找房源"); return m.invoke(delegate, args); } } /** * cglib 代理类 </br> 借指中介 * CglibMedium */ static class CglibMedium implements MethodInterceptor{ private Enhancer enhancer = new Enhancer(); /** * 为被代理类创建 代理子类信息 * @param clazz * @return */ @SuppressWarnings("rawtypes") public Object getProxy(Class clazz){ //设置需要创建子类的类 enhancer.setSuperclass(clazz); enhancer.setCallback(this); //通过字节码技术动态创建子类实例 return enhancer.create(); } //代理子类的方法 其中会调用被代理类的方法 public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable { //代理类方法执行前执行 ----- Spring AOP的事务管理 打开事务 System.out.println("Cglib 帮你找房源"); //执行被代理类的方法 Object result = proxy.invokeSuper(obj, args); //代理类方法执行后执行-----Spring AOP的事务管理 提交事务 System.out.println("后面事情我不管"); return result; } } /** * 被代理的类 </br>目前是表示租房人 * Counter */ static class Tenant implements TenantInter { /** * 租房 方法 */ public void tenement(){ System.out.println(" 我要租房。。。 "); } } /*** * 被代理类的接口信息 </br> 表示 * TenantInter */ static interface TenantInter { /** * 租房 */ public void tenement(); } } |
|||
HTTP对外接口测试类 | http | ||
//随着与外部接口接入,一个对外接口链接测试类成为猿中必备 //第一:HttpURLConnection 老版本 链接方式 import java.io.BufferedInputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public static void main(String[] args) { send("http://","name=test$password=pwd","utf-8"); } /** * @Description: * @param apiurl 访问地址 * @param param 发送的参数 * @param charest 发送编码格式 * @author */ public static String send(String apiurl,String param,String charest) { URL url = null; HttpURLConnection httpurlconnection = null; String line = "";//返回结果 try { url = new URL(apiurl); //根据 地址 创建URL对象 httpurlconnection = (HttpURLConnection) url.openConnection();//开启远程链接 httpurlconnection.setDoOutput(true);//true 表示允许向请求中写入和读取响应信息 默认为false httpurlconnection.setRequestMethod("POST");//定义发送类型 //httpurlconnection.setRequestProperty("Content-type", "application/xml");//设置请求 head 的相应属性 httpurlconnection.getOutputStream().write(param.getBytes(charest));//将参数指定响应编码格式写入到请求流中 httpurlconnection.getOutputStream().flush();//刷新缓存区 httpurlconnection.getOutputStream().close();//关闭请求写入流 //httpurlconnection.getResponseCode();//获取响应码 200为正常已经访问成功 InputStream input = httpurlconnection.getInputStream();//获得请求相应流 input = new BufferedInputStream(input);//读取相应流信息 int c; StringBuffer buff = new StringBuffer(); while ((c = input.read()) != -1) { buff.append((char) c); } input.close();//响应流关闭 String str = buff.toString(); line = new String(str.getBytes("ISO-8859-1"), "utf-8");//将相应流信息转码 } catch (Exception e) { } finally { if (httpurlconnection != null) httpurlconnection.disconnect();//断开连接 } return line; } //第二:DefaultHttpClient 高版本链接方式(拼接传参法) import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.HttpConnectionParams; public String send2(String apiurl,String param ) { String result=""; DefaultHttpClient httpclient = new DefaultHttpClient(); try { httpclient.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 0);// 连接时间设置 httpclient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, 0); // 读取时间设置 HttpPost httpPost = new HttpPost(apiurl); StringEntity reqEntity = new StringEntity(param); //请求数据 //reqEntity.setContentType("application/xml"); // 设置请求类型 httpPost.setEntity(reqEntity); //请求数据 ResponseHandler<String> responseHandler = new BasicResponseHandler(); result=httpclient.execute(httpPost, responseHandler); System.out.println(result); } catch (Exception e) { } finally { httpclient.getConnectionManager().shutdown(); } return result; } //第三:DefaultHttpClient 高版本链接方式(复杂参数连接法) import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.NameValuePair; import org.apache.http.client.ResponseHandler; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.HttpConnectionParams; public void send3(String apiurl,Map<String,String> param) { DefaultHttpClient httpclient = new DefaultHttpClient();//用于定义连接的参数信息 try { httpclient.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 0);// 连接超时时间 httpclient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT, 0); // 读取超时时间 HttpPost httpPost = new HttpPost(apiurl);//定义请求地址 及其相应请求参数 List<NameValuePair> nameValuePairList =new ArrayList<NameValuePair>(); for(Map.Entry<String, String> entry: param.entrySet()) { nameValuePairList.add(new BasicNameValuePair(entry.getKey(),entry.getValue())); } httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, "GB2312"));//设置请求参数及编码格式 ResponseHandler<String> responseHandler = new BasicResponseHandler();//指定返回响应参数格式 String restr=httpclient.execute(httpPost, responseHandler);//发送请求 获得返回参数 System.out.println(restr); } catch (Exception e) { } finally { httpclient.getConnectionManager().shutdown(); } } //第四:WebService 访问并获取返回值信息 |