web服务刚启动时SpringMVC注解就加载一定的数据库数据进入内存中

         首先确认需要加载一定的数据库数据进入内存中,就必须要连接数据库,刚开始考虑的办法是在监听中添加查询的方法,但真正执行的时候就会报bean不存在,这是因为你的bean还没有注入,也就是报空指针了,因为web.xml的执行顺序是

context-param>listener>filter>servlet,也就是你在执行监听和过滤器的时候,其实servlet并没有执行,这样就导致你的spring并没有注入,就报空指针了。之后又测试在context-param里面进行spring的初始化,但还是不行,可能是我没配置好;之后想了个办法,直接在监听或是过滤器里面执行,但先去获取JNDI数据源,但是还是报null,说数据源不存在,不知道是哪里没配置好;之后又想了直接用JDBC,这次倒是成功了,但是需要先确定数据库的驱动,还得多配置一份用户名密码,太麻烦了;最后想到了,在servlet里面不仅配置了过滤器,还配置了拦截器,之后在拦截器配置里面实现数据初始化,成功。

效果图:

启动servlet就加载servlet-context.xml

配置初始化数据的拦截器


最后效果


数据放入类的静态Map中,可以直接通过指定的键获取list值,之后用的时候强转为对应的对象就可以了,刷新内存,只要前台一个按钮,点击跳转,路径以initData开头,进入控制层,new个对象,之后调用afterPropertiesSet()方法就可以了。


package com.sunxl.base.interceptor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.sunxl.base.service.MenusService;
import com.sunxl.base.util.Sql;


/**
 * @author 熊浪
 * @Email xiongl@sunline.cn
 * @Time 2017年5月15日
 * @此类作用:servelet执行完成之后初始化数据
 */
public class InitDataInterceptor extends HandlerInterceptorAdapter implements InitializingBean {
private static Log log = LogFactory.getLog(InitDataInterceptor.class);
public static Map<String, List<?>> map = new HashMap<String, List<?>>();
@Autowired
private MenusService menusService;


@Override
public void afterPropertiesSet() throws Exception {
map.clear();//初始化清空map
loadall();
}


private void loadall() {
try {
loadUser();
} catch (Exception e) {
e.printStackTrace();
log.error("初始化数据出错");
}
}


private void loadUser() {
map.put("menusService", menusService.sarch(new Sql()));
System.out.println(map.size());
}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值