启动就加载(一)----注解方式实现的。static项目启动的时候就加载进来(一般用于常用参数)
一,案例
1.1,图片分析

1.2,代码
1.2.1,编写加载系统参数的servlet
public class SysInitServlet extends HttpServlet {
public void init() throws ServletException {
Map<String,Object> sysParam = new HashMap<String,Object>();
Map<String,String> supType = new HashMap<String,String>();
supType.put("1", "普通供应商");
supType.put("2", "一级供应商");
supType.put("3", "二级供应商");
Map<String,String> goodsColor = new HashMap<String,String>();
goodsColor.put("red", "红色");
goodsColor.put("green", "绿色");
goodsColor.put("blue", "蓝色");
sysParam.put("goodsColor", goodsColor);
sysParam.put("supType", supType);
ServletContext application =this.getServletContext();
application.setAttribute("sysParam",sysParam);
System.out.println("=======初始化完成,已加载数据字典数据=======");
}
}
1.2.2,web.xml配置servlet信息
<servlet>
<servlet-name>SysInitServlet</servlet-name>
<servlet-class>cn.itcast.servlets.SysInitServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SysInitServlet</servlet-name>
<url-pattern>/servlet/SysInitServlet</url-pattern>
</servlet-mapping>
1.2.3,页面使用
<div>
<label for="supType">供应商类型:</label>
<select id="cc" class="easyui-combobox" name="supType" style="width:200px;">
<c:forEach items="${applicationScope.sysParam.supType}" var="supType">
<option value="${supType.key}">${supType.value}</option>
</c:forEach>
</select>
</div>
二,升级用法
说明,现在就要把上面的一套用法放到spring中来用,而且还有就是后续有可能还要加进来其它的参数来。现在还不确定,所以现在就要把一个sql语句写到数据库中来。
见下面的图片的说明。
2.1,图例说明

