Java 如何通过springspel注入bean属性列表?
我有一个用于定义动态端点(名称、主机和端口)的属性文件 因此,我创建了一个名为Java 如何通过springspel注入bean属性列表?,java,spring,spring-el,Java,Spring,Spring El,我有一个用于定义动态端点(名称、主机和端口)的属性文件 因此,我创建了一个名为EndPoint的bean,其中name、host和port作为成员变量 如何使用Spring@Value和SpEL动态注入服务器的主机和端口 端点属性 names=server1,server2,server3 endpoint.server1.host=192.168.1.101 endpoint.server1.port=10101 endpoint.server2.host=192.168.1.102 end
EndPoint
的bean,其中name、host和port作为成员变量
如何使用Spring@Value
和SpEL动态注入服务器的主机和端口
端点属性
names=server1,server2,server3
endpoint.server1.host=192.168.1.101
endpoint.server1.port=10101
endpoint.server2.host=192.168.1.102
endpoint.server2.port=10102
endpoint.server3.host=192.168.1.103
endpoint.server3.port=10103
EndPoint.java
public class EndPoint {
/** name */
private String name;
// hardcode server1 here
// how to inject server's host dynamically by name?
// @Value("${endpoint.#{this.name}.host}")
@Value("${endpoint.server1.host}")
private String host;
@Value("${endpoint.server1.port}")
private int port;
public EndPoint(String name) {
this.name = name;
}
}
@Configuration
@PropertySource( //
value = { "classpath:conf/endpoint.properties" }, ignoreResourceNotFound = true//
)
public class EndPointBeanConfig {
@Autowired
private Environment env;
@Bean(name = "endPoints")
public List<EndPoint> endPoints() {
final List<EndPoint> endPoints = new ArrayList<EndPoint>();
final String[] names = env.getProperty("names").split(",");
for (final String name : names) {
final EndPoint endPoint = endPoint(name);
endPoints.add(endPoint);
}
return endPoints;
}
@Bean(name = "endPoint")
@Scope("prototype")
public EndPoint endPoint(String name) {
return new EndPoint(name);
}
}
EndPointBeanConfig.java
public class EndPoint {
/** name */
private String name;
// hardcode server1 here
// how to inject server's host dynamically by name?
// @Value("${endpoint.#{this.name}.host}")
@Value("${endpoint.server1.host}")
private String host;
@Value("${endpoint.server1.port}")
private int port;
public EndPoint(String name) {
this.name = name;
}
}
@Configuration
@PropertySource( //
value = { "classpath:conf/endpoint.properties" }, ignoreResourceNotFound = true//
)
public class EndPointBeanConfig {
@Autowired
private Environment env;
@Bean(name = "endPoints")
public List<EndPoint> endPoints() {
final List<EndPoint> endPoints = new ArrayList<EndPoint>();
final String[] names = env.getProperty("names").split(",");
for (final String name : names) {
final EndPoint endPoint = endPoint(name);
endPoints.add(endPoint);
}
return endPoints;
}
@Bean(name = "endPoint")
@Scope("prototype")
public EndPoint endPoint(String name) {
return new EndPoint(name);
}
}
@配置
@PropertySource(//
value={“classpath:conf/endpoint.properties”},ignoreResourceNotFound=true//
)
公共类EndPointBeanConfig{
@自动连线
私人环境署;
@Bean(name=“endPoints”)
公共列表终结点(){
最终列表端点=新的ArrayList();
最后一个字符串[]name=env.getProperty(“名称”).split(“,”);
for(最终字符串名称:名称){
最终端点=端点(名称);
添加(端点);
}
返回端点;
}
@Bean(name=“endPoint”)
@范围(“原型”)
公共端点(字符串名称){
返回新端点(名称);
}
}
我只是给出建议,在您的项目中使用YAML/Properties进行此类实现