Field javaMailSender in com.example.emos.wx.task.EmailTask required a bean of type ‘org.springframew

注意:赶时间的伙伴直接看最下面,中间讲的是我的思路过程,想看就可以看看,编程可不是一蹴而就的

 报错如图,我们还是首先将他翻译过来才能知道他在说什么

APPLICATION FAILED TO START  应用程序无法启动

Field javaMailSender in com.example.emos.wx.task.EmailTask required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.
com.example.emos.wx.task.EmailTask中的字段javaMailSender需要一个“org.springframework.mail.javamail.javaMailSender”类型的bean,但找不到该bean。


The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)
注入点具有以下注释:
[email protected](必需=true)


Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.
考虑在配置中定义一个类型为“org.springframework.mail.javamail.JavaMailSender”的bean。

 就是说我注入的javaMailSender没有生效,spring boot认为他不是一个bean

所以我去找了javaMailSender的有关代码,如图

既然时bean的问题,首先要去检查是否在该类上加了@Component的注解,加了之后如果还是如上图所示,请接着往下看

思路是,既然@Autowired注入不了,那就换一个@Qualifier,我也确实是这样做了,而且报错消失了,JVM正常运行,如图

 

 可问题真的解决了吗?实际上并没有,在我进行调试的时候发现新的报错,如图

按照惯例,我们还是先来看一下这个报错,我已经翻译过来了

23:28:30  ERROR  Unexpected exception occurred invoking async method: public void com.example.emos.wx.task.EmailTask.sendAsync(org.springframework.mail.SimpleMailMessage)
java.lang.NullPointerException: null
    at com.example.emos.wx.task.EmailTask.sendAsync(EmailTask.java:26)
    at com.example.emos.wx.task.EmailTask$$FastClassBySpringCGLIB$$c89c0ad4.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:750)
    
    
    
23:28:30错误调用异步方法时发生意外异常:public void com.example.emos.wx.task.EmailTask.sendAsync(org.springframework.mail.SimpleMailMessage)

java.lang.NullPointerException:null

位于com.example.emos.wx.task.EmailTask.sendAsync(EmailTask.java:26)

位于com.example.emos.wx.task.EmailTask$$FastClassBySpringCGLIB$$c89c0ad4.invoke(<generated>)

位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAupProxy.java:771)

在org.springframework.aop.framework.ReflectiveMethodInvocation.processe(ReflectiveMethodInvocation.java:163)

在org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAupProxy.java:749)

位于org.springframework.aop.interceptor.AncExecutionInterceptor.alambda$invoke$0(AsyncExecutionInterceptor.java:115)

在java.util.concurrent.FutureTask.run(FutureTask.java:266)

位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutoer.java:1149)

在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

在java.lang.Thread.run(Thread.java:750)

 说是java.lang.NullPointerException: null的异常

既然是空指针,按照惯例,就应该打断点了,具体的图片在我测试的时候忘记截图了,断电的结果是在

private JavaMailSender javaMailSender;

 处是空的,也就是javaMailSender是null。

我尝试了很多方法,包括将@Component注解换成@ComponentScan,还是没用,网上的方法也找了好久

最后找到了解决方案:

yml配置文件中email所属的节点不是spring,请检查你的email配置的节点是否在spring的下面,而不是spring的其他节点下,这是yml文件中很容易遇到的问题,使用properties就不会有这样的坑,但是yml确实很简洁,有利有弊吧。

希望对你们有所帮助

猜你喜欢

转载自blog.csdn.net/romantic6666/article/details/129320878