1.1emapcomponent


1.1.1上传下载

1.1.1.1变量说明

1、[root], emap运行环境部署时使用的上下文根

2、[component],附件上传下载所在的应用,默认名称为emapcomponent

3、[params],其他条件参数,如:imageType=1

4、{scope},调用上传的应用中页面模型的ID

5、{fileToken},附件的令牌,调用上传的应用所属实体对象字段的值,每个字段值可以对应多个附件

6、{attatchId},附件唯一标识的wid值

1.1.1.2上传过程

1、根据scope和fileToken上传到临时目录

2、系统根据附件类型判断:大小、格式、登录权限

3、自定义判断(根据应用是否扩展过)

4、保存业务数据时,把临时文件保存到正式目录下

5、自定义保存(根据应用是否扩展过)

注:系统也提供了定时清理临时文件的功能,间隔时间配置在fileConfig.xml文件中

1.1.1.3下载过程

1、下载请求

2、自定义生成文件流(根据应用是否扩展过)

3、读取本地文件流(如果有第2步且成功,则本步忽略)

1.1.1.4Ajax提交地址

1.1.1.4.1获取当前系统时间

【url】:

/[root]/sys/emapcomponent/file/upload/getServerTime.do

【样例】:

返回结果:

1.1.1.4.2获取配置中临时文件的有效时间

【url】:

/[root]/sys/emapcomponent/file/upload/tempOverdueTime.do

【参数】:

【样例】:

1.1.1.4.3获取类型配置

【url】:

/[root]/sys/emapcomponent/file/upload/getFileConfig.do

【参数】:

storeId:必填项,附件类型的ID,来源于emapcomponent应用中的配置fileConfig.xml

【样例】:

js代码:

返回结果:

1.1.1.4.4上传到临时文件

【url】:

/[root]/sys/emapcomponent/file/uploadTempFile/{scope}/{fileToken}.do

或者

/[root]/sys/emapcomponent/file/uploadTempFile.do

【参数】:

storeId:必填项,附件类型的ID,来源于emapcomponent应用中的配置fileConfig.xml

fileName:选填,自定义的附件名称,不用带上后缀,会自动取原文件名后缀,不填的话就默认使用原文件名。

isSingle:选填,如果为“1”,表示在上传前会先将该token下的所有临时文件清理掉。

customer:选填,实现了ICustomerFileOp接口的service名称,会执行其中的fileCheck方法,方法的返回值会作为请求返回的错误信息

app:选填,上述service所在应用名称

【样例】:

js代码:

    返回结果:

1.1.1.4.5删除已上传的临时文件

【url】:

/[root]/sys/emapcomponent/file/deleteTempFile/{scope}/{fileToken}/{fileWid}.do

或者

[root]/sys/emapcomponent/file/deleteTempFile.do

二者都限定为POST请求

【参数】:

scope:上传时指定的scope标识,必填

fileToken:上传时指定的文件token,必填

fileWid:指定要删除的文件id,选填,不填则会删除token下所有临时文件

【样例】:

js代码:

    或者

    返回结果:

    注意:success为true仅表示请求提交到了后台,至于文件路径是否正确,是否正确删除,则不能保证。

1.1.1.4.6获取上传的临时文件

【url】:

/[root]/sys/emapcomponent/file/getTempFile/{scope}/{fileToken}/{fileId}.do

或者

/[root]/sys/emapcomponent/file/getTempFile.do

【参数】:

scope:上传时指定的scope标识,必填

fileToken:上传时指定的文件token,必填

fileId:临时文件的id,必填

【样例】:

直接输入地址,弹出下载窗口:

1.1.1.4.7裁剪图片临时文件,生成一个新的临时文件

【url】:

/[root]/sys/emapcomponent/file/cutTempFile/{scope}/{fileToken}/{fileWid}.do

支持裁剪的格式包括:bmp,gif,jpg,jpeg,png,wbmp

【参数】:

x:必填,剪裁区域左上角x坐标

y:必填,剪裁区域左上角y坐标

width:必填,剪裁区域宽度

height:必填,剪裁区域高度

