java.lang.InstantiationError: org.quartz.SimpleTrigger

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 05:27   43   0

原文: http://blog.csdn.net/huangsu2014/article/details/43409577

在集成spring4.1+shiro1.2.3+quartz2.2.1是出现此错误,原因是默认的shiro-quartz1.2.3中的实现是针对quartz1.6版本的实现(详细源码请查看QuartzSessionValidationScheduler),在quartz2.2.1中,SimppleTrigger为接口,所以无法实例化。下面的代码是针对2.2.1版本的实现:

  1. import org.apache.shiro.session.mgt.SessionValidationScheduler;
  2. import org.apache.shiro.session.mgt.ValidatingSessionManager;
  3. import org.apache.shiro.session.mgt.quartz.QuartzSessionValidationJob;
  4. import org.quartz.JobBuilder;
  5. import org.quartz.JobDetail;
  6. import org.quartz.Scheduler;
  7. import org.quartz.SchedulerException;
  8. import org.quartz.SimpleScheduleBuilder;
  9. import org.quartz.SimpleTrigger;
  10. import org.quartz.TriggerBuilder;
  11. import org.quartz.TriggerKey;
  12. import org.quartz.impl.StdSchedulerFactory;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. public class Quartz2SessionValidationScheduler implements
  16. SessionValidationScheduler {
  17. public static final long DEFAULT_SESSION_VALIDATION_INTERVAL = 3600000L;
  18. private static final String JOB_NAME = "SessionValidationJob";
  19. private static final Logger log = LoggerFactory
  20. .getLogger(Quartz2SessionValidationScheduler.class);
  21. private Scheduler scheduler;
  22. private boolean schedulerImplicitlyCreated = false;
  23. private boolean enabled = false;
  24. private ValidatingSessionManager sessionManager;
  25. private long sessionValidationInterval = 3600000L;
  26. public Quartz2SessionValidationScheduler() {
  27. }
  28. public Quartz2SessionValidationScheduler(
  29. ValidatingSessionManager sessionManager) {
  30. this.sessionManager = sessionManager;
  31. }
  32. protected Scheduler getScheduler() throws SchedulerException {
  33. if (this.scheduler == null) {
  34. this.scheduler = StdSchedulerFactory.getDefaultScheduler();
  35. this.schedulerImplicitlyCreated = true;
  36. }
  37. return this.scheduler;
  38. }
  39. public void setScheduler(Scheduler scheduler) {
  40. this.scheduler = scheduler;
  41. }
  42. public void setSessionManager(ValidatingSessionManager sessionManager) {
  43. this.sessionManager = sessionManager;
  44. }
  45. public boolean isEnabled() {
  46. return this.enabled;
  47. }
  48. public void setSessionValidationInterval(long sessionValidationInterval) {
  49. this.sessionValidationInterval = sessionValidationInterval;
  50. }
  51. public void enableSessionValidation() {
  52. if (log.isDebugEnabled()) {
  53. log.debug("Scheduling session validation job using Quartz with session validation interval of ["
  54. + this.sessionValidationInterval + "]ms...");
  55. }
  56. try {
  57. SimpleTrigger trigger = TriggerBuilder
  58. .newTrigger()
  59. .startNow()
  60. .withIdentity(JOB_NAME, "DEFAULT")
  61. .withSchedule(
  62. SimpleScheduleBuilder.simpleSchedule()
  63. .withIntervalInMilliseconds(
  64. sessionValidationInterval)).build();
  65. JobDetail detail = JobBuilder
  66. .newJob(QuartzSessionValidationJob.class)
  67. .withIdentity(JOB_NAME, "DEFAULT").build();
  68. detail.getJobDataMap().put("sessionManager", this.sessionManager);
  69. Scheduler scheduler = getScheduler();
  70. scheduler.scheduleJob(detail, trigger);
  71. if (this.schedulerImplicitlyCreated) {
  72. scheduler.start();
  73. if (log.isDebugEnabled()) {
  74. log.debug("Successfully started implicitly created Quartz Scheduler instance.");
  75. }
  76. }
  77. this.enabled = true;
  78. if (log.isDebugEnabled())
  79. log.debug("Session validation job successfully scheduled with Quartz.");
  80. } catch (SchedulerException e) {
  81. if (log.isErrorEnabled())
  82. log.error(
  83. "Error starting the Quartz session validation job. Session validation may not occur.",
  84. e);
  85. }
  86. }
  87. public void disableSessionValidation() {
  88. if (log.isDebugEnabled()) {
  89. log.debug("Stopping Quartz session validation job...");
  90. }
  91. Scheduler scheduler;
  92. try {
  93. scheduler = getScheduler();
  94. if (scheduler == null) {
  95. if (log.isWarnEnabled()) {
  96. 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).");
  97. }
  98. return;
  99. }
  100. } catch (SchedulerException e) {
  101. if (log.isWarnEnabled()) {
  102. log.warn(
  103. "Unable to acquire Quartz Scheduler. Ignoring and returning (already stopped?)",
  104. e);
  105. }
  106. return;
  107. }
  108. try {
  109. scheduler.unscheduleJob(new TriggerKey("SessionValidationJob",
  110. "DEFAULT"));
  111. if (log.isDebugEnabled())
  112. log.debug("Quartz session validation job stopped successfully.");
  113. } catch (SchedulerException e) {
  114. if (log.isDebugEnabled()) {
  115. log.debug(
  116. "Could not cleanly remove SessionValidationJob from Quartz scheduler. Ignoring and stopping.",
  117. e);
  118. }
  119. }
  120. this.enabled = false;
  121. if (this.schedulerImplicitlyCreated)
  122. try {
  123. scheduler.shutdown();
  124. } catch (SchedulerException e) {
  125. if (log.isWarnEnabled())
  126. log.warn(
  127. "Unable to cleanly shutdown implicitly created Quartz Scheduler instance.",
  128. e);
  129. } finally {
  130. setScheduler(null);
  131. this.schedulerImplicitlyCreated = false;
  132. }
  133. }
  134. }
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP