我有一个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文件中调用这些属性。
提前感谢您的帮助!
答案 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
文件并设置您的个人资料。