actualWidth:选填,保存文件的实际宽度(缩放后的)

actualHeight:选填,保存文件的实际高度(缩放后的)

【样例】:

剪裁的方式为:

原图中,以(x,y)为左上角顶点,width,height为宽高的矩形部分。然后根据actualWidth和actualHeight对截取部分进行缩放,最后对缩放结果进行保存。

js代码:

返回结果:

1.1.1.4.8将临时文件保存为附件(正式文件)

【url】:

/[root]/sys/emapcomponent/file/saveAttachment/{scope}/{fileToken}.do

或者

/[root]/sys/emapcomponent/file/saveAttachment.do

【参数】:

scope:必填

fileToken:必填

attachmentParam:必填,包含storeId的json对象。其中可以包含一个key为orderMap的对象,存储wid----orderNum的键值对。后台将fileToken下所有附件的wid与orderMap中的wid做比对,符合的会将orderMap中的orderNum更新到数据库中对应附件的orderNum字段。

widsOfAttsToDelete:选填,表示在保存附件之前需要先删除的正式文件的wid,多个wid用逗号隔开

saveAppName:选填,saveBeanName指定的service所在的app名称

saveBeanName:选填,实现了ICustomerFileOp接口的service名称,会执行其中的fileSave方法,若未成功往数据库里插入这条记录,则还是会执行默认的保存附件方法。

authAppName:选填,authBeanName指定service所在的app名称

authBeanName:选填,实现了ICustomerFileOp接口的service名称。之后所有对附件操作都会执行其中的fileDownloadAuth方法进行权限检查。

【样例】:

js代码:

    返回结果:

1.1.1.4.9删除附件:根据token删除附件

【url】:

/[root]/sys/emapcomponent/file/deleteFileByToken/{fileToken}.do?[params]

或者

/[root]/sys/emapcomponent/file/deleteFileByToken.do

【参数】

fileToken:必填,文件token

[params]:选填,额外的参数,fileName、storeId等等

【样例】:

js代码:

    返回结果:

1.1.1.4.10获取指定令牌下所有的附件信息

【url】:

/[root]/sys/emapcomponent/file/getUploadedAttachment/{fileToken}.do

或者

/[root]/sys/emapcomponent/file/getUploadedAttachment.do

【参数】:

fileToken:必填

【样例】:

js代码:

    返回结果:

1.1.1.4.11获取多个令牌下所有的附件信息,结果会按令牌分组

【url】:

/[root]/sys/emapcomponent/file/getUploadedAttachmentBatch.do

【参数】:

fileTokenArrayString:必填,多个token值以json格式组织起来的字符串

【样例】:

1.1.1.4.12下载附件:根据附件id

【url】:

/[root]/sys/emapcomponent/file/getAttachmentFile/{fileIdx}.do

或者

/[root]/sys/emapcomponent/file/getAttachmentFile.do

【参数】:

fileIdx:必填,附件id

app:选填,customerFile指定的service所在的app

customerFile:选填,实现了ICustomerFileOp接口的service名称,会执行其中的generateFile方法,若返回null,则还是会执行默认的生成文件流的方法。

【样例】:

可直接输入如下地址,弹出下载对话框:

1.1.1.4.13下载附件:根据附件token

【url】:

/[root]/sys/emapcomponent/file/getFileByToken/{fileToken}.do

或者

/[root]/sys/emapcomponent/file/getFileByToken.do

【参数】:

fileToken:必填,文件token

app:选填,customerFile指定的service所在的app

customerFile:选填,实现了ICustomerFileOp接口的service名称,会执行其中的generateFile方法,若返回null,则还是会执行默认的生成文件流的方法。

【样例】:

若同一fileToken下存在多个文件,只会返回第一个

可直接输入如下地址,弹出下载对话框:

1.1.1.4.14下载图片:下载token下指定类型图片

【url】:

/[root]/sys/emapcomponent/file/ getSingleImageByToken.do

1.如果有多个符合条件的图片,只会下载第一张。

2.没有符合条件的图片时,返回404页面。

【参数】:

fileToken:选填,默认为”0”,表示获取哪个尺寸的图片文件,

type:选填,获取图片的类型,可以填写如下三种类型

“ORIGINAL”:表示原始尺寸,缺省类型

“MIDDLE”:表示中型尺寸

“SMALL”:表示小型尺寸

【样例】:

访问如下地址:

    弹出下载框:

批量下载:根据单个fileToken,zip格式返回

1.1.1.4.15批量下载:根据单个fileToken,zip格式返回

【url】:

/[root]/sys/emapcomponent/file/getFileBatchByToken/{fileToken}.do

【参数】:

fileToken:必填,文件token

imageSize:选填,默认为”0”,表示获取哪个尺寸的图片文件,

”0”表示获取原始类型图片,

“1”表示获取中尺寸类型图片,

“2”表示获取小尺寸类型图片。

nameType:选填,默认为”0”,表示附件的命名方式,

“0”表示以唯一编号命名文件,

“1”表示以原文件名命名文件,此方式会导致所限定token下相同文件名的文件会互相覆盖,只能获取到一个。只适合上传时自定义了唯一文件名称的场景。

customerFile选填,实现了ICustomerFileOp接口的service名称,会执行其中的generateFile方法,若返回null,则还是会执行默认的生成文件流的方法。

app:选填,上述service所在应用的名称

zipName:选填,表示下载的zip包的名称,不填的话,以(token1&token2……)的形式命名。

【样例】:

返回fileToken下所有文件,以zip格式打包.

1.1.1.4.16批量下载:根据多个fileToken,zip格式返回

【url】:

/[root]/sys/emapcomponent/file/getFileBatchByTokenArray.do

【参数】:

fileTokenArray:必填,多个token,用逗号隔开

imageSize:选填,默认为”0”,表示获取哪个尺寸的图片文件,

”0”表示获取原始类型图片,

“1”表示获取中尺寸类型图片,

“2”表示获取小尺寸类型图片。

nameType:选填,默认为”0”,表示附件的命名方式,

“0”表示以唯一编号命名文件,

“1”表示以原文件名命名文件,此方式会导致所限定token下相同文件名的文件会互相覆盖,只能获取到一个。只适合上传时自定义了唯一文件名称的场景。

customerFile:选填,实现了ICustomerFileOp接口的service名称,会执行其中的generateFile方法,若返回null,则还是会执行默认的生成文件流的方法。

app:选填,上述service所在应用的名称

zipName:选填,表示下载的zip包的名称,不填的话,以(token1&token2……)的形式命名。

【样例】:

由于参数长度不定,需求用post方式提交,并返回流数据。你可以选择自己构建form并提交,或者采用前段封装的组件,调用方式如下:

WIS_EMAP_SERV.batchDownloadFiles({

“contextPath”: “yourContextPath”,

“tokens”: “yourToken1,yourToken2”

})

使用此方法需要引入https://res.wisedu.com/fe_components/emap.js

1.1.1.4.17删除附件:根据id删除指定附件

【url】:

/[root]/sys/emapcomponent/file/deleteFileByWid/{wid}.do

/[root]/sys/emapcomponent/file/deleteFileByWid.do

【参数】:

wid:必填,需要删除的附件id

【样例】:

js代码:

    返回结果:

1.1.1.5java接口

com.wisedu.emap.file.util.IFileDownload

获取方式:

private AppBeanContainer<IFileDownload> fileDl = new AppBeanContainer<IFileDownload>(

"emapcomponent", IFileDownload.BEANID, false);

使用样例:

IFileDownload tmp = fileDl.get();

if (tmp != null) {

tmp.xxx();

}

1.1.1.5.1通过fileToken获取正式文件信息

【接口方法】:

Map<String,Object> getUploadedAttachmentInfo(String fileToken)

【参数说明】:

fileToken:正式文件的token

【返回值说明】:

正式文件信息,键值为相应属性名,如id,name,fileToken等

1.1.1.5.2通过fileToken获取文件流

【接口方法】:

InputStream getStreamByToken(String token, Map<String, ?> params)

【参数说明】:

