2022-04-23 01:07:22
今天没有按计划完成任务,原因是~有个新的游戏公测了,没忍住QAQ
另外一个重要问题是,两个bug的产生,如下阐述。
我的后端springboot是采用的yml以及application杂糅的方式进行配置的,之前每天正常的跑着,可是今天打开idea时候,yml一直没有自动提示,yml文件没有染上spring的颜色,网上大部分都是一样的解决策略,那就是安装spring assistant插件,然后重启即可,然而事实上不奏效。经过我的慢慢琢磨,解决措施如下:
手动的将yml加入到环境,而不是自动扫描[可能是项目变大,扫描变得困难,没扫到]。
说到springboot,那么他提供了一个JavaMailSender . 只要导入对应的spring-boot-starter-mail并且进行基本项的配置即可。需要时,自动注入JavaMailSender,利用SimpleMailMessage封装一下消息即可发送。但是事实上并没有这么顺利,一开始我的配置全部放在了yml中,结果发现JavaMailSender始终找不到!用了各种方法都不行。最后解决措施是把spring.mail.host放在application.properties即可。。。大致分析一下原因(不一定正确,但大概率是):
首先大致查看了MailSenderAutoConfiguration的源码,类前有下面这句话:
@Import({ MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })
这个导入中,后面一个MailSenderPropertiesConfiguration就是会产生JavaMailSender对象的类,它的类上有标注:
@ConditionalOnProperty(prefix = "spring.mail", name = "host")
而对于其内部有JavaMailSender对象产生方式:
@Bean
@ConditionalOnMissingBean(JavaMailSender.class)
JavaMailSenderImpl mailSender(MailProperties properties) {
JavaMailSenderImpl sender = new JavaMailSenderImpl();
applyProperties(properties, sender);
return sender;
}
由此可见,如果成功进入了MailSenderPropertiesConfiguration类,那么一定会产生JavaMailSender或者是容器原本就存在的实例。所以原因就是没有进入。然而我仔细排查我的yml文件,发现该配置是绝对存在的,所以真相只有一个,那就是ConditionalOnProperty的判定并没有访问到yml的配置,只访问了application的配置。
浅显的原因就是这个结论了ConditionalOnProperty不读取yml配置。深层原因肯定还是要去看spring对这个注解的处理方式了。因为较为繁琐,暂且只做简单的分析,日后有空的时候再进行深入分析。
主要就是解决了上面的问题,然后就是简单的回复发送邮件提醒被回复人了(不会有人会经常逛你站看有没有人来回复评论的,所以,需要邮件提醒)。然后由于发送邮件需要的时间比较长,所以暂且也是新建了一个线程单独处理,服务本身只检测插入数据库的结果,当然,没有必要上消息队列的,因为处理量没那么大。然后前端还实现了昨天计划的评论后刷新策略,简单的实现了子传父事件方式,成功时,就重新获取一下数据(因为数据量不是很大,这样更方便)。
明天要做核酸检测啦。明天总能把友链页剩余的两个需求解决了吧!管理友链和评论分页。
开心!o(* ̄▽ ̄*)ブ