엄지월드

Parameter 0 of constructor in com.myapp.lms.component.MailComponents required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found. 에러 본문

java/Spring

Parameter 0 of constructor in com.myapp.lms.component.MailComponents required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found. 에러

킨글 2022. 8. 3. 16:08

분명 JavaMailSender를 잘 적용했는데 에러가 나는 현상이 있었다.

***************************
APPLICATION FAILED TO START
***************************

Description:
Parameter 0 of constructor in com.myapp.lms.component.MailComponents required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.

Action:
Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.

Process finished with exit code 0

 

에러에 보면 "com.myapp.lms.component.MailComponents required a bean of type" 빈이 제대로 생성이 안되고 있다고 하여

MailComponents.java에서 아래와 같이 직접 생성자를 생성해주어 Run을 했을 때에 위와 같이 바로 에러가 나지 않았지만

controller를 호출하면 null 에러가 났었다.

java.lang.NullPointerException: null
at com.myapp.lms.component.MailComponents.sendMailTest(MailComponents.java:23) ~[classes/:na]
package com.myapp.lms.component;

import lombok.RequiredArgsConstructor;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

@RequiredArgsConstructor
@Component
public class MailComponents {    
    private JavaMailSender javaMailSender;
    
    MailComponents(JavaMailSender javaMailSender){
        this.javaMailSender = javaMailSender;
    }
    
    ...
    ...
   
}

@Autowired로 대체해보려 했지만 계속해서 에러가 났었고,

계속 몇시간째 구글링과 삽질을 하던 중.. 처음부터 다시 설정을 해보자 다짐하였고, 

파일 한개씩 수정하면서 계속해서 Run 을 눌러 Spring을 실행시켜본 결과..

application.yml 파일에서 mail 선언 시 들여쓰기를 datasource:와 같은 레벨로 들여쓰기를 맞춰주었더니 어이없게도 에러가 발생하지 않고 정상 작동하였다..!

<Before>

spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/lms
    driver-class-name : org.mariadb.jdbc.Driver
    username : root
    password : 1234


    mail:
      host: smtp.gmail.com
      port: 587
      username: kingle1024@gmail.com
      password: nyshnrdtor
      properties:
        mail:
          smtp:
            starttls:
              enable: true
              
  	jpa:
      generate-ddl : true
      hibernate :
      ddl-auto: update
      show-sql: true

<After>

spring:
  datasource:
    url: jdbc:mariadb://localhost:3306/lms
    driver-class-name : org.mariadb.jdbc.Driver
    username : root
    password : 1234

  mail:
    host: smtp.gmail.com
    port: 587
    username: kingle1024@gmail.com
    password: nyshnrdtor
    properties:
      mail:
        smtp:
          starttls:
            enable: true
  jpa:
      generate-ddl : true
      hibernate :
      ddl-auto: update
      show-sql: true

 

After로 바꾼 후 메일 수신 완료!

'java > Spring' 카테고리의 다른 글

Spring Security 설정  (0) 2022.08.05
JPA  (0) 2022.08.04
@Valid import 에러  (0) 2022.07.22
H2 DB 생성 에러 해결 방법(org.h2.jdbc.JdbcSQLNonTransientConnectionException)  (0) 2022.07.20
spring boot 프로젝트 생성 방법  (0) 2021.04.25
Comments