- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
public abstract class AbstractJob implements Job
{
private static ConcurrentHashMap<String, Boolean> mutexes = new ConcurrentHashMap<String, Boolean>();
public abstract void job(JobExecutionContext jec, Logger logger) throws JobExecutionException;
public void execute(JobExecutionContext jec) throws JobExecutionException
{
Logger logger = LoggerLocator.getLogger(this.getClass().getSimpleName());
if (mutexes.containsKey(this.getClass().getSimpleName()))
{
logger.info("Job "+jec.getJobDetail().getName()+" already running");
}
else
{
try
{
mutexes.put(this.getClass().getSimpleName(), true);
job(jec, logger);
}
finally
{
mutexes.remove(this.getClass().getSimpleName());
}
}
}
}
Race condition и передача логгера в параметрах очень порадовали. А ведь вместо написания кривого велосипеда можно было просто @DisallowConcurrentExecution
Комментарии (0) RSS
Добавить комментарий