token:正式文件的token

params:如果一个token对应多个文件时,可通过此参数增加额外的区分条件

【返回值说明】:

文件流

1.1.1.6应用扩展java接口

1.1.1.6.1上传文件时应用自定义判断接口

【接口类】:

com.wisedu.emap.file.util.ICustomerFileOp

【接口方法】:

StringfileCheck(FileItem fileItem)

【参数说明】:

fileItem:上传的文件

【返回值说明】:

检查通过则返回null,否则返回失败消息,类型为String类型

1.1.1.6.2上传文件时临时文件保存接口

【接口类】:

com.wisedu.emap.file.util.ICustomerFileOp

【接口方法】:

void fileSave(File file, String fileToken)

【参数说明】:

file:file文件

fileToken:文件的Token字段

1.1.1.6.3下载时访问权限检查接口

特别说明:本接口应当只用于权限检查。admin用户的任何操作都不会进入此处进行权限检查,默认拥有所有权限。

【接口类】:

com.wisedu.emap.file.util.ICustomerFileOp

【接口方法】:

String fileDownloadAuth (String fileToken)

【参数说明】:

fileToken:token值

【返回类型】:

权限检查通过则返回null,否则返回失败消息,类型为String

【版本要求】:

1.1.37.B37-SNAPSHOT及以上

【代码示例】:

 新增了AuthParam类,可直接通过静态方法获取实例。其中保存了附件wid和操作类型。
public String fileDownloadAuth(String token) {
                AuthParam authParam = AuthParam.getAuthParam();
                //CheckType是 AuthParam类中的枚举类型,注意引用的正确性
                AuthParam.CheckType checkType = authParam.getCheckType();
                String wid = authParam.getWid();
                if (checkType == AuthParam.CheckType.DOWNLOAD) {
                        //下载相关的权限处理
                        returnnull;
                }
                elseif (checkType == AuthParam.CheckType.QUERY) {
                        //查询相关的权限处理
                        returnnull;
                }
                elseif (checkType == AuthParam.CheckType.DELETE) {
                        //删除相关的权限处理
                        returnnull;
                }
                else {
                        return"unknow checkType!";
                }
        }
1.1.1.6.4下载时生成文件接口

【接口类】:

com.wisedu.emap.file.util.ICustomerFileOp

【接口方法】:

InputStream generateFile(String fileToken)

【参数说明】:

fileToken:token值

【返回类型】:

保存文件的输入流InputStream

1.1.1.7附件表结构

 <table name="EMAP_SAPP_FILE_INDEX" desc="文件索引表">
                <columnname="WID"type="String(40)"desc="主键"nullable="false"/>
                <columnname="FILE_NAME"type="String(300)"desc="文件名称"nullable="false"/>
                <columnname="STORE_NAME"type="String(80)"desc="文件存储名"nullable="false"/>
                <columnname="STORE_PATH"type="String(230)"desc="文件纯粹路径"nullable="false"/>
                <columnname="UPLOAD_TIME"type="Datetime"desc="上传日期"nullable="false"/>
                <columnname="APP_ID"type="String(100)"desc="数据模型所属的应用"/>
                <columnname="DATA_OBJ_ID"type="String(100)"desc="数据模型ID"/>
                <columnname="DATA_WID"type="String(50)"desc="数据模型主键"/>
                <columnname="DATA_ITEM"type="String(60)"desc="数据模型列元素"/>
                <columnname="STORE_TOKEN"type="String(80)"desc="数据模型列的值"/>
                <columnname="FILE_SIZE"type="long"desc="文件大小"/>
                <columnname="FILE_TYPE"type="String(30)"desc="文件类型"/>
                <columnname="IS_IMAGE"type="byte"desc="是否是图片"/>
                <columnname="IMAGE_TYPE"type="String(2)"desc="图片类型0:原尺寸;1:中尺寸;2:小尺寸"/>
                <columnname="IMAGE_RESOLUTION"type="String(50)"desc="图片属性"/>
                <columnname="IMAGE_WIDTH"type="int"desc="图片宽"/>
                <columnname="IMAGE_HIGTH"type="int"desc="图片高"/>
                <columnname="STATUS"type="byte"desc="删除状态"/>
                <columnname="STORE_ID"type="String(50)"desc="存储编号"/>
                <columnname="ITEM_ID"type="String(10)"desc="存储序列"/>
                <columnname="ITEM_TYPE"type="String(10)"desc="存储序列类型"/>
                <columnname="TABLE_NAME"type="String(50)"desc="所存表"/>
                <columnname="CLRQ"type="Datetime"desc="处理日期"/>
                <columnname="CZLX"type="String(10)"desc="操作类型"/>
                <columnname="TBRQ"type="Datetime"desc="同步日期"/>
                <columnname="TBLX"type="String(10)"desc="同步操作"/>
                <columnname="CZRQ"type="Datetime"desc="操作日期"/>
                <columnname="CZZ"type="String(30)"desc="操作者"/>
                <columnname="CZZXM"type="String(90)"desc="操作者姓名"/>
         <columnname="AUTH_APP"type="String(30)"desc="自定义权限APP名称"/>
                <columnname="AUTH_BEAN"type="String(30)"desc="自定义权限BEAN"/>
        </table>
        <indexname="PK_EMAP_SAPP_FILE_INDEX"type="key"tableName="EMAP_SAPP_FILE_INDEX">
                <columnname="WID"/>
        </index>

