控制檯報錯的信息:java
nested exception is java.lang.IncompatibleClassChangeError: Implementing classapache
或者拋出異常:Java.lang.InstantiationErrorsession
查看包衝突:ui
右鍵項目—>Properties—>Java Build Path —>Libraries—>點開Maven Dependenciesthis
能夠看到shiro使用的1.6版本,我引用的是2.2.2版本,因此jar包衝突。spa
具體解決方式:debug
一、自定義實現QuartzSessionValidationJob類和QuartzSessionValidationScheduler類code
QuartzSessionValidationJob類:blog
package org.apache.shiro.session.mgt.quartz; import org.apache.shiro.session.mgt.ValidatingSessionManager; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 基於Quartz 2.* 版本的實現 * */ public class QuartzSessionValidationJob implements Job { /** * Key used to store the session manager in the job data map for this job. */ public static final String SESSION_MANAGER_KEY = "sessionManager"; /*-------------------------------------------- | I N S T A N C E V A R I A B L E S | ============================================*/ private static final Logger log = LoggerFactory.getLogger(QuartzSessionValidationJob.class); /*-------------------------------------------- | C O N S T R U C T O R S | ============================================*/ /*-------------------------------------------- | A C C E S S O R S / M O D I F I E R S | ============================================*/ /*-------------------------------------------- | M E T H O D S | ============================================*/ /** * Called when the job is executed by quartz. This method delegates to the <tt>validateSessions()</tt> method on the * associated session manager. * * @param context * the Quartz job execution context for this execution. */ public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getMergedJobDataMap(); ValidatingSessionManager sessionManager = (ValidatingSessionManager) jobDataMap.get(SESSION_MANAGER_KEY); if (log.isDebugEnabled()) { log.debug("Executing session validation Quartz job..."); } sessionManager.validateSessions(); if (log.isDebugEnabled()) { log.debug("Session validation Quartz job complete."); } } }
QuartzSessionValidationScheduler類:ci
package org.apache.shiro.session.mgt.quartz; import org.apache.shiro.session.mgt.DefaultSessionManager; import org.apache.shiro.session.mgt.SessionValidationScheduler; import org.apache.shiro.session.mgt.ValidatingSessionManager; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SimpleScheduleBuilder; import org.quartz.SimpleTrigger; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 基於Quartz 2.* 版本的實現 */ public class QuartzSessionValidationScheduler implements SessionValidationScheduler { public static final long DEFAULT_SESSION_VALIDATION_INTERVAL = DefaultSessionManager.DEFAULT_SESSION_VALIDATION_INTERVAL; private static final String JOB_NAME = "SessionValidationJob"; private static final Logger log = LoggerFactory.getLogger(QuartzSessionValidationScheduler.class); private static final String SESSION_MANAGER_KEY = QuartzSessionValidationJob.SESSION_MANAGER_KEY; private Scheduler scheduler; private boolean schedulerImplicitlyCreated = false; private boolean enabled = false; private ValidatingSessionManager sessionManager; private long sessionValidationInterval = DEFAULT_SESSION_VALIDATION_INTERVAL; public QuartzSessionValidationScheduler() { } public QuartzSessionValidationScheduler(ValidatingSessionManager sessionManager) { this.sessionManager = sessionManager; } protected Scheduler getScheduler() throws SchedulerException { if (this.scheduler == null) { this.scheduler = StdSchedulerFactory.getDefaultScheduler(); this.schedulerImplicitlyCreated = true; } return this.scheduler; } public void setScheduler(Scheduler scheduler) { this.scheduler = scheduler; } public void setSessionManager(ValidatingSessionManager sessionManager) { this.sessionManager = sessionManager; } public boolean isEnabled() { return this.enabled; } public void setSessionValidationInterval(long sessionValidationInterval) { this.sessionValidationInterval = sessionValidationInterval; } public void enableSessionValidation() { if (log.isDebugEnabled()) { log.debug("Scheduling session validation job using Quartz with session validation interval of [" + this.sessionValidationInterval + "]ms..."); } try { SimpleTrigger trigger = TriggerBuilder.newTrigger().startNow().withIdentity(JOB_NAME, Scheduler.DEFAULT_GROUP) .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(sessionValidationInterval)) .build();//<span style="color:#ff0000;">Quartz 2中的實現</span> JobDetail detail = JobBuilder.newJob(QuartzSessionValidationJob.class) .withIdentity(JOB_NAME, Scheduler.DEFAULT_GROUP).build(); detail.getJobDataMap().put(SESSION_MANAGER_KEY, this.sessionManager); Scheduler scheduler = getScheduler(); scheduler.scheduleJob(detail, trigger); if (this.schedulerImplicitlyCreated) { scheduler.start(); if (log.isDebugEnabled()) { log.debug("Successfully started implicitly created Quartz Scheduler instance."); } } this.enabled = true; if (log.isDebugEnabled()) log.debug("Session validation job successfully scheduled with Quartz."); } catch (SchedulerException e) { if (log.isErrorEnabled()) log.error("Error starting the Quartz session validation job. Session validation may not occur.", e); } } public void disableSessionValidation() { if (log.isDebugEnabled()) { log.debug("Stopping Quartz session validation job..."); } Scheduler scheduler; try { scheduler = getScheduler(); if (scheduler == null) { if (log.isWarnEnabled()) { log.warn("getScheduler() method returned a null Quartz scheduler, which is unexpected. Please check your configuration and/or implementation. Returning quietly since there is no validation job to remove (scheduler does not exist)."); } return; } } catch (SchedulerException e) { if (log.isWarnEnabled()) { log.warn("Unable to acquire Quartz Scheduler. Ignoring and returning (already stopped?)", e); } return; } try { //scheduler.unscheduleJob(JOB_NAME, Scheduler.DEFAULT_GROUP); //源代碼中的樣子 scheduler.unscheduleJob(new TriggerKey("SessionValidationJob", "DEFAULT")); //修改後 if (log.isDebugEnabled()) log.debug("Quartz session validation job stopped successfully."); } catch (SchedulerException e) { if (log.isDebugEnabled()) { log.debug("Could not cleanly remove SessionValidationJob from Quartz scheduler. Ignoring and stopping.", e); } } this.enabled = false; if (this.schedulerImplicitlyCreated) try { scheduler.shutdown(); } catch (SchedulerException e) { if (log.isWarnEnabled()) log.warn("Unable to cleanly shutdown implicitly created Quartz Scheduler instance.", e); } finally { setScheduler(null); this.schedulerImplicitlyCreated = false; } } }
二、註釋掉引用的shiro-quart包:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-quartz</artifactId>
<version>1.2.5</version>
</dependency>
而後重啓項目,完美解決。
轉載:http://nonobaba.iteye.com/blog/2312468
提示:轉載別人的文章請註明來源,很是鄙視那些粘貼別人文章還寫成本身原創的人,這樣的行爲和小偷沒什麼區別。