service里代码:
long a = System.currentTimeMillis(); System.out.println(a + "--run---"); Thread.sleep(10000); System.out.println(a + "--run end---");
定义为5秒执行一次。
quartz的配置,开始是:
<bean id="dataImportJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="dataImportService" /> <property name="targetMethod" value="excute" /> </bean>
<bean id="dataImportJobCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="dataImportJobDetail" /> <property name="cronExpression" value="${demo.scheduler.time}" /> </bean>
输出是: 1469689855015--run--- 1469689860001--run--- 1469689865007--run--- 1469689855015--run end--- 1469689860001--run end--- 1469689870003--run--- 1469689875000--run--- 1469689865007--run end--- 1469689880001--run--- 1469689870003--run end--- 1469689875000--run end--- 1469689885001--run--- 即多个线程并发执行了。
后来改成:
<bean id="dataImportJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="dataImportService" /> <property name="targetMethod" value="excute" /> <property name="concurrent" value="false" /> <!-- 禁止并发,第一次未执行完,后续的要等待 --> </bean>
<bean id="dataImportJobCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="dataImportJobDetail" /> <property name="cronExpression" value="${demo.scheduler.time}" /> </bean>
输出是: 1469689935121--run--- 1469689935121--run end--- 1469689945122--run--- 1469689945122--run end--- 1469689955125--run--- 1469689955125--run end--- 1469689965126--run--- 1469689965126--run end--- 即等同于单线程执行了。
|