1.1.2导入导出

1.1.2.1导入过程

1、上传文件,获取上传文件的attatchId

2、读取文件信息,如果自定义了,则使用自定义的读取文件方法

3、执行自定义的转换前数据分析

4、进行字典的转换(value转化成key)

5、执行自定义的转换后数据分析

6、进行数据保存

1)、执行单个数据分析,保存前

2)、执行保存动作,如果有自定义,则执行自定义的保存方法

7、执行自定义的保存后数据分析

8、生成导入结果文件,如果有自定义的则使用自定义结果文件生成方法

9、导入结果文件保存成附件,并返回附件的attatchId

10、通过附件的下载获取导入结果

1.1.2.2导出过程

1、执行导出定义的动作,生成导出数据

2、执行自定义的导出数据分析方法

3、生成导出结果文件,如果有自定义的则使用自定义结果文件生成方法

4、导出结果文件保存成附件,并返回附件的attatchId

5、通过附件的下载获取导出结果

1.1.2.3Ajax提交地址

1.1.2.3.1导出地址

【url】:

/[root]/sys/emapcomponent/imexport/export.do

【参数】:

app:调用导出的应用名称,必填

module:调用导出的模块名,必填

page:调用导出的页面,必填

action:调用导出的动作,必填

colnames:需要导出的字段的name,多个用逗号分隔,选填(不填则全部导出)

analyse:自定义的导出过程分析服务,实现IExportAnalyse,选填

write:自定义的导出写文件服务,实现IExportWrite,选填

filename:自定义的导出文件名,选填

【返回值】:

attachment:导出结果的附件ID

【样例】:js代码:

返回结果:

1.1.2.3.2下载导入模板

【url】:

/[root]/sys/emapcomponent/imexport/importTemplate.do

【参数】:

app:必填,调用导入的应用名称

module:必填,调用导入的模块名

page:必填,调用导入的页面

action:必填,调用导入的保存动作

colnames:选填,导入时自定义的字段,多个用逗号分隔

read:选填,实现IGenerateTemplate接口的service名称,实际会执行其中的generateTemplate方法返回模板文件

filename:选填,模板文件的名称,不填则默认取模型的名称

【返回值】:

attachment:导入模板的附件ID

【样例】:

js代码:

返回结果:

1.1.2.3.3获取导入数据行数

【url】:

/[root]/sys/emapcomponent/imexport/importRownum.do

【参数】:

attachment:必填,excel附件ID

app:选填,read指定的service所在的app

read:选填,实现了IGetRowNum接口的service名称,实际会执行getRowNum方法,返回行数

【返回值】:

rowNumber:数据行数

【样例】:

js代码:

返回结果

1.1.2.3.4执行导入

