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();

     }

    

   }

3a.配置缓存ehcache.xml(一般放在WEB-INF里)

<!--

        配置自定义缓存

        maxElementsInMemory:缓存中允许创建的最大对象数

        eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。

        timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,

                    两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,

                    如果该值是 0 就意味着元素可以停顿无穷长的时间。

        timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,

                    这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。

        overflowToDisk:内存不足时,是否启用磁盘缓存。

        memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。

       

        timeToLiveSeconds和timeToIdleSeconds,分别简称为ttltti

        在通常的解释中,前者表示一条缓存自创建时间起多少秒后失效,而后者表示一条缓存自最后读取或更新起多少秒失效

    -->

 

 <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的值与步骤bid值一致

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;

   }