如何使用 Spring 在属性文件中注入数组
How to inject array in properties file using Spring
我正在使用 SpringBoot“1.5.10.RELEASE”来管理 .properties 文件,如下所示:
#Queue1
br.net.enterprise.server.name.1=server1.company.net
br.net.enterprise.server.port.1=4416
br.net.enterprise.server.protocol.1=t3
br.net.enterprise.server.queue.1=DistributedQueue-ERROR
br.net.enterprise.server.sampleRateMinutes.1=2
#Queue2
br.net.enterprise.server.name.2=a.b.c.d
br.net.enterprise.server.port.2=12234
br.net.enterprise.server.protocol.2=t4
br.net.enterprise.server.queue.2=DistributedQueue-ABC
br.net.enterprise.server.sampleRateMinutes.2=5
这样我就可以进行 'n' 队列配置。
在我的 java 文件中,我会这样结束:
@Value("${br.net.enterprise.server.name}")
private List<String> names;
@Value("${br.net.enterprise.server.port}")
private List<String> ports;
有没有办法让这种行为与 spring 和属性文件一起使用?
提前致谢。
您需要存储由一些字符分隔的值。逗号分隔
br.net.enterprise.server.name =server1.company.net,server2.company.net,server3.company.net
接下来这样读:
@Value("#{'${br.net.enterprise.server.name}'.split(',')}")
private List<String> names;
您可以使用@ConfigurationProperties
像这样更改您的属性
#Queue1
br.net.enterprise.server.1.name=server1.company.net
br.net.enterprise.server.1.port=4416
br.net.enterprise.server.1.protocol=t3
br.net.enterprise.server.1.queue=DistributedQueue-ERROR
br.net.enterprise.server.1.sampleRateMinutes=2
#Queue2
br.net.enterprise.server.2.name=a.b.c.d
br.net.enterprise.server.2.port=12234
br.net.enterprise.server.2.protocol=t4
br.net.enterprise.server.2.queue=DistributedQueue-ABC
br.net.enterprise.server.2.sampleRateMinutes=5
像这样声明两个 类
@Configuration
@Getter
@Setter
public class QueueConfig {
private String name;
private String port;
private String protocol;
private String queue;
private String sampleRateMinutes;
}
@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "br.net.enterprise")
public class MyConfig {
Map<Integer, QueueConfig> server;
}
这将创建这样的地图
将 1 和 2 更改为属性文件中有意义的内容。这将是地图中的关键,您可以从中读取。
我正在使用 SpringBoot“1.5.10.RELEASE”来管理 .properties 文件,如下所示:
#Queue1
br.net.enterprise.server.name.1=server1.company.net
br.net.enterprise.server.port.1=4416
br.net.enterprise.server.protocol.1=t3
br.net.enterprise.server.queue.1=DistributedQueue-ERROR
br.net.enterprise.server.sampleRateMinutes.1=2
#Queue2
br.net.enterprise.server.name.2=a.b.c.d
br.net.enterprise.server.port.2=12234
br.net.enterprise.server.protocol.2=t4
br.net.enterprise.server.queue.2=DistributedQueue-ABC
br.net.enterprise.server.sampleRateMinutes.2=5
这样我就可以进行 'n' 队列配置。 在我的 java 文件中,我会这样结束:
@Value("${br.net.enterprise.server.name}")
private List<String> names;
@Value("${br.net.enterprise.server.port}")
private List<String> ports;
有没有办法让这种行为与 spring 和属性文件一起使用?
提前致谢。
您需要存储由一些字符分隔的值。逗号分隔
br.net.enterprise.server.name =server1.company.net,server2.company.net,server3.company.net
接下来这样读:
@Value("#{'${br.net.enterprise.server.name}'.split(',')}")
private List<String> names;
您可以使用@ConfigurationProperties
像这样更改您的属性
#Queue1
br.net.enterprise.server.1.name=server1.company.net
br.net.enterprise.server.1.port=4416
br.net.enterprise.server.1.protocol=t3
br.net.enterprise.server.1.queue=DistributedQueue-ERROR
br.net.enterprise.server.1.sampleRateMinutes=2
#Queue2
br.net.enterprise.server.2.name=a.b.c.d
br.net.enterprise.server.2.port=12234
br.net.enterprise.server.2.protocol=t4
br.net.enterprise.server.2.queue=DistributedQueue-ABC
br.net.enterprise.server.2.sampleRateMinutes=5
像这样声明两个 类
@Configuration
@Getter
@Setter
public class QueueConfig {
private String name;
private String port;
private String protocol;
private String queue;
private String sampleRateMinutes;
}
@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "br.net.enterprise")
public class MyConfig {
Map<Integer, QueueConfig> server;
}
这将创建这样的地图
将 1 和 2 更改为属性文件中有意义的内容。这将是地图中的关键,您可以从中读取。