25、使百分比的数据显示2位小数
publicstatic String div(double v1,double v2){
DecimalFormat df=new DecimalFormat("##0.00%");
return df.format(Double.valueOf((v1/v2)));
}
26、数据缓存问题
1)在Action中声明private Cache ehCache;
2)放入缓存
publicvoid putEcache(){
try {
boolean b=false;//判断是否是全部
if(codenames==null||codenames.equals("")){
codenameList=kpiTotalManagerService.findAllCodeName();
b=true;
}
if(fromtime==null||fromtime.trim().equals("")){
fromtime=DateUtil.getBeforMonthFirstDate();//默认是当前月的前一个月的1号
}
if(totime==null||totime.trim().equals("")){
totime=DateUtil.getMonthFirstDate();//默认是当前月的1号
}
String jsoncolumns=this.findColumns(codenames); //grid的列头
String jsondatas=this.kpiTotalManagerService.findData(codenames,codenameList,fromtime,totime,isfirst); //grid的列头
String jsonfields=this.kpiTotalManagerService.findFields(b,codenames,codenameList);
String gridJson="{'fields':"+jsonfields+", 'data':"+jsondatas+", 'columns':"+jsoncolumns+",'success':true, 'fromtime':"+fromtime+",'totime':"+totime+"}";
ElementgridJson1 = new Element("gridJson1", gridJson);
ehCache.put(gridJson1);
} catch (Exception e) {
log.debug(e.getMessage());
e.printStackTrace();
}
}
3)a.配置缓存ehcache.xml(一般放在WEB-INF里)
<!--
配置自定义缓存
maxElementsInMemory:缓存中允许创建的最大对象数
eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,
两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,
如果该值是 0 就意味着元素可以停顿无穷长的时间。
timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,
这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。
overflowToDisk:内存不足时,是否启用磁盘缓存。
memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。
timeToLiveSeconds和timeToIdleSeconds,分别简称为ttl和tti。
在通常的解释中,前者表示一条缓存自创建时间起多少秒后失效,而后者表示一条缓存自最后读取或更新起多少秒失效
-->
<cache name="defCache"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
memoryStoreEvictionPolicy="LFU"/>
</ehcache>
b.配置spring中的缓存
<!-- 总的enCache缓存配置-->
<!-- 引用ehCache的配置 -->
<bean id="defaultCacheManager"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<!-- 此处为缓存的xml所在路径 -->
<value>/WEB-INF/ehcache.xml</value>
</property>
</bean>
<!-- 定义ehCache的工厂,并设置所使用的Cache name -->
<bean id="defCache"
class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<ref local="defaultCacheManager" />
</property>
<property name="cacheName">
<value>defCache</value>
</property>
</bean>
c.在spring配置一套Action/service/Dao时需要在Action中再加入一段代码,如下
<property name="ehCache"ref="defCache"></property>
ref的值与步骤b的id值一致
d.在配置job时需要再把Action中有关放入缓存的方法配置上,如
<bean id="KpiTotalManagerJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="KpiTotalManagerAction" />
</property>
<property name="targetMethod">
<value>putEcache</value>
</property>
<property name="concurrent" value="false"/>
</bean>
f.配置触发任务条件
<!-- 触发任务条件 -->
<bean id="KpiTotalManagerTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="KpiTotalManagerJob"></property>
<!-- 延迟一分钟启动
<propertyname="startDelay">
<value>60000</value>
</property>
-->
<!-- 每隔2分钟调用一次 -->
<property name="repeatInterval">
<value>120000</value>
</property>
<!-- 执行1次
<propertyname="repeatCount">
<value>1</value>
</property> -->
</bean>
g.配置启动定时执行
<bean id="timeQuartzFactory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!--值为触发任务条件的 id-->
<ref local="KpiTotalManagerTrigger" />
<ref local="KpiPerManagerTrigger" />
<ref local="KpiPerEventManagerTrigger" />
</list>
</property>
</bean>
4)从缓存中取数据
publicString querySysList() {
HttpServletResponseresponse=ServletActionContext.getResponse();
response.setContentType("text/json;charset=UTF-8");
try {
boolean b=false;//判断是否是全部系统的这个条件
boolean bb=false;//判断开始时间月份是否是传的空
boolean bbb=false;//判断结束时间月份是否是传的空
PrintWriter writer=response.getWriter();
if(codenames==null||codenames.equals("")){
codenameList=kpiTotalManagerService.findAllCodeName();
b=true;
}
if(fromtime==null||fromtime.trim().equals("")||fromtime.trim().equals(DateUtil.getBeforMonthFirstDate())){
fromtime=DateUtil.getBeforMonthFirstDate();//默认是当前月的前一个月的1号
bb=true;
}
if(totime==null||totime.trim().equals("")||totime.trim().equals(DateUtil.getMonthFirstDate())){
totime=DateUtil.getMonthFirstDate();//默认是当前月的1号
bbb=true;
}
String gridJson ="";
if(b&&bb&&bbb){//当三个都为true时走缓存中的数据
Element ele = ehCache.get("gridJson1");
if (null != ele) {
Object eleObj = ele.getObjectValue();
if (null != eleObj && eleObj instanceof String) {
gridJson = (String) eleObj;
}
}
}
if(gridJson!=null&&!gridJson.equals("")){
writer.print(gridJson);
}else{
String jsoncolumns=this.findColumns(codenames); //grid的列头
String jsondatas=this.kpiTotalManagerService.findDatas(codenames,codenameList,fromtime,totime,isfirst); //grid的列头
String jsonfields=this.kpiTotalManagerService.findFields(b,codenames,codenameList);
gridJson="{'fields':"+jsonfields+", 'data':"+jsondatas+", 'columns':"+jsoncolumns+",'success':true, 'fromtime':"+fromtime+",'totime':"+totime+"}";
System.out.println(gridJson);
writer.print(gridJson);//放入缓存
}
} catch (Exception e) {
log.debug(e.getMessage());
e.printStackTrace();
}
returnnull;
}