Java的Spring内实现的mini版内存"计数器"功能
工期紧急,不让用Redis,自己实现了一个Spring内的mini版内存"计数器"功能,很简陋,和业务耦合太紧密,需要改进。
public Long getCreationCounter() {
String attributeNameCreationCounter = "CreationCounter";
Long attributeValueCreationCounter = 0L;
boolean containsCreationCounter = false; String attributeNameExpirationDateTime = "ExpirationDateTime";
Long attributeValueExpirationDateTime = 0L;
boolean containsExpirationDateTime = false; Enumeration<String> attributeNames = ContextUtil.servletContext.getAttributeNames();
while(attributeNames.hasMoreElements())
{
String name = attributeNames.nextElement();
if(!containsCreationCounter && name.equals(attributeNameCreationCounter)){
containsCreationCounter = true;
}
if(!containsExpirationDateTime && name.equals(attributeNameExpirationDateTime)){
containsExpirationDateTime = true;
}
if(containsCreationCounter && containsExpirationDateTime){
break;
}
} boolean isExpired = false;
if(containsExpirationDateTime){//包含超期时间
Object attributeValueExpirationDateTimeObj = ContextUtil.servletContext.getAttribute(attributeNameExpirationDateTime);
if(attributeValueExpirationDateTimeObj == null || attributeValueExpirationDateTimeObj.equals("")){//超期时间为空
isExpired = true;
} else{//超期时间非空
attributeValueExpirationDateTime = (Long)ContextUtil.servletContext.getAttribute(attributeNameExpirationDateTime);
Long nowDateTime = (new Date()).getTime();
if(nowDateTime < attributeValueExpirationDateTime ){//当前时间小于超期时间,未超期
isExpired = false;
}else{//已超期
isExpired = true;
}
}
}else{//不含超期时间
isExpired = true;
} if (isExpired) {//已超期
attributeValueCreationCounter = getCreationCounter(attributeNameCreationCounter);
getExpirationDateTimeNew(attributeNameExpirationDateTime);
} else {//未超期
if(containsCreationCounter){//包含计数器
Object attributeValueCreationCounterObj = ContextUtil.servletContext.getAttribute(attributeNameCreationCounter);
if(attributeValueCreationCounterObj == null || attributeValueCreationCounterObj.equals("")){//计数器为空
attributeValueCreationCounter = getCreationCounter(attributeNameCreationCounter);
} else{//计数器非空
attributeValueCreationCounter = (Long)ContextUtil.servletContext.getAttribute(attributeNameCreationCounter);
}
} else {//不含计数器
attributeValueCreationCounter = getCreationCounter(attributeNameCreationCounter);
}
} return attributeValueCreationCounter;
} //生成新的超期时间,并存入上下文。
private void getExpirationDateTimeNew(String attributeNameExpirationDateTime) {
Long attributeValueExpirationDateTime = 0L;
Date date= new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, 1);//增加1天
attributeValueExpirationDateTime= calendar.getTime().getTime();
ContextUtil.servletContext.setAttribute(attributeNameExpirationDateTime, attributeValueExpirationDateTime);
} //从数据库查询存证量计数器,并存入上下文。
private Long getCreationCounter(String attributeNameCreationCounter) {
Long attributeValueCreationCounter;
attributeValueCreationCounter = 0L;
//从数据库读取数据到存证量计数器
Long creationCounter = ((CreationMapper)storageMapper).getCreationCounter();
attributeValueCreationCounter = attributeValueCreationCounter + creationCounter;
ContextUtil.servletContext.setAttribute(attributeNameCreationCounter, attributeValueCreationCounter);
return attributeValueCreationCounter;
}
Java的Spring内实现的mini版内存"计数器"功能的更多相关文章
- 杂项-Java:Spring
ylbtech-杂项-Java:Spring Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于200 ...
- 唯品会Java开发手册》1.0.2版阅读
<唯品会Java开发手册>1.0.2版阅读 1. 概述 <阿里巴巴Java开发手册>,是首个对外公布的企业级Java开发手册,对整个业界都有重要的意义. 我们结合唯品会的内部经 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- Spring —— 三种配置数据源的方式:spring内置、c3p0、dbcp
01.Spring内置数据源配置Class:DriverManagerDataSource全限定名:org.springframework.jdbc.datasource.DriverManagerD ...
- [Java] 使用 Spring 2 Portlet MVC 框架构建 Portlet 应用
转自:http://www.ibm.com/developerworks/cn/java/j-lo-spring2-portal/ Spring 除了支持传统的基于 Servlet 的 Web 开发之 ...
- Spring事务管理----------整合学习版
作者:学无先后 达者为先 Spring提供了一流的事务管理.在Spring中可以支持声明式事务和编程式事务. 一 spring简介 1 Spring的事务 事务管理在应用程序中起着至关重 ...
- 一起读《Java编程思想》(第四版)
空余时间看<Java编程思想>(第四版)这本书,遇到不懂的知识点就记录在本博客内. 1.复用具体实现 Java代码复用的三种常见方式:继承.组合.代理. 1.继承:使用extends关键字 ...
- Java之Spring基础与IoC
Spring About Spring 开源免费框架,轻量级,非入侵式框架.Spring就是一个轻量级的控制反转(IOC)和面向切片编程(AOP)的框架 Maven repo:Spring Web M ...
- spring内嵌cglib包,这里藏着一个大坑
问题发现 2022-01-21 早上 9 点,订单系统出现大面积的"系统未知错误"报错,导致部分用户无法正常下单.查询后台日志,可以看到大量的 duplicate class at ...
随机推荐
- 使用RMAN Active duplicate创建异地auxiliary Database
1g的RMAN duplicate 可以通过Active database duplicate和Backup-based duplicate两种方法实现.这里的测试使用的是Active databas ...
- springboot读取配置文件的顺序(转)
也就是说:springboot会默认先加载项目外部的配置文件,覆盖内部的配置文件!所以导致项目一直使用的错误的配置! 强烈建议:不要把项目和application.properties配置文件放在一起
- leetcode46. Permutations 、47. Permutations II、 剑指offer字符串的排列
字符串排列和PermutationsII差不多 Permutations第一种解法: 这种方法从0开始遍历,通过visited来存储是否被访问到,level代表每次已经存储了多少个数字 class S ...
- MATLAB——单层感知器
1.创建一个感知器 实例 % example4_1.m p=[-,;-,] % 输入向量有两个分量,两个分量取值范围均为-~ % p = % % - % - t=; % 共有1个输出节点 net=ne ...
- 20175310 《Java程序设计》第1周学习总结(1)安装虚拟机
20175310 <Java程序设计>第1周学习总结(1)安装虚拟机 开学前老师在蓝墨云班课上上传了预备作业,其中有一个就是安装Linux操作系统,参考了<>,下载安装Virt ...
- VUE2 第六天学习--- vue单文件项目构建
阅读目录 VUE2 第六天学习--- vue单文件项目构建 回到顶部 VUE2 第六天学习--- vue单文件项目构建 VUE单文件组件在Vue项目中,然后使用 new Vue({el: '#cont ...
- OpenStack keystone节点搭建(官方2018年4月份文档)
参考文档:https://docs.openstack.org/install-guide/common/conventions.html https://docs.openstack.org/mit ...
- C++ assert断言
assert断言通常用于调试,用法如下: assert(expr); // 当expr==0时,系统会调用abort来终止程序运行 调试完成后,可以在include <assert.h>之 ...
- 错误:“Manifest merger failed with multiple errors, see logs”
今天用Android Studio打开以前写个的项目后,出现如下错误:Manifest merger failed with multiple errors, see logs 现象是: 遇到这个问 ...
- ARM架构相关学习归纳总结
ARM作为一个生态不仅提供了CPU Core,还提供了一系列相关的IP,比如GIC.MMU.AMBA.CoreLink.CoreSight.Mali等等. 其他还包括Debug工具.开发工具.IDE等 ...