【url】:

/[root]/sys/emapcomponent/imexport/import.do

【参数】:

attachment:必填,待上传附件id(可由模板编辑后上传得到)

app:必填,调用导入的应用名称

module:必填,调用导入的模块名

page:必填,调用导入的页面

action:必填,调用导入的保存动作

consts:选填,常量字段,多个用逗号分隔,内容为key:value

guids:选填,GUID字段,多个用逗号分隔

read:选填,实现IReadAndWrite接口的service,实际会执行readImportFile,读取和解析流形式的导入数据,可以比对模型进行数据校验,返回导入数据

analyse:选填,实现IImportAnalyse接口的service,实际会执行beforeAnalyse方法,可在方法中对导入数据进行预处理,返回错误信息

save:选填,实心IImportSave接口的service,实际会执行save方法,将记录写入数据库,返回错误信息

ignoreEmptyRow:选填,默认为true,是否忽略空行(空格也算空行),true表示读取忽略空行,false表示将空行当成正常记录读取

【返回值】:

status:1表示成功,0表示失败

total:总记录数

success:成功记录数

attachment:导入结果的附件ID号

【注意事项】:

① excel格式校验

我们会将excel填写内容的格式与模型的类型作对比,比如某列在模型中为数字类型,excel中的格式却为文本,则视为出错,会在导入结果中记录错误信息

②长度和日期校验

针对数据模型中的日期类型,会对导入数据进行日期格式的校验。对于其他的数据类型,会在导入时进行数据长度的校验,在校验不通过的情况下会在导入结果中记录错误信息。

③字典校验:

如果数据模型中配置了字典,导入的数据会跟字典的key和value进行匹配,value匹配的情况下会导入数据会被翻译为key,若key和value都不匹配,则导入出错,并在导入结果中记录错误信息。

性别字典
Key Value
0
1
导入数据 实际存储结果
0 0
1
3 出错!
未知性别 出错!

④推荐使用生成的模板

我们推荐使用根据模型生成的模板,而非自己造一个。因为默认的导入动作会把无效列视为错误处理,并记录错误信息。使用生成的模板可以有效避免无效列导致的错误。

【样例】:

js代码:

返回结果:

导入文件展示:

数据库导入结果展示:

1.1.2.4应用扩展java接口

1.1.2.4.1导出数据分析

com.wisedu.emap.framework.imexport.IExportAnalyse

1.1.2.4.2导出写文件

com.wisedu.emap.framework.imexport.IExportWrite

1.1.2.4.3导入读文件(不建议使用,已拆分为下面三个接口)

com.wisedu.emap.framework.imexport.IImportRead

1.1.2.4.4导入模板生成

com.wisedu.emap.framework.importread. IGenerateTemplate

1.1.2.4.5导入数据行数计算

com.wisedu.emap.framework.importread. IGetRowNum

1.1.2.4.6导入文件读取和导入结果文件生成

com.wisedu.emap.framework.importread. IReadAndWrite

1.1.2.4.7导入过程分析

com.wisedu.emap.framework.imexport.IImportAnalyse

1.1.2.4.8导入保存

com.wisedu.emap.framework.imexport.IImportSave

1.1.3字典刷新

1.1.3.1刷新某个应用下某个字典表

【url】:

/[root]/sys/emapcomponent/clearDicCache.do

【参数】:

app:应用名称

dic:字典ID号

【样例】:

正确传递参数后,刷新成功:

1.1.3.2刷新某个应用下所有字典表

【url】:

/[root]/sys/emapcomponent/clearAppDicCache.do

【参数】:

app:应用名称

【样例】:

正确传递参数后,刷新成功:

1.1.3.3刷新整个EMAP工作空间内字典表

【url】:

/[root]/sys/emapcomponent/clearAllDicCache.do

【参数】:

【样例】:

无需传递参数,正确访问地址,刷新成功:

1.1.3.4刷新字典的Java接口

com.wisedu.emap.dicOperation.IDicOperation

获取方式:

private AppBeanContainer<IDicOperation> dicOpt = new AppBeanContainer<IDicOperation>(

"emapcomponent", IDicOperation.BEANID, false);