2.2,代码
2.2.1,action类
public class SysParamAction extends BaseAction {
@Resource
private SysParamService sysParamService;
//方式一
//insert方法 --》调用sysParamInit();
//update方法 -->调用sysParamInit();
//delete方法 -->调用sysParamInit();
//方式二
//insert方法 --》调用updateSysParam();
//update方法 -->调用updateSysParam();
//delete方法 -->调用updateSysParam();
//业务类型规则 添加仓库(as -- addStoreHouse )----》刷新参数
//拦截器addStoreHouse--》调用sysParamInit()
@RequestMapping("/reloadSysParam")
@ResponseBody
public Object reload(){
sysParamInit();
return null;
}
@PostConstruct
private void sysParamInit(){
// Put your code here
/*Map<String, Object> sysParamMap = new HashMap<String, Object>();
Map<String, String> supTypeMap = new HashMap<String, String>();
supTypeMap.put("1", "一级供应商");
supTypeMap.put("2", "二级供应商");
supTypeMap.put("3", "三级供应商");
sysParamMap.put("supType", supTypeMap);
Map<String, String> goodsColorMap = new HashMap<String, String>();
goodsColorMap.put("1", "红色");
goodsColorMap.put("2", "绿色");
goodsColorMap.put("3", "蓝色");
sysParamMap.put("goodsColor", goodsColorMap);*/
application.setAttribute("sysParam", sysParamService.sysParamLoad());
System.out.println("=================系统参数初始化完成222222222====================");
}
@RequestMapping("/doAjax")
@ResponseBody //如果返回json格式,需要这个注解,这里用来测试环境
public Object doAjax(Supplier supplier){
System.out.println("---doAjax.supplier:"+supplier);
supplier.setSupName("supName1");
return supplier;
}
}
2.2.2,SysParamService
public interface SysParamService extends BaseService<SysParam> {
//加载系统参数
public Map<String, Object> sysParamLoad();
}
2.2.3,SysParamServiceImpl
package cn.itcast.service.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.itcast.dao.SupplierMapper;
import cn.itcast.entity.Page;
import cn.itcast.entity.Supplier;
import cn.itcast.entity.SysParam;
import cn.itcast.service.SupplierService;
import cn.itcast.service.SysParamService;
@Service("sysParamService")
public class SysParamServiceImpl extends BaseServiceImpl<SysParam> implements SysParamService {
//加载所有的系统参数
@Override
public Map<String, Object> sysParamLoad() {
//用来存储系统参数
Map<String, Object> sysParamMap= new HashMap<String, Object>();
//用来存储字段类型的map
Map<String, Object> fieldMap= null;
List<SysParam> sysParamList = sysParamMapper.selectSysParamList(null);
for (SysParam sysParam : sysParamList) {
//类型为1,表示需要重新执行sql,查询其它表的数据
if("1".equals(sysParam.getSysParamType())){
//获取需要执行的sql
String sql = sysParam.getSysParamValue();
System.out.println("sql:"+sql);
//执行sql,查询其它表的数据
List<SysParam> selectOtherTableList = sysParamMapper.selectOtherTable(sql);
//新建字段map,用来存入其它表的数据
fieldMap = new HashMap<String, Object>();
//把其它数据遍历并存放于 字段的map
for (SysParam sysParam2 : selectOtherTableList) {
fieldMap.put(sysParam2.getSysParamValue(), sysParam2.getSysParamText());
}
//把字段的map存入到系统参数的map
sysParamMap.put(sysParam.getSysParamField(), fieldMap);
}else{
/* 如果为null,表示该字段没有存在系统参数的Map,需要新建到 字段map,先存放该字段的值对字段的map,
* 并把字段的map存放在系统参数map里
*/
if(sysParamMap.get(sysParam.getSysParamField())==null){
fieldMap = new HashMap<String, Object>();
//先存放该字段的值到字段的map
fieldMap.put(sysParam.getSysParamValue(), sysParam.getSysParamText());
//再把字段的map存放到系统的参数map
sysParamMap.put(sysParam.getSysParamField(), fieldMap);
}else{
fieldMap = (Map<String, Object>) sysParamMap.get(sysParam.getSysParamField());
fieldMap.put(sysParam.getSysParamValue(), sysParam.getSysParamText());
}
}
}
return sysParamMap;
}
}
2.2.4,SysParamMapper
package cn.itcast.dao;
import cn.itcast.entity.SysParam;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface SysParamMapper extends BaseMapper<SysParam>{
//查询所有的系统参数表的记录,包括了类型为“1”的记录
public List<SysParam> selectSysParamList(SysParam sysParam);
//查询其它表的数据
public List<SysParam> selectOtherTable(String sql);
}
2.2.5,SysParamMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.itcast.dao.SysParamMapper" >
<resultMap id="sysParamBaseResultMap" type="cn.itcast.entity.SysParam" >
<id column="sys_param_id" property="sysParamId" jdbcType="BIGINT" />
<result column="sys_param_field" property="sysParamField" jdbcType="VARCHAR" />
<result column="sys_param_value" property="sysParamValue" jdbcType="VARCHAR" />
<result column="sys_param_text" property="sysParamText" jdbcType="VARCHAR" />
<result column="sys_param_type" property="sysParamType" jdbcType="VARCHAR" />
</resultMap>
<select id="selectSysParamList" parameterType="SysParam" resultMap="sysParamBaseResultMap">
select * from sys_param
</select>
<select id="selectOtherTable" parameterType="string" resultMap="sysParamBaseResultMap">
<!-- 参数为sql时的使用${value} -->
<!-- select s.sh_id as sys_param_value,s.sh_name as sys_param_text from store_house s -->
${value}
</select>
</mapper>
注意上面的那句sql语句是在数据库里面保存的。
PostConstruct注意这个注解就是在启动的加载
在这里要注意了,假如修改了map里的数据一定要重新加载一次。
否则它还是原来启动的时候里面的数据。
启动就加载(一)----注解方式实现的。static项目启动的时候就加载进来(一般用于常用参数)的更多相关文章
- 启动bash shell的三种方式下,检查的启动文件
启动bash shell的三种方式 1.登录时当做默认登录shell 2.作为非登录shell的交互式shell 3.作为运行脚本的非交互shell 一.登录shell 登录Linux系统时,bash ...
- java web项目启动加载顺序
转载:https://www.cnblogs.com/writeLessDoMore/p/6935524.html web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:T ...
- js异步执行 按需加载 三种方式
js异步执行 按需加载 三种方式 第一种:函数引用 将所需加载方法放在匿名函数中传入 //第一种 函数引用 function loadScript(url,callback){ //创建一个js va ...
- (转)Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
http://www.ityouknow.com/springboot/2018/05/03/spring-boot-commandLineRunner.html 在我们实际工作中,总会遇到这样需求, ...
- Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源
在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资 ...
- Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ...
- 详解Java Web项目启动执行顺序
一. web.xml加载过程(步骤): 启动web项目,容器(如Tomcat.Apache)会去读取它的配置文件web.xml 中的两个节点,context-param和listener. 紧接着,容 ...
- JavaWeb项目启动过程与ServletContext
ServletContext的官方名称叫Servlet上下文,服务器会为每一个工程创建一个对象,这个对象就是ServletContext.一个项目只有一个ServletContext对象,工程内的所有 ...
- Spring Boot 如何解决项目启动时初始化资源
在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资 ...
随机推荐
- BZOJ 3932: [CQOI2015]任务查询系统 [主席树]
传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...
- CNN网络架构演进:从LeNet到DenseNet
卷积神经网络可谓是现在深度学习领域中大红大紫的网络框架,尤其在计算机视觉领域更是一枝独秀.CNN从90年代的LeNet开始,21世纪初沉寂了10年,直到12年AlexNet开始又再焕发第二春,从ZF ...
- git恢复误删除文件
在git仓库管理下误删除文件一般会分为以下3种情况: 1.手动直接删掉,如选择-右击-删除 这种删除未修改本地仓库[版本库],只修改了工作区,直接git checkout -- fileName即可恢 ...
- php 压缩函数gzencode gzdeflate gzcompress
gzencode 默认使用ZLIB_ENCODING_GZIP编码,使用gzip压缩格式,实际上是使用defalte 算法压缩数据,然后加上文件头和adler32校验 gzdeflate 默认使用ZL ...
- centos7下安装apache服务器httpd的yum方式安装
转自Clement-Xu的csdn博客 http://blog.csdn.net/clementad/article/details/41620631 Apache在Linux系统中,其实叫&qu ...
- Zabbix 3.2.4至3.2.7的升级方案
1.关闭Zabbix Server 防止有新的数据提交到数据库中,也可以关闭数据库.如果更新过程中,评估告警信息可以忽略,可以先执行备份操作. 1.1.检查当前版本 /usr/local/zabbix ...
- Linux常见目录及其作用
在Linux操作系统中,所有文件和目录都被组织成一个以根节点开始的倒置的树状结构.如下图 系统一般以 / 来表示根目录.在根目录之下的可以是目录也可以是文件,而每一个目录中又可以包含子目录文件.如此反 ...
- MongoDB 搭建可复制群集
一.概述 MongoDB复制群集支持节点故障自动切换,最小配置应包含3个节点,正常情况下应该至少包含两个数据节点,第三个节点可以是数据节点也可以是仲裁节点.仲裁节点的作用是当出现偶数节点导致无法仲裁的 ...
- 使用nio对磁盘下的文件进行过滤
上篇博文讲到为了解决tomcat日志自动清理的问题,翻看了tomcat-juli这个jar包.在FileHandler类下有一个利用nio完成对磁盘下过期文件进行过滤的功能实现,正好这段时间正在学习n ...
- js在函数中未定义的变量的处理
<html> <head> <script type="text/javascript"> var z=1; function abc(){ x ...