开发者社区> 问答> 正文

spring 配置文件里属性 注入方式问题:报错

大侠们,我最近做的一个 发送mail 的程序,spring里配置的是 信息是从properties文件里加载进来的。最近想改成从数据库里读取的方式。突然就没有思路了。哪个哥哥能给个思路指点一下我。不胜感激

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${mail.host}" /> <property name="username" value="${mail.username}" /> <property name="password" value="${mail.password}" /> <property name="defaultEncoding" value="UTF-8"></property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> </props> </property> </bean>  

展开
收起
kun坤 2020-06-06 23:52:03 546 0
1 条回答
写回答
取消 提交回答
  • 你说的从数据库读取JAVAMAIL的配置?

    那意思就是运行期才动态配置JAVAMAIL了对吧, 不运行怎么访问数据库呢?

    那问题就好办了, 删除你的配置, NEW 一个 JAVAMAIL 实例, 调用设置方法, 一切OK! 

    不用配置了, 动态运行的东西是配不出来的, 除非你自己实现一个查数据库并初始化MAIL实例的工厂类. 

    这样的设计失去了配置的意义.

    ######求解!
    ######

    可以利用工厂方法生成一个properties, 然后把properties注入到javaMailSenderImpl.

    或者利用init方法启动的时候load并初始化。

    ######

    构建一个MailConfig的bean,在bean里加入host,username,password等必要的field,生成getter,setter方法,bean中提供一个构造方法或者其他方式,将bean初始化时,从数据库中读取配置,为field赋值。

    在spring配置文件,配置该bean,用该bean替换properties,可否?

    ######挺好的思路,安装你的思路。在spring配置文件,配置该bean,然后 <bean id="mailInfo" class="某个从数据库取得mail参数的bean类"/> 接下来。 例如 <property name="host" value="我想知道这里改怎么调用那个bean的host属性呢?" />######

    引用来自“谭明智”的答案

    构建一个MailConfig的bean,在bean里加入host,username,password等必要的field,生成getter,setter方法,bean中提供一个构造方法或者其他方式,将bean初始化时,从数据库中读取配置,为field赋值。

    在spring配置文件,配置该bean,用该bean替换properties,可否?

    @范庆辉 : 我想到有两种方法,第一种采用org.springframework.beans.factory.config.PropertyPathFactoryBean,将一个bean的属性值赋值给另一个bean的属性值。还有种方法就是继承JavaMailSenderImpl,将mailInfo这个bean作为一个它的一个属性,通过setter方法注入进去。把mailInfo的值赋值给相应的属性。
    ######应该是自己写一个支持DB数据源的PlaceHolderConfigurer。最近hold一词好像比较火啊
    2020-06-06 23:52:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载