Spring Boot 메일을 보내자(서비스 에러 알림)

JAVA/Spring|2018. 12. 19. 15:51

SpringBoot로 만든 toy 프로젝트를 라즈베리파이에 올려서

사용하고 있는데


가끔 에러가 발생하는 경우가 있다.

물론 가끔씩 접속해서 로그를 확인하면 되지만


에러가 언제 발생할지 모르기 때문에 알림 용도로 Mail전달받으면 어떨까 싶어 

SpringBoot에 Gmail Smtp를 활용하여 에러 스택과 url 그리고 param을 전달 받으면 좋겠다 싶어

최근에 적용한 내용을 남긴다.



1. 메이븐 pom.xml 추가

일단 메이븐 pom.xml 에 dependency를 추가


<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-mail</artifactId>

</dependency>


2. spring properties 에 smtp 설정 추가(application.properties)

gmail의 smtp 를 활용하기 위해 접속 정보가 필요하다.

application.properties에 하단 내용들을 설정한다.

#---------------------------------------

spring.mail.host=smtp.gmail.com

spring.mail.username=xxxx@gmail.com

spring.mail.password=xxxx


#그리고 보안 설정들

spring.mail.properties.mail.smtp.auth = true

spring.mail.properties.mail.smtp.socketFactory.port = 465

spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory

spring.mail.properties.mail.smtp.socketFactory.fallback = false

#---------------------------------------

#--구글 계정의 보안 수준이 낮은 앱의  엑세스를 허용해야 보내진다...


이제 설정들은 됬고 Mail을 전송하는 서비스 클래스를 만들자


3. MailService 클래스 생성

@Service

public class MailService {

@Autowired

private JavaMailSender javaMailSender;

public void sendEmail(String emailAddr, String content) {

SimpleMailMessage mail = new SimpleMailMessage();

mail.setTo(emailAddr);

mail.setFrom("123@gmail.com");

mail.setSubject("[Service] Error Notify");

mail.setText(content);

javaMailSender.send(mail);

}

}



Mail 전송하는 서비스 클래스를 테스트를 마치고


4. 에러 처리를 위한 @ControllAdvise 활용 및 MailService 활용


Controller 단에서 발생하는(혹은 하위에서 발생후 throw되어 올라온) 에러들을 처리하기 위하여

@ControllerAdvise를 활용하여 ErrorHandler 를 생성했다.


@ControllerAdvice

public class ErrorHandler {

@Autowired

private MailService mailService;

@ExceptionHandler(value = Exception.class)  

    public String handleException(HttpServletRequest req, Exception e){

StringBuilder stb = new StringBuilder();

stb.append( "requestURI : " );

stb.append( req.getRequestURI() );

stb.append( "\n" );

stb.append( "req.getQueryString() : " );

stb.append( req.getQueryString() );

stb.append( "\n" );

stb.append( "e : " );

stb.append( "\n" );

stb.append( Throwables.getStackTraceAsString(e) );

mailService.sendEmail("xxxxx@gmail.com", stb.toString());

return e.getMessage();

    }  

}



물론.. 더 깔끔하게 만드는 방법들이 있겠지만


일단 기록을 위해 남기고 추가적으로 수정해 나가도록...






댓글()

Jconsole (톰캣 모니터링,자바 모니터링)

Server|2014. 8. 12. 15:57

WAS 모니터링 툴은 많지만..

상용도 아니고 따로 설치 할 필요 없이 JDK 설치시 함께 설치되는 Jconsole을 주로 활용한다.

주 기능은 Thread, Heap Memory, 기타 정보들 모니터링이며 메모리 Leak을 체크하는데 활용한다.


일반적으로 위치는 JAVA_HOME 에 bin 에 jconsole.exe 이며

실행하면 아래와 같이 나타난다

Local로 프로세스가 동작하고 있어서 리스트에 보인다면 그냥 선택 후 'Connect' 를 선택한다면 위의 창 처럼 나오겠지만


대부분 서비스로 돌고 있는 경우가 많아 리스트에 나타나지 않기때문에

Remote Process 에 url 을 입력해 주어야 한다.


톰캣을 모니터링 하기 위해서는 톰캣에 옵션을 추가해 주어야 한다.

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=8999

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false  

위와 같이 설정 후

아래와 같이 Remote Process 를 입력 하여 Connect 를 선택하면 

실시간으로 데이터를 확인 할 수 있다.









'Server' 카테고리의 다른 글

[Oracle] auto commit error  (0) 2020.07.29
[Kafka] 토픽 삭제 후, 브로커 기동안됨  (0) 2020.06.24
Zookeeper  (0) 2019.12.09
Nginx Service 로 등록  (0) 2014.08.13
Varnish 설치 Centos, FreeBSD  (0) 2013.10.30

댓글()