Java 如何从application.yml文件中读取一组参数
在文件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'} 我试着这么
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如果不应该更改,那么它可能会在代码中的某个地方使用。答案可能是,看看它在哪里被使用,以及如何被使用。如果它没有被使用,那么改变它应该不是一个问题。