码迷,mamicode.com
首页 > 其他好文 > 详细

Redis + EJB缓存实现(五)—配置文件

时间:2015-05-26 21:22:38      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

    缓存的实现是以Jar包的方式引入到项目中使用的,之前说过那么Redis服务器的数据源信息就不能配置在Jar包内部,Jar包是不容易更改的。所以,应该将数据源信息配置在外部,即引入的项目中。这样做遇到了两个问题:一是,配置文件的路径,二是,数据源信息唯一。

路径

    这个问题上也花费了一点时间,得到了路径很乱。所以,对JAVA的路径做了一点点了解。要读取资源文件,首先需要了解什么是classpath,即所谓的类路径。

    classpath

    它描述了Java虚拟机在运行一个Class时在哪些路径中加载要运行的类以及运行的类要用到的类。简单的说,就是像操作系统的path,只不过这个classpath是由Java的虚拟机来使用查找需要加载的类,而操作系统的path是由操作系统用来查找用户输入的可执行程序。
    说白了就是你开发的那些类,编译成.class文件之后的存放位置。以本项目为例,它的classpath路径为:E:\ITOO\itoo\ejbredis-cache\target\classes。实际上我们开发目录和发布目录是不一样的,classpath指的是发布后的目录。所以,从target文件夹下找classes就对了。程序的classpath路径可以通过以下方法拿到。

    取得资源文件的方法

    通过class
    this.getClass().getResource("")
    得到的是当前类class文件的URI目录。不包括自己!
 
    this.getClass().getResource("/")
    得到的是当前的classpath的绝对URI路径。通过class取得路径时,资源名称是否以“/”开始,其相对路径是不一样的。需要注意。
    通过classLoader
    this.getClass().getClassLoader().getResource("")
    得到的也是当前ClassPath的绝对URI路径。
 
    ClassLoader.getSystemResource("")
    得到的也是当前ClassPath的绝对URI路径。
    该项目下我是通过如下方法取得资源文件的输入流的。这里我规定了,资源文件的位置。然后,根据拦截器得到的目标类,即ctx.getTarget()。然后再通过它的class取得资源文件,即服务器配置信息。
InputStream in =(ctx.getTarget().getClass().getResourceAsStream("/config/cache.xml"));
关于这个路径的知识,推荐一个视频,虽然有点啰嗦但是还算讲解的清楚。

数据源信息的唯一

    这个问题是说我现在是通过拦截器得到的目标类,然后去读取资源文件的。但是每次读取文件是极度耗费资源的事情。因此,想到了单例类。EJB是通过@Singleton来实现单例的,先看看这个类吧!
@Singleton
@Local(IProperty.class)
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public classCacheProperty implements IProperty{        
//服务器地址
    public String host = "127.0.0.1";
//端口号
    public int port = 6379;
 
    public int expire = 0;
 
    public int timeout = 0;
 
    public String password = "" ;
   
    public String prefixion = null;
 
    //初始化标记
    public boolean flag = false;
       //get\set方法省略
}

这里通过一个标记来标注类是否被初始化过了,从而保证不会每次都去读取配置文件。拦截器中的相关代码如下:
 if(cachepro.getFlag() == false){
    InputStream in =(ctx.getTarget().getClass().getResourceAsStream("/config/cache.xml"));
             byte[] byt = newbyte[in.available()];
             in.read(byt);
             cache.init(byt);
            } 
 


总结:关于配置文件的内容就到这里了,基本上缓存这个部分的内容也就是这么多了。关于类路径这一块其实有的内容没有深入。然后是,这个篇博客说的是,当将jar包的配置文件独立到外部的时候,读取资源文件的路径确定是通过拦截器,拦截到了类去得到的。其他方式我还不懂,敬请指教。

Redis + EJB缓存实现(五)—配置文件

标签:

原文地址:http://blog.csdn.net/zhuojiajin/article/details/46013459

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!