如何使用数据库中的属性重新加载配置bean
我需要为每个发送的邮件创建一个Spring javamail
bean,并使用数据库中的值进行初始化。基于本文,如何从数据库加载应用程序属性
我已经配置PropertyPlaceholderConfigurer
为从属性文件和数据库中加载值。我的mailSender
Java配置类中有以下bean(),用于从应用程序发送邮件,该应用程序从数据库加载主机,端口,用户名和密码,
@Configurationpublic class MailSenderConfig {
@Bean
public JavaMailSender mailSender() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(PropertiesUtils.getProperty("mail.server.host"));
javaMailSender.setPort(Integer.parseInt(PropertiesUtils.getProperty("mail.server.port")));
javaMailSender.setUsername(PropertiesUtils.getProperty("mail.server.username"));
javaMailSender.setPassword(PropertiesUtils.getProperty("mail.server.password"));
return javaMailSender;
}
}
但是我的问题是,当数据库值更改时,mailSender
bean具有启动应用程序上下文时提供的旧值。为了对Bean进行任何更改,我需要重新启动服务器以更新Bean值。
我将这个bean注入我的控制器中,我需要在其中发送这样的邮件,
@Autowiredprivate JavaMailSender mailSender;
根据一些建议,我尝试使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
它,但是它没有创建新的bean定义(仍然具有旧值)。
所以我需要的是,每次使用此mailSender
bean 发送邮件时,它都应从数据库中选择值,而无需重新启动上下文或服务器。有可能或如何做到?
任何帮助表示赞赏。谢谢。
回答:
我已经创建了一个自定义邮件服务实现,并按照JB Nizet的建议删除了Mail sender
bean。在服务实现中,每次从应用程序发送邮件时,我都会从数据库中读取属性并创建一个新实例。像下面
@Autowiredprivate MailSender mailSender;
JavaMailSenderImpl jms = mailService.createMailSender();
MimeMessage mimeMessage = new MimeMessage(mailService.getMailSession(jms));
MimeMessageHelper message = null;
message.setSubject("Test mail");
message.setTo("email@domain.com");
message.setText(htmlContent, true);
Transport.send(message);
在其中为您发送的每个邮件createMailSender()
创建一个新的实例JavaMailSenderImpl
。
以上是 如何使用数据库中的属性重新加载配置bean 的全部内容, 来源链接: utcz.com/qa/411137.html