为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Spring Boot 外部化配置?

如何使用 Spring Boot 外部化配置?

大话西游666 2023-05-24 14:56:19
它只是不工作。我有    MailTrainAPI mt = new MailTrainAPI();    mt.sendMail(map);...@Componentpublic class MailTrainAPI {    @Value("${mailtrain.url}")    private String API;    public void sendMail(MultiValueMap<String, String> map) {        System.out.println("API = "+API);        API = System.getProperty("mailtrain.api");        System.out.println("API = "+API);        API = System.getenv("mailtrain.api");        System.out.println("API = "+API);src/main/resources/application.propertiesmailtrain.url=http://mail.galaxy.store/api/send/galaxybadge它打印API = nullAPI = nullAPI = null它不起作用,因为我自己实例化了这个类,而 Spring 不知道它。如何application.properties手动访问文件中的属性?弹簧引导 1.5.21
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

MailTrainAPI应该是一个 Spring bean,又名组件,由于 自动扫描@Component,然后注入@Value("${mailtrain.url}").

但是,当您调用 时,您自己创建了一个单独的类实例new MailTrainAPI()。不要那样做。

您使用该对象的代码必须通过注入字段来接收它,例如

@Autowired
private MailTrainAPI mt;


查看完整回答
反对 回复 2023-05-24
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我能够修复它


public void sendMail(MultiValueMap<String, String> map) {

    try {

        setAPI();

    } catch (IOException e) {

        Logger.error(this.getClass(), "sendMail()", "Cannot send mail. Cannot load mailtrain.url property: " + e.getMessage());

        return;

    }

    if (API == null) {

        Logger.error(this.getClass(), "sendMail()", "Cannot send mail. Cannot load mailtrain.url property.");

        return;

    }

    System.out.println("API = "+API);

    ...


private void setAPI() throws IOException {

    InputStream is = this.getClass().getResourceAsStream("/application.properties");

    Properties p = new Properties();

    p.load(is);

    API = p.getProperty("mailtrain.url");

}

但我认为会有一种更简单、更好的方法,而且绒毛更少。


查看完整回答
反对 回复 2023-05-24
  • 2 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信