我在springboot应用程序的application.properties中有以下内容(1.5.4.RELEASE)
my.prefix.one.id=id01
my.prefix.one.name=one
my.prefix.two.id=id02
my.prefix.two.name=two
和以下一样的课程
public class MyClass{
private String id;
private String name;
//getters and setters
}
如果我使用@ConfigurationProperties(前缀=" my.prefix.one"),那么我会得到一个带有id字段" id01"的MyClass bean。
有没有办法指示springboot扫描扫描所有带有前缀" my.prefix"的属性?并创建多个bean。在这种情况下,两个bean - 具有id字段的bean" id01"和带有id字段的bean" id02" ?
答案 0 :(得分:0)
您应该使用spring @ConfigurationProperties
并在MyClass
@ConfigurationProperties(prefix="my.prefix")
public class MyClass{
private One id01;
private Two id02;
//GETTER SETTER
public static class One {
private String id;
// GETTER SETTER
}
public static class Two {
private String id;
// GETTER SETTER
}
}
然后您可以像
一样访问它myClass.getOne().getId();
更新:OP不希望使用嵌套类来检索这些字段
@ConfigurationProperties(prefix="my.prefix")
public class MyClass{
private String id01;
private String id02;
@NotNull
private One one;
@NotNull
private Two two;
public getId01(){
return one.id;
}
public getId02(){
return two.id;
}
public static class One {
private String id;
// GETTER SETTER
}
public static class Two {
private String id;
// GETTER SETTER
}
}
现在您可以像
一样使用它们 myClass.getId01();
myClass.getId02();
答案 1 :(得分:0)
由于您使用的是springboot,因此您也可以执行以下操作:
@Configuration
public class AppBeanConfig {
@Bean
@ConfigurationProperties(prefix="my.prefix.one")
public MyClass myClassOne(){
return new MyClass();
}
@Bean
@ConfigurationProperties(prefix="my.prefix.two")
public MyClass myClassTwo(){
return new MyClass();
}
}
我不知道有任何有意义的方法来避免配置单个bean。
但是,如果您确实要执行此操作,则可以访问ApplicationContext并手动处理属性并将bean注入Applicationcontext,就我个人而言,我宁愿将多个bean方法添加到配置类中,而不是直接操作ApplicationContext。
答案 2 :(得分:-1)
如果一个,两个的属性相同,则只需使用相同的类。 Lombok帮助您自动创建getter / setter方法,以使其正常运行
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix="my.prefix")
public class MyClass {
private Child one;
private Child two;
@Getter
@Setter
public static class Child {
@NotNull
private String id;
@NotNull
private String name;
}
}