레이블이 Spring인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Spring인 게시물을 표시합니다. 모든 게시물 표시

2012년 11월 28일 수요일

Spring 메일보내기

간단하게 메일보내는 기능이 필요해서 간단하게만 작업했다. javamail라이브러리를 찾아 mail.jar를 추가해주고, servlet.xml에 아래와 같이 추가해준다.
<bean class="org.springframework.mail.javamail.JavaMailSenderImpl" id="mailSender"> <property name="host" value="smtp.gmail.com"> <property name="username" value="보내는사람@이메일주소"> <property name="password" value="비밀번호"> <property name="port" value="587"> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.starttls.enable">true</prop> <prop key="mail.smtp.timeout">8500</prop> </props> </property> </property></property></property></property></bean> <bean class="컨트롤러.class" id="mainbean"> <constructor-arg> <ref bean="sqlMapClientTemplate"> </ref></constructor-arg> <constructor-arg> <ref bean="mailSender"> </ref></constructor-arg> </bean> 위와 같이 컨트롤러 생성자에 mailSender를 추가했다.
@Controller
public class AdgameController {
 SqlMapClientTemplate smct;
 private MailSender mailSender;
 
 public AdgameController(SqlMapClientTemplate smct,MailSender mailsender) { //생성자
  this.smct = smct;
  this.mailSender=mailsender;
        }



        @RequestMapping("/sendmail.html")
 public void sendMail(HttpServletRequest req,HttpServletResponse res){
 
  String title = req.getParameter("title");
  String content = req.getParameter("content");
 
          SimpleMailMessage message = new SimpleMailMessage();
  message.setFrom("보내는사람@이메일주소");
  message.setSubject(title);
  message.setText(content);

  message.setTo("받는사람@이메일주소");
  mailSender.send(message);
  
 }
} 
정말 심플하다.

[ log4j ] 로그 기록하기

예전엔 보통 tomcat에 있는 log폴더에서 로그를 확인했지만, 로그의 중요성을 느끼고 log4j를 사용했다. commons-logging.jar, log4j.jar를 라이브러리에 추가하고, WEB-INF/web.xml에 아래 내용을 추가 <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> web.xml에 안에 추가한 값과 같이 임의의 파일을 만든다. 아래는 log4j.properties
# Configure logging for testing
log4j.rootLogger=WARN, stdout, dailyfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
# file
log4j.appender.dailyfile.Threshold = WARN
log4j.appender.dailyfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyfile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyfile.layout = org.apache.log4j.PatternLayout
#log4j.appender.dailyfile.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.dailyfile.File = 절대경로/logs/log.log
log4j.appender.dailyfile.Append=true
# iBatis
log4j.logger.java.sql.Connection=WARN
log4j.logger.java.sql.Statement=WARN
log4j.logger.java.sql.PreparedStatement=WARN
log4j.logger.java.sql.ResultSet=WARN
위처럼 간단하게 설정해준다. 2번라인의 WARN은 경고를 stdout은 console로 출력해주는 내용을 dailyfile은 매일 설정한 내용으로 로그를 쌓아주는 설정이다 컨트롤러에 전역변수로 선언 해주고,
private Logger log = Logger.getLogger(this.getClass());

        try{

        } catch (Exception e) {
     
     log.error("Error:",e);
 }
간단하게 쓸 수 있다.

2012년 11월 23일 금요일

Spring Scheduler 사용하기 (Quartz 대체기능)

몇 분마다

혹은

지정한 시각마다 지정한 함수를 호출하기위해 검색을 해보았지만,

Quartz라는 라이브러리는 예전 자료밖에 구할 수 없었다.

난 Spring 3.1버전을 사용중이라

예전 자료를 보고 해도 호환성이 안맞는지 전혀 될 생각이 없었다.

그래서 검색을 통해

Spring 기능 중에 Scheduler를 찾게 되었고,

구현방법이 굉장히 쉽고 심플했다.


나의 개발환경
jdk 1.6
spring 3.1

spring3 버전부터 어노테이션을 통한 스케쥴러 등록이 가능하다고 한다.
servlet.xml의

schema에


xmlns:task="http://www.springframework.org/schema/task" //추가

xsi:schemaLocation="http://www.springframework.org/schema/task/spring-task-3.0.xsd"

//추가





<task:scheduler id="Scheduler" pool-size="10" /> <task:executor id="TaskExecutor" pool-size="10"/> <task:annotation-driven executor="TaskExecutor" scheduler="Scheduler"/> // <beans>태그 안에 추가



Controller.java에서 아래 내용 추가


@Scheduled(cron="0 5 0 * * *")//초 분 시 일 월 주(년)

Public void recordDailyStats(){

 System.out.println("time to killing!!");

 smct.insert("recordDailyStats");

}

//간단하게 annotation으로 추가할 수 있다..




난 매일 00시 05분마다 통계를 내야하는 기능이 필요하므로,
위와 같이 간단히 코딩하였다.


Quarts를 써보지 않아서 뭔지는 잘 모르겠지만,
Scheduler가 정말 편한 것 같다

아래는 http://dev.anyframejava.org/docs/anyframe/plugin/scheduling/4.5.3/reference/html/ch02.html의 예제내용..
@Scheduled(fixedDelay=5000)
public void printWithFixedDelay() {
    System.out.println("execute printWithFixedDelay() of Annotated PrintTask at " 
        + new Date());
}

@Scheduled(fixedRate=10000)
public void printWithFixedRate() {
    System.out.println("execute printWithFixedRate() of Annotated PrintTask at " 
        + new Date());
} 

@Scheduled(cron="*/8 * * * * MON-FRI")
public void printWithCron() {
    System.out.println("execute printWithCron() of Annotated PrintTask at " 
        + new Date());
}