使用application.yml进行SpringBoot配置

时间:2017-07-25 11:07:42

标签: java spring-boot yaml

我有一个SpringBoot应用程序,它可以通过OpenLdap执行不同的功能。

  • getUser
  • createUser
  • deleteUser
  • etc.

工作正常。现在我想创建一个application.Yml,在那里我可以使用不同的凭据管理不同的环境。我读了一些教程,但我仍然有一些理解问题。实际上我的代码看起来像这样:

UserController中:

...
protected static String serverURL = "xxxxx:90xx";
protected static String LdapBindDn = "cn=admin, xxxxx";
protected static String LdapPassword = "xxxx";
...

@RequestMapping(value = "/{userid:.+}",method = RequestMethod.GET,consumes="application/json",produces = "application/json")
public UserData getUser(@PathVariable String userid) {          
    DirContext context = connectToLdap();
    //some operations...
    context.close();    
    return user;
}
... // same for the other functions

我的计划是,我想在额外的application.yml中指定凭据,而不是在UserController的开头(见上文)。

然后我在src / main / resources中创建了一个application.yml:

# Actual environment
spring: 
  profiles.actives: development
---
# Dev Profile 
spring:
  profiles: dev  
datasource:
  serverUrl: ldaps://xxxxxx:90xx
  AdminName: xxxx
  AdminPassword: xxxxxx
  BaseDN: xxxxx
---
# Production Profile  
spring:
  profiles: prod     
datasource:
 serverUrl: ldaps://xxxx2:90xx
 AdminName: xxxxx2
 AdminPassword: xxxxx2
 BaseDN: xxxxxx

现在我需要调用此配置。我已经阅读了一个教程(http://therealdanvega.com/blog/2017/06/26/spring-boot-configuration-using-yaml),我必须创建一个额外的类" ApplicationProperties"对于.yml文件的属性。

@Component
@ConfigurationProperties("datasource")
public class ApplicationProperties {

private String serverURL;
private String adminName;
private String adminPassword;
private String baseDN;

// Getter-/Setter-Methods

}

现在我需要从.yml的值开始定义我的变量,对吧?我回到我的UserController并尝试了类似的东西:

private String serverURL;
private String adminName;
private String adminPassword;
private String baseDN;  

@Autowired   
ApplicationProperties appProp;

@RequestMapping(value = "/{userid:.+}",method = RequestMethod.GET,consumes="application/json",produces = "application/json")
public UserData getUser(@PathVariable String userid) {          
    DirContext context = connectToLdap();
    //some operations...
    context.close();    
    return user;
}
... // same for the other functions


private DirContext connectToLdap(){
    System.out.prinln(appProp.getServerURL());
    System.out.prinln(appProp.getAdminName());
    System.out.prinln(appProp.getAdminPassword());
    .... // Code for the Ldap connection 
}

但变量" appProp"仍然是空的。我知道,这是一个很大的理解问题。我不知道如何从.yml文件中调用这些属性。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以通过创建配置类来获取date文件中的属性:

.yml

application.yml

datasource: serverUrl: ldaps://xxxxxx:90xx adminName: xxxx adminPassword: xxxxxx baseDN: xxxxx 上课:

ApplicationConfig.java

然后您可以致电@Configuration @EnableConfigurationProperties @ConfigurationProperties(prefix = "datasource") public class ApplicationConfig { private String serverUrl; private String adminName; private String adminPassword; private String baseDN; //getters setters } 班级

ApplicationConfig

我建议您创建基于配置文件的属性,因为Spring引导会自动选择它们,例如@Autowired public ApplicationConfig app; public UserData getUser(@PathVariable String userid) { DirContext context = connectToLdap(); //some operations... appProp.getServerUrl(); appProp.getAdminName(); context.close(); return user; } 您可以通过在班级中添加application-{profile}.{properties|yml}注释来创建application-production.yml文件并设置您的个人资料。