1. Spring을 이용한 메일 발송 Cron Expression
Download
Report
Transcript 1. Spring을 이용한 메일 발송 Cron Expression
Chapter 08
Enterprise Service
작성자: 박동진
소속팀 / 상위부서: 메일서비스 개발팀
작성년월일: 2009.09.06
목차
1.
메일 발송
2.
스케줄링
3.
JMS 메시징 연동
4.
JMX 연동
1. Spring을 이용한 메일 발송
1. Spring을 이용한 메일 발송
● Spring은 메일 발송 기능을 위한 MailSender interface를 제공하고 있다.
MailSender 인터페이스는 SimpleMailMessage를 전달받아 메일을 발송하는 기능을 정의하고 있다.
SimpleMailMessage는 메일 제목과 단순 텍스트 내용으로 구성된 메일을 발송할 때 사용된다.
JavaMailSender 인터페이스는 Java Mail API의 MimeMessage를 이용해서 메일을 발송함.
Spring 2.5에서는 JavaMailSenderImpl만을 제공하고 있다.
● JavaMailSenderImpl
SMTP 프로토콜을 사용한다.
SMTP 서버를 이용해서 메일을 발송하므로 SMTP 서버 주소와 포트 번호가 필요하다.
ex>
<bean id=“mailSender” class=“org.springframework.mail.javamail.JavaMailSenderImpl”
p:host=“mail.host.com” p:port=“25”
p:defaultEncoding=“euc=kr” />
<bean id=“soneNotifier” class=“…” p:mailSender-ref=“mailSender” />
1. Spring을 이용한 메일 발송
● SimpleMailMessage를 이용한 메일 메시지 생성
단순히 텍스트로만 구성된 메일 메시지를 생성할 때에는 SimpleMailMessage를 이용한다.
메일 내용이 HTML로 구성되어 있거나 파일읓 머부해야 하는 경우에는 사용할 수 없다.
SimpleMailMessage usage>
public class RegistrationNotifierWithSimple extends AbstractRegistrationNotifier {
private MailSender mailSender;
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
protected void sendEmailTo(Member member) {
SimpleMailMessage message = new SimpleMAilMessage();
message.setSubject(“회원 가입 안내 [Simple]”);
message.setText(“회원 가입을 환영합니다.”);
message.setFrom(“[email protected]”);
message.setTo(member.getEmail());
try {
mailSender.send(message);
} catch(MailException ex) {
log.warn(“fail to send mail” + message, ex);
}
1. Spring을 이용한 메일 발송
● Java Mail API의 MimeMessage를 이용한 메일 메시지 생성
JavaMailSender : MimeMessage 객체를 생성해주는 createMimeMessage() 메소드 제공
위 메소드가 리턴한 MimeMessage 객체를 이용해서 메시지를 구성해 메일을 발송한다.
메일 내용이 HTML로 구성되어 있거나 파일읓 머부해야 하는 경우에는 사용할 수 없다.
JavaMailSender usage>
public class RegistrationNotifierWithMime … {
private JavaMailSender mailSender;
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
@Override
protected void sendEmailTo(Member member) {
MimeMessage message = mailSender.createMimeMessage();
try {
message.setSubject(“회원 가입 안내 [Mime]”, “euc-kr”);
String htmlContent = “<strong> 안녕하세요 </strong> 반갑습니다.”;
message.setText(htmlContent, “euc-kr”, “html”);
message.setFrom(new InternetAddress(“[email protected]”));
message.addRecipient(RecipientType.To, new InternetAddress(member.getEmail()));
}
1. Spring을 이용한 메일 발송
● Quartz를 이용한 스케줄링 처리
지정한 스케줄에 맞춰 주기적으로 작업을 수행해야 할 때 많이 사용하는 오픈소스 프로젝트이다.
Spring은 Quartz를 지원하고 있으며 지원 클래스를 사용하면 간단히 설정할 수 있다.
Quartz 지원 클래스를 이용해 스케줄링을 처리하는 4단계
1. 작업을 수행할 클래스 생성
2. 주기적으로 실행될 JobDetailBean 스프링 설정
3. TriggerBean을 이용한 스케줄링 설정
4. ScheduleFactoryBean 클래스로 작업 시작
1. Spring을 이용한 메일 발송
● Cron Expression
Usage>
<bean id=“notifyJobTrigger” class=“org.springframework.scheduling.quartz.CronTriggerBean”
p:jobDetail-ref=“notifyJobDetail” p:crenExpression=“0 30 7 * * ? *” />
cronExpression 프로퍼티는 공백으로 구분된 7개의 값을 입력받으며, 각 값은 앞에서부터 차례대로
초, 분, 시, 일, 월, 주의 일, 년도를 의미한다. 이 중 년도 값은 생략 가능하다. 각 값은 ‘*’를 사용하여
모든 값을 의미할 수도 있고 ‘30’과 같이 특정 값을 지정할 수 있고 ’10,20,30,40,50’과 같이 특정 값
목록을 설정할 수도 있다. 또는 7-14와 같이 값의 범위를 지정할 수도 있다. 위의 설정은 매년 매월
매일 오전 7시 30분에 notifyJobDetail을 실행한다고 설정하였다.
2. JMS를 이용한 messaging
2. JMS를 이용한 messaging
1. What is JMS?
게시판 시스템에 새로운 게시글이 등록되었을 때 색인을 위해 검섹엔진 시스템에 게시글 정보를
전송해야 하는 경우를 생각해 보자. 이 경우, 게시판 시스템과 검색엔진 시스템은 약속된 규칙에
따라 게시글 정보를 담고 있는 메시지를 주고 받아야 하는데, 이렇게 서로 다른 시스템 간에 메시지
를 주고 받아야 할 때 사용되는 기술 중에 하나가 JMS(Java Message Service)이다.
2. JMS 연동을 위한 ConnectionFactory 및 메시지 목적지 설정
JMS 연동을 하려면 javax.jms.ConnectionFactory를 설정해 주어야 한다.
ConnectionFactory를 설정했다면, 그 다음으로 할 작업은 message destination을 설정해 준다.
JmsTemplate 클래스를 사용하려면 먼저 설정 파일에 JmsTemplate를 빈으로 등록해 준다.
Jmstemplate 클래스의 send() 메소드를 사용하면 JMS Message를 전송할 수 있다.
3. JMX 연동 지원
2. JMS를 이용한 messaging
1. What is JMX?
JMX(Java Management Extensions) API는 자바의 표준 API로서 자바 객체를 관리하고 모니터링
하는데 사용된다. Spring은 빈 객체가 JMX API를 구현했느냐 안 했느냐의 여부에 상관없이 빈 객체
를 JMX Mbean으로 등록해주는 기능을 제공하고 있다. 따라서 Spring을 사용하면 간단한 설정만
으로 기존의 POJO 객체를 JMX를 통해 관리하고 모니터링 할 수 있다.
4. Tech Sensing
4. Tech Sensing(DOM)
1. What is DOM(Document Object Model)?
관련링크 : http://blog.naver.com/rjm2004?Redirect=Log&logNo=10022098562
http://blog.naver.com/multist?Redirect=Log&logNo=7761716