@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class, args);
GlobalProperties globalProperties = context.getBean(GlobalProperties.class);
System.out.println(globalProperties);
}
}
@Component
@PropertySource("classpath:global.yml")
@ConfigurationProperties("app")
public class GlobalProperties {
private String error;
private List<Menu> menus = new ArrayList<>();
private Compiler compiler = new Compiler();
public static class Menu {
private String name;
private String path;
private String title;
//getters and setters and tostring
}
public static class Compiler {
private String timeout;
private String outputFolder;
//getters and setters and tostring
}
@Override
public String toString() {
return "GlobalProperties [error=" + error + ", menus=" + menus + ", compiler=" + compiler + "]";
}
}
src / main / resources文件夹中的global.yml文件
logging:
level:
org.springframework.web: ERROR
com.mkyong: DEBUG
email: test@mkyong.com
thread-pool: 10
app:
menus:
- title: Home
name: Home
path: /
- title: Login
name: Login
path: /login
compiler:
timeout: 5
output-folder: /temp/
error: /error/
当我运行应用程序时,我看不到正确读取global.yml属性。我得到这个作为o / p
GlobalProperties [error=null, menus=[], compiler=Compiler{timeout='null', outputFolder='null'}]
我是否错过了上面代码中的所有内容,无法从yml文件中读取属性。 我还尝试用global.properties替换global.yml,但这也行不通。
答案 0 :(得分:0)
您必须像在嵌套静态类中一样,将setter添加到GlobalProperties类中。
答案 1 :(得分:0)
作为一般规则,具有局部变量的spring @component
类需要为这些变量具有setter(并且getter也将是一个好习惯)。 spring使用no-args构造函数来制造bean和组件,并使用setter来初始化变量。
对于@component
3个子类型:@service
,@repository
和@controller
当然也是如此。
如果要添加任何其他构造函数(也将覆盖默认情况下存在的“不可见”无参数构造函数),还请确保明确编写无参数构造函数。