Java 如何从application.yml文件中读取一组参数

Java 如何从application.yml文件中读取一组参数,java,spring-boot,Java,Spring Boot,在文件application.yml中,指定了几个参数作为常用参数 receiver: address: address@gmail.com 我是这样读的: @Value("${receiver.address}") private static String receiverAddres; 但是如何阅读这样一套呢 sender.smtp: {'mail.host':'smtp.gmail.com','mail.smtp.port':'465'} 我试着这么

在文件application.yml中,指定了几个参数作为常用参数

receiver:
  address: address@gmail.com
我是这样读的:

  @Value("${receiver.address}")
  private static String receiverAddres;
但是如何阅读这样一套呢

sender.smtp: {'mail.host':'smtp.gmail.com','mail.smtp.port':'465'}
我试着这么做

@Value("${sender.smtp.mail.host}")
public static String smptHost;
当应用程序启动时,它会输出:

smptHost = null

您编写了
application.xml
,但我假定您的意思是
application.yml

使用
@Value
很方便,但在大多数情况下使用它会更好

像这样声明一个类:

@ConfigurationProperties("email.settings")
public class MyEmailSettings {
  private ReceiverSettings receiver = new ReceiverSettings();
  private SenderSettings sender = new SenderSettings();

  // getter and setters

  public static class ReceiverSettings {
    private String address;
    
    // getter and setters
  }

  public static class SenderSettings {
    private String host;
    private String port;
  }
}
email.settings:
  receiver:
    address: 'address@gmail.com'
  sender:
    host: 'smtp.gmail.com'
    port: '465'
然后您可以使用如下YAML:

@ConfigurationProperties("email.settings")
public class MyEmailSettings {
  private ReceiverSettings receiver = new ReceiverSettings();
  private SenderSettings sender = new SenderSettings();

  // getter and setters

  public static class ReceiverSettings {
    private String address;
    
    // getter and setters
  }

  public static class SenderSettings {
    private String host;
    private String port;
  }
}
email.settings:
  receiver:
    address: 'address@gmail.com'
  sender:
    host: 'smtp.gmail.com'
    port: '465'

通过使用这样的
ConfigurationProperties
类,您还可以在most IDE中获得验证,以确保YAML文件中没有输入错误。

应用程序中。YAML
添加如下示例所示的列表:

测试:
清单:一,二,三
当您需要调用/使用列表时,请将其导入并按如下方式使用:

@ConfigurationProperties("email.settings")
public class MyEmailSettings {
  private ReceiverSettings receiver = new ReceiverSettings();
  private SenderSettings sender = new SenderSettings();

  // getter and setters

  public static class ReceiverSettings {
    private String address;
    
    // getter and setters
  }

  public static class SenderSettings {
    private String host;
    private String port;
  }
}
email.settings:
  receiver:
    address: 'address@gmail.com'
  sender:
    host: 'smtp.gmail.com'
    port: '465'

公开课{
@值(“${test.list}”)
公共字符串[]列表;
pulic void printFirstValue(){
System.out.println(列表[0]);
}
}

这不是一个集合,而是一个嵌套的对象/映射,因此我假设您可以使用类似于
${sender.smtp.mail.host}
等的东西。我有一个IDE对这样的记录发誓,再看一眼,这似乎是一个错误。我不确定Spring Boot是否支持完整的YAML规范,但我认为是这样的。是您的IDE在抱怨还是应用程序也在抱怨?是的,IDE在这样一个条目${sender.smtp.mail.host}上抛出一个错误您已经声明您的IDE在抱怨。应用程序本身呢?如果只是尝试从命令行编译和运行代码会发生什么?不,我不能更改application.yml文件。我需要阅读这一行:sender.smtp:{'mail.host':'smtp.gmail.com','mail.smtp.port':'465'}@alexSerg为什么不能更改这一行?通常是你的应用程序决定任何配置文件的内容和格式。我不是唯一一个编写此应用程序的人,所以我不能只更改任何文件。但如果这是一个非常大的问题,那么我可以报告它并要求您重做此代码。但我不知道这可能不是个问题,但我只是没有足够的知识来处理itI。我建议与项目中的其他开发人员进行讨论。我不能更改application.yml文件。在我的例子中,有两个字段:name和valueHmm如果不应该更改,那么它可能会在代码中的某个地方使用。答案可能是,看看它在哪里被使用,以及如何被使用。如果它没有被使用,那么改变它应该不是一个问题。