- 浏览: 105877 次
- 性别:
- 来自: 北京
最新评论
-
sheungxin:
@仑山中鸟 @zl_xzl 不好意思,代码已丢。。。自己动手试 ...
自定义类加载器与spring的集成 -
昆仑山中鸟:
同求代码,看的云里雾里。自定义监听器WebContextLis ...
自定义类加载器与spring的集成 -
xzl_xzl:
代码都是片段,能否提供下具体的代码,正好我也有类似的需求。但我 ...
自定义类加载器与spring的集成 -
sheungxin:
@add2ws 我试下,多谢!
基于oracle的增量数据采集实现总结 -
add2ws:
用得着这么麻烦么,直接用kettle插入更新,配合oracle ...
基于oracle的增量数据采集实现总结
文章列表
深入探讨在集群环境中使用 EhCache 缓存系统
引用http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/
EhCache RMI 分布式缓存/缓存集群
引用http://blog.csdn.net/xlxxcc/article/details/52350264
ehcache配置文件译文
引用http://dreamzhong.iteye.com/blog/1161954
Ehcache介绍
引用http://www.open-open.com/lib/view/open1322893483171.html
● replicat ...
测试环境
Apache:2.4.25
web server:apache-tomcat-8.0.18
Jdk:1.8
操作系统:Windows7
Apache下载及配置(免安装版)
官网下载:http://httpd.apache.org/
找到Apache下conf目录中httpd.conf文件,进行以下调整:
#Define SRVROOT "/Apache24" 》Define SRVROOT "D:/MyTest/tomcat_cluster/Apache24" #指向安装目录
安装Apache主服务,管理员权限打开cmd,执行:httpd ...
在Spring集成第三方时,通常会提供以下方式的配置来作为第三方引入的入口:
<filter>
< filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
...
数据结构中的数组和链表被我们所熟知,其有优缺点刚好相反,HashMap综合了两者的特性,是一种寻址容易、插入/删除也容易的数据结构。
HashMap作为java中一种常用的数据结构,工作中会被经常使用,面试中问的也比较多。但一直只了解其特性,其实现原理也只停留在由数组、链接构成,key hash落在数组上,落在数组同一位置的以链表实现,但并没有深入思考,了解其具体实现。今天看到一篇博客,深入浅出的分析了HashMap的实现原理:
引用http://blog.csdn.net/vking_wang/article/details/14166593
下面针对文章中的一些重点,做一些摘要和总结:
1 ...
线程池相关类
ExecutorService真正的线程池接口ScheduledExecutorService能和Timer/TimerTask类似,解决那些需要任务重复执行的问题ThreadPoolExecutorExecutorService的默认实现ScheduledThreadPoolExecutor继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周 ...
STOMP plugin
Stomp是一个简单的消息文本协议(不重点介绍,没仔细研究过)。RabbitMQ中STOMP plugin的集成,实现了由浏览器通过WebSocket协议访问消息队列,SockJS作为后备(旧版的浏览器不支持WebSocket协议)
rabbitmq-plugins enable rabbitmq_web_stomp
rabbitmq-plugins enable rabbitmq_web_stomp_examples通过链接:http://127.0.0.1:15670/web-stomp-examples可以访问演示样例,实际上没法用,因为引用的jqu ...
进行实验
以下代码使用一个自定义类加载器,输出类加载器的层级结构和当前实例使用的类加载器
Class cl=new DefinedClassLoader("d:/").loadClass("HelloWorldServiceImpl");
HelloWorldService helloWorldService=(HelloWorldService)cl.newInstance();
helloWorldService.helloWorld();
ClassLoader loader=cl.getClassLoader();
while(loader ...
实现目标
实现项目部署包仅能在指定服务器部署,不可更改。更换位置,无法正常启动和访问。目前还没有完美的解决方案,有些思路还待验证。
实现方案
校验规则
校验当前服务器mac地址是否匹配
启动报错提示
方案1:自定义servlet,load-on-startup设置为0,在init方法中校验
方案2:定义ServletContextListener,在contextInitialized方法中校验
可考虑在校验失败的情况下删除项目文件。该方案通过修改配置文件,从而屏蔽掉校验,安全级别不高
禁止非指定server部署访问
为了禁止非指定server部署访问,可在action层、servi ...
java代理分静态代理和动态代理,动态代理有jdk代理和cglib代理两种,在运行时生成新的子类class文件。本文主要练习下动态代理,代码用于备忘。对于代理的原理和机制,网上有很多写的很好的,就不班门弄斧了。
jdk代理
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactory implements InvocationHandler {
...
Validated User ID
发送消息时指定userid,只有是当前conn的用户名才可以发送出去消息(测试发现非当前conn用户名,队列没有也没有创建,可能因为是在同一个channel)。用于消费者consumer需要知道消息是从哪个用户发过来的情况
package com.demo.mq.rabbitmq.example12;
import java.io.IOException;
import java.io.Serializable;
import java.util.concurrent.TimeoutException;
import org.apache.commo ...
消息确认机制
RabbitMQ提供了transaction、confirm两种消息确认机制。transaction即事务机制,手动提交和回滚;confirm机制提供了Confirmlistener和waitForConfirms两种方式。confirm机制效率明显会高于transaction机制,但后者的优势在于强一致性。如果没有特别的要求,建议使用conrim机制。
1、从实验来看,消息的确认机制只是确认publisher发送消息到broker,由broker进行应答,不能确认消息是否有效消费。
2、而为了确认消息是否被发送给queue,应该在发送消息中启用参数mandatory=true, ...
优先级队列
只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效
RabbitMQ3.5以后已经集成了rabbitmq_priority_queue
引用http://www.rabbitmq.com/community-plugins.html
验证方式:触发为及时消费场景,常用场景与Qos结合使用
1、可先发送消息,再进行消费
2、开启手动应答、设置Qos。若为1,在一个消费者存在的情况下,除第一个消息外均按优先级进行消费(第一个消息被及时消费掉了)
3、可在方式二的基础上不断增加消费者,也符合优先调用规则
注意要点
为消息设置优先级别://随机设置消 ...
监听器
RabbitMQ中监听器有ReturnListener、ConfirmListener、ShutdownListener,本练习中使用ReturnListener,在发布消息时设置mandatory等于true,监听消息是否有相匹配的队列,没有时ReturnListener将执行handleReturn方法,消息将返给发送者
设置mandatory=true,当路由不到队列时返回给消息发送者,在return监听器中接收
设置immediate=true,当路由不到消费者时返回,3.0以后版本已废弃,会影响镜像队列性能,建议采用消息TTL和DLX
注意要 ...
延时队列
在实际业务场景中可能会用到延时消息发送,例如支付场景,准时支付、超过未支付将执行不同的方案,其中超时未支付可以看做一个延时消息。
RabbitMQ本身不具有延时消息队列的功能,但是可以通过TTL(Ti ...
持久化
RabbitMQ的持久化是为了实现服务从异常状态恢复后恢复之前的状态。RabbitMQ发送消息涉及交换器(exchange)、队列(queue)、消息,因而持久化包括交换器的持久化、队列的持久化、消息文本的持久化。获取消息是从队列中 ...