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

缓存的实现是以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包的配置文件独立到外部的时候,读取资源文件的路径确定是通过拦截器,拦截到了类去得到的。其他方式我还不懂,敬请指教。

时间: 2025-01-02 01:05:28

Redis + EJB缓存实现(五)—配置文件的相关文章

redis使用基础(五) ——Redis数据持久化

redis使用基础(五) --Redis数据持久化 (转载请附上本文链接--linhxx) 当服务器突然发生问题,或者redis重启,如果希望将数据持久化在硬盘中,下次开启redis还有数据时,redis提供了两种方案,一个叫做RDB(通过内存快照(Snapshotting)实现),另一个叫做AOF(日志追加(Append-only file)).通常结合两种方式来实现redis的持久化. 1.RDB RDB通过内存快照实现,会将redis当前的全部数据以快照的方式写入二进制文件中.实现快照有以

Spring Boot 整合Redis 实现缓存

本文提纲 一.缓存的应用场景 二.更新缓存的策略 三.运行 springboot-mybatis-redis 工程案例 四.springboot-mybatis-redis 工程代码配置详解 运行环境: Mac OS 10.12.x JDK 8 + Redis 3.2.8 Spring Boot 1.5.1.RELEASE 一.缓存的应用场景 什么是缓存? 在互联网场景下,尤其 2C 端大流量场景下,需要将一些经常展现和不会频繁变更的数据,存放在存取速率更快的地方.缓存就是一个存储器,在技术选型

【新手总结】在.Net项目中使用Redis作为缓存服务

最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结. 和Redis有关的基础知识 Redis是一个开源的分布式NoSql数据库,可以用来做缓存服务.消息队列.数据存储等等,数据类型之丰富,效率之高,简直逆天!没有了解过的可以移步去问度娘~客户端之丰富,足可见它的社区有多强大: 其中C#的客户端就有这么多: 没错,我们的项目里也选择了最热门的StackExchange.Redis作

redis spring缓存配置

使用redis做缓存的思路是在spring的项目中配置拦截器,在service层做切面,在findXXX或者getXXX等方法上进行拦截判断是否缓存即可. 1.环境:spring 3.1.2 + spring data redis 1.0.0+ jedis 2.1.0 2.spring配置文件配置: <!-- jedis 配置 --> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConf

SpringAOP与Redis搭建缓存

SpringAOP与Redis搭建缓存 近期项目查询数据库太慢,持久层也没有开启二级缓存,现希望采用Redis作为缓存.为了不改写原来代码,在此采用AOP+Redis实现. 目前由于项目需要,只需要做查询部分: 数据查询时每次都需要从数据库查询数据,数据库压力很大,查询速度慢,因此设置缓存层,查询数据时先从redis中查询,如果查询不到,则到数据库中查询,然后将数据库中查询的数据放到redis中一份,下次查询时就能直接从redis中查到,不需要查询数据库了. redis作为缓存的优势: 1.内存

ehcache memcache redis 三大缓存男高音_转

ehcache memcache redis 三大缓存男高音 2013-01-16 15:43 10500人阅读 评论(2) 收藏 举报 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!  Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍

Redis 作为缓存服务器的配置

随着redis的发展,越来越多的架构用它取代了memcached作为缓存服务器的角色,它有几个很突出的特点:1. 除了Hash,还提供了Sorted Set, List等数据结构2. 可以持久化到磁盘3. 支持cluster (3.0) 它的性能和memcached不相上下,再加上流行的其他组件(比如队列)也会用到redis,从架构简单出发,已经没有必要混用redis和memcached了. 写篇短文介绍一下用redis作为缓存服务器配置时候需要注意几个点. Redis配置 作为缓存服务器,如果

Redis分布式缓存安装(单节点)

Redis分布式缓存安装(单节点) Redis官网:http://redis.io独立缓存服务器:IP:xxx.xxx.xxx.xxx安装环境:CentOS 6.6Redis 版本:redis-3.0(因为 Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,请在安装时去官网选用最新版)用户:root安装目录:/usr/local/redis 下面我们针对于Redis安装做下详细的记录:编译和安装所需的包:# yum install gcc tcl 提醒:下载 3.0 版 R

redis之(十一)redis实现缓存的功能

[一]redis实现缓存的原理 --->利用键的失效时间设置实现缓存技术 --->由于redis的内存有限,可以在redis的配置文件里设置maxmemory的参数.来限制redis最大可用内存的大小.(单位是字节),当超出这个限制的时候,redis可以依据maxmemory-policy参数指定的策略来删除不需要的键直到redis占用的内存小于指定内存 --->LRU(least Recently Used)最近最少使用 --->事实上redis并不回准确低将整个数据库中最久未被