bu yazımda sizlere spring ve quartz entegrasyonundan bahsedeceğim. Bir projede belli aralıklarla işlem yapmak isterseniz(SMS gönderme , Mail gönderme, vs ..), bu yapıdan faydalanabilirsiniz. Ben bu projede 10 sn aralıklarla mail gönderme işlemini anlatacağım, kodları inceleyerek zamanlanmış görevler hakkında bilgi sahibi olabilirsiniz.
Öncelikli olarak intelliJ aracılığıyla bir Spring web projesi oluşturuyoruz.
Proje bittiğinde aşağıdaki yapıda olacaktır:
pom.xml dosyasına quartz dependency tanımlamalarını yaparak hemen başlayalım.
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- Quartz API
-->
<dependency>
<groupId>opensymphony</groupId>
<artifactId>quartz</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.apache.commons.logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-support</artifactId>
<version>2.0.6</version>
</dependency>
|
Web projesi oluşturduğum için projeye gelen tüm URL leri index.jsp sayfasına yönlendirelim. Yönlendirme yapmasak ta quartz çalışacaktır ancak yönlendirme yaparsak projeyi çalıştırdığımız bir karşılama sayfası olur ve sayfa bulunamadı hatası almayız.
HelloController .java
@Controller
@RequestMapping("/")
public class HelloController {
@RequestMapping(method
= RequestMethod.GET)
public String
printWelcome(ModelMap model) {
model.addAttribute("message",
"Hello world!");
return
"hello";
}
}
|
scheduler için xml dosyası aracılığıyla MailReportServiceImpl .java dosyasındaki mailSend metotunu çağıracağız. Dolayısıyla bu class ve metodu hemen oluşturalım.
package com.company.service.impl;
import com.company.service.MailReportService;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* Created by levent.yildiz on
12.10.2014.
*/
public class MailReportServiceImpl implements MailReportService {
@Override
public void mailSend() {
DateFormat dateFormat =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar =
Calendar.getInstance();
String strDate =
dateFormat.format(calendar.getTime());
//TODO : development
//Mail gönderme işlemi
burada yapılacak
System.out.println("Mail Gonderiliyor.." + strDate);
}
}
|
Ve son aşamada quartz ayarlarını bir xml dosyasından yapıyoruz.
MailReportServiceImpl , MethodInvokingJobDetailFactoryBean(Quartz) ve SimpleTriggerBean(Quartz) metotlarını çağıran bean ler oluşturuyoruz.
MethodInvokingJobDetailFactoryBean metodunu çağırırken kendi yazdığımız MailReportServiceImpl classını ve mailSend metodunu refere ediyoruz.
Birde son olarak SimpleTriggerBean metoduna bu job'un ne sıklıkla çalışması gerektiğini set ediyoruz.
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Beans -->
<bean
id="mail"
class="com.company.service.impl.MailReportServiceImpl"/>
<bean
id="methodJobDetailBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
p:concurrent="false"
p:targetObject-ref="mail" p:targetMethod="mailSend"/>
<!-- For Testing -->
<bean
id="simpleTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean"
p:jobDetail-ref="methodJobDetailBean"
p:startDelay="20000"
p:repeatInterval="10000"/>
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
p:waitForJobsToCompleteOnShutdown="true">
<property name="triggers">
<list>
<ref
bean="simpleTrigger"/>
</list>
</property>
</bean>
</beans>
|
projenin çıktısı aşağıdaki gibi olacaktır:
Hiç yorum yok:
Yorum Gönder