配置spring 项目时遇到的问题

原创 2015年11月21日 10:37:54
今天在做一个小项目时,使用了spring,但是在项目启动过程中,一直会把我的一个监听启动2次,这个监听实现了2个接口,其中一个是spring的ApplicatinListener
@Component
public class BlackManagerInitListener implements ServletContextListener,
		ApplicationListener<ContextRefreshedEvent> {
	private static Logger logger = Logger
			.getLogger(BlackManagerInitListener.class);
	
	private static volatile boolean  bThreadStarted;

	@Autowired
	private BlacklistDao dao;

	@Override
	public void contextInitialized(ServletContextEvent event) {
		logger.info("加载配置信息:开始......");
		String realPath = event.getServletContext().getRealPath("/");
		ConfigUtils.setPath(realPath);
		logger.info("加载配置信息:完成......");
		ConfigUtils.addOrUpdateBlicklist(Constant.OPENBLACKLIST_KEY, Constant.OPENBLACKLIST_VALUE, null);
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {

	}

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		//启动 处理线程
		if (!bThreadStarted) {
			bThreadStarted = true;
			List<BlacklistFilterKey> list = dao.queryFilterKey();
			StringBuffer value = new StringBuffer();
			String realValue = null;
			for (BlacklistFilterKey blacklistFilterKey : list) {
				value.append(blacklistFilterKey.getKeyName()).append(":").append(blacklistFilterKey.getStatus()).append("|");
			}
			if(value.length()>0){
				realValue = value.substring(0, value.length()-1);
			}
			ConfigUtils.addOrUpdateBlicklist(Constant.BLICKLIST_FILTERKEY, realValue, null);
		
			
			BlicklistThread thread = new BlicklistThread(dao);
			thread.start();
		}
	}
	
}


然后在web.xml中,我配置了2个不同的监听

<!-- 初始化监听器 -->
 	<listener>
		<listener-class>com.shijie99.blacklistManager.listener.BlackManagerInitListener</listener-class>
	</listener>

            <!-- spring -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
原本以为没有问题,但是经过多次的测试后,发现在启动spring的监听时,它会去搜索是否有实现过它的监听,如果实现了的话,就会再次加载该监听,所以导致了2次监听的重复启动,

解决办法就是只启动自己的监听,而不去启动spring的监听,而spring的配置修改为:

<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:spring.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ApplicationListener接口中的onApplicationEvent被调用两次解决方案

Spring容器初始化完成后,调用BeanPostProcessor这个类,这个类实现ApplicationListener接口,重写onApplicationEvent方法, 方法中就是我们自己要在...

spring 注入properties属性乱码问题

使用Spring注解方式注入properties文件内容,并配合Junit4+Spring做单元测试先看看工作目录,然后再来讲解1、建立config.properties,我的config.prope...

Spring boot项目maven的profile多环境配置不自动替换变量的问题解决

原文地址:http://www.07net01.com/2017/04/1842360.html 在网上找了好久,配置都很简单,可是我的程序就是不能自动替换变量,最终单独测试,发现原来是引用spri...

Spring项目中使用Junit单元测试并配置数据源的问题

一、问题描述由于公司项目中的数据源是配置在Tomcat中的server.xml中的,所以在使用Junit进行单元测试的时候,无法获取数据源。 二、解决方案由于项目集成了Spring的自动注入等功能,所...

基于maven管理的项目中spring+mybatis配置数据源读取不到properties属性文件的问题

此时,启动会报异常,${jdbc.driver}这样的表达式获取不到properties里面的值,因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置s...

Spring配置web.xml文件时遇到的问题

Could not open ServletContext resource [/WEB-INF/petstore-servlet.xml] 这是我第一次试验spring第一个页面跳转时候碰到的问题,...
  • gotobar
  • gotobar
  • 2015年02月28日 21:38
  • 399

Spring Mvc 配置web.xml中的servlet-mapping时遇到的问题

今天在优化一个项目,因为是优化所以会有很多对原有代码的调整。对Spring mvc配置的路径进行了配置如下:修改前 appServlet /smart/* ...
  • wobpaa
  • wobpaa
  • 2016年12月11日 17:32
  • 220

新建一个maven spring boot项目中遇到的问题

1.问题:xxx.jar中没有主清单属性 2.问题:不能识别 3.问题:target/xxx.jar找不到 4.问题:Consider defining a bean of type 'servic...

采用共享jar包部署struts2+spring集成项目会遇到的问题

比如tomcat下边有个lib,放着我们需要的struts2 + spring 集成jar包(一定要struts2和spring集成),即共享给所有webapp使用,如图: 此时tomcat启动时...

spring项目中遇到的问题

mysql主键自动增加
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:配置spring 项目时遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)