gpt4 book ai didi

java - 使用 application.yml 配置 Spring Boot

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:26 31 4
gpt4 key购买 nike

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

  • 获取用户
  • 创建用户
  • 删除用户
  • 等等

效果很好。现在我想创建一个 application.Yml,我可以在其中使用不同的凭据管理不同的环境。我读了一些教程,但仍然存在一些理解问题。实际上我的代码看起来像这样:

用户 Controller :

...
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 )中读到,我必须为 .yml 文件的属性创建一个额外的类“ApplicationProperties”。

@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 文件中调用这些属性。

感谢您提前提供的所有帮助!

最佳答案

您可以通过创建配置类从 .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

@Autowired
public ApplicationConfig app;

public UserData getUser(@PathVariable String userid) {
DirContext context = connectToLdap();
//some operations...
appProp.getServerUrl();
appProp.getAdminName();
context.close();
return user;
}

我建议您创建基于配置文件的属性,因为 Spring Boot 自动选择它们,例如 application-{profile}.{properties|yml}您可以创建 application-development.yml 文件并通过在类中添加 @Profile("product") 注释来设置您的配置文件。

关于java - 使用 application.yml 配置 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301484/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com