关闭

配置spring 项目时遇到的问题

标签: spring listener
109人阅读 评论(0) 收藏 举报
分类:
今天在做一个小项目时,使用了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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10950次
    • 积分:317
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类