以下解决方案按要求工作,这里处理了三种情况
- with
addJob()
:每分钟执行一次作业 - with
addPeriodicJob()
:每3分钟执行一次作业 with
fireJobAt()
:在特定日期(部署日期+延迟30秒)执行作业import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.commons.scheduler.Scheduler;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Component
public class ScheduledPeriodicJob {/* Default log. /
protected final Logger log = LoggerFactory.getLogger(this.getClass());/* The scheduler for rescheduling jobs. /
@Reference
private Scheduler scheduler;protected void activate(ComponentContext componentContext) throws Exception {
//case 1: with addJob() method: executes the job every minute
String schedulingexpression = “0 * * ?”;
String jobName1 = “case1”;
Mapconfig1 = new HashMap ();
boolean canRunConcurrently = true;
final Runnable job1 = new Runnable() {
public void run() {
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
log.info(“nnExecuting”);
}
};
try {
this.scheduler.addJob(jobName1, job1, config1, schedulingexpression, canRunConcurrently);
} catch (Exception e) {
job1.run();
}//case 2: with addPeriodicJob(): executes the job every 3 minutes String jobName2 = "case2"; long period = 180; Map<String, Serializable> config2 = new HashMap<String, Serializable>(); final Runnable job2 = new Runnable() { public void run() { log.info("nExecuting 2"); log.info("nExecuting 2"); log.info("nExecuting 2"); log.info("nExecuting 2"); log.info("nExecuting 2"); log.info("nExecuting 2"); log.info("nExecuting 2"); log.info("nExecuting 2"); } }; try { this.scheduler.addPeriodicJob(jobName2, job2, config2, period, canRunConcurrently); } catch (Exception e) { job2.run(); }//case 3: with fireJobAt(): executes the job at a specific date (date of deployment + delay of 30 seconds) String jobName3 = "case3"; final long delay = 30*1000; final Date fireDate = new Date(); fireDate.setTime(System.currentTimeMillis() + delay); Map<String, Serializable> config3 = new HashMap<String, Serializable>(); final Runnable job3 = new Runnable() { public void run() { log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); log.info("nExecuting at date: {} with a delay of: {} seconds", fireDate, delay/1000); } }; try { this.scheduler.fireJobAt(jobName3, job3, config3, fireDate); } catch (Exception e) { job3.run(); }}
protected void deactivate(ComponentContext componentContext) {
log.info(“Deactivateddbye!”);
}}
下边是
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <modelVersion>4.0.0</modelVersion> <!-- ====================================================================== --> <!-- P A R E N T P R O J E C T D E script I O N --> <!-- ====================================================================== --> <parent> <groupId>com.adobe.cq</groupId> <artifactId>schedule</artifactId> <version>1.0-SNAPSHOT</version> </parent> <!-- ====================================================================== --> <!-- P R O J E C T D E script I O N --> <!-- ====================================================================== --> <artifactId>schedule-bundle</artifactId> <packaging>bundle</packaging> <name>My Project Bundle</name> <dependencies> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.compendium</artifactId> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.scr.annotations</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>com.tagic</groupId> <artifactId>logger</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/lib/logger-0.0.1-SNAPSHOT.jar</systemPath> </dependency> <dependency> <groupId>com.tagic</groupId> <artifactId>org.apache.sling.commons.scheduler</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/lib/org.apache.sling.commons.scheduler-2.3.3-R1232965.jar</systemPath> </dependency></dependencies> <!-- ====================================================================== --> <!-- B U I L D D E F I N I T I O N --> <!-- ====================================================================== --> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-scr-plugin</artifactId> <executions> <execution> <id>generate-scr-descriptor</id> <goals> <goal>scr</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Bundle-SymbolicName>com.adobe.cq.schedule-bundle</Bundle-SymbolicName> </instructions> </configuration> </plugin> <plugin> <groupId>org.apache.sling</groupId> <artifactId>maven-sling-plugin</artifactId> <configuration> <slingUrl>http://${crx.host}:${crx.port}/apps/myproject/install</slingUrl> <usePut>true</usePut> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <excludePackageNames> *.impl </excludePackageNames> </configuration> </plugin> </plugins> </build></project>