注:上面这段代码是类的成员变量定义

使用样例:

IDicOperationtmp = this.dicOpt.get();
if (tmp != null) {
   tmp.xxx();

1.1.4缓存

1.1.4.1概述

缓存的接口在emapcomponent应用中,工厂类为ICacheFactory。

缓存对象分为两种:单值ISingleCache<T>,多值IMultipleCache<T>。

两种缓存的使用场景:

单值缓存主要用于只需保存一个值的情况。如配置信息,一般都是一次读取所有的配置信息,然后作为一个map缓存下来。

多值缓存主要用于需要保存多个值的情况。如人员的基本信息或最新动态,一般是根据人员编号读取一条或一批数据缓存下来。

1.1.4.2缓存对象的获取样例

private IMultipleCache<Stud> xxxCache;

{
   AppBeanContainer<ICacheFactory> factory = new AppBeanContainer<ICacheFactory>(
         "emapcomponent", ICacheFactory.BEANID, true);
   StudHandler handler = new ...; 
   xxxCache = factory.get().getMultipleCache(id, CacheType.LOCAL, handler);
   // 或者
   xxxCache = factory.get().getMultipleCache(id, CacheType.LOCAL, handler, 
idleTime, liveTime, maxSize);
}

获取缓存对象时,需要给出一个标识,即id,此名称在同一个应用中必须是唯一的。

然后是缓存的类型,目前只实现的本地缓存(能够在集群间同步)

handler是用于获取缓存数据的处理器,需要实现相应的接口,这个会在下一节说明。

idleTime为缓存的闲置时间,单位:秒。如果设置为0或小于0,则表示没有闲置时间。

liveTime为缓存的保持时间,单位:秒。如果设置为0或小于0,则表示没有保持时间。

maxSize为保留的缓存值的个数。如果设置为0或小于0,则表示没有个数限制。

1.1.4.3缓存的使用样例

对于单值缓存,可直接通过get()方法获取缓存的值。

如:T value = cache.get();

对于多值缓存,需要给出键值来获取缓存的值。

如:T value = cache.get("key");

1.1.4.4handler

获取数据的处理器也分为两种:单值ISingleValueHandler<T>,多值IMultipleValueHandler<T>。

在获取缓存的值时,如果缓存不存在,缓存框架会调用handler来获取缓存的值。

一般获取缓存的方式如下图:

上面整个获取的过程需要加同步锁。当然可以将这个过程封装成一个方法,但是每种类别的缓存都需要封装这样一个方法。

使用了handler之后,执行方式如下图所示:

整个处理过程由缓存框架接管,包括同步锁及优化处理不需要再关心了,也无需再封装方法。

1.1.4.5缓存的清除

如果缓存的源头(如数据库)更新了,那可以调用缓存的清除方法。这样在下次获取缓存时,就会调用handler获取新的数据。

对于本地缓存,会激活集群间的同步处理,所有服务器上的对于缓存都会被清除。

注:如果设置idleTime或liveTime,由超时所触发的自动清除缓存不会触发集群间的同步处理。但通过调用方式执行的清除缓存,仍然能够触发群间的同步处理。

1.1.4.6Spring中配置缓存

除了代码方式初始化缓存对象,还可以通过配置初始化缓存对象。

spring的配置文件为:[应用目录]/config/spring.xml。此文件如果不存在请自行创建。

缓存对象的配置样例如下:

<bean id="myCache" class="com.wisedu.emap.cache.CacheGenerator">

<property name="handler" ref="strHandler"/>

<property name="idleTime" value="18000"/>

<property name="maxSize" value="20"/>

<!--

单值缓存需要添加如下属性

<property name="singleCache" value="true"/>
-->
</bean>
<bean name="strHandler" class="com.wisedu….StringCacheHandler"/>

代码中缓存对象的注入样例如下:

@Autowired

@Qualifier("myCache")

private IMultipleCache<String> myCache;

缓存的使用样例如下:

String value = this.myCache.get("testId");

results matching ""

    No results matching ""