配置spring 项目时遇到的问题

今天在做一个小项目时,使用了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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值