从application.yml/java、spring中读取应用变量(assoc数组)

Posted

技术标签:

【中文标题】从application.yml/java、spring中读取应用变量(assoc数组)【英文标题】:Read application variable (assoc array) form application.yml / java, spring 【发布时间】:2020-12-25 17:47:38 【问题描述】:

我正在开发一个 spring 项目,我需要从应用程序 yml 文件中读取多个帐户凭据(登录名和密码)。

我已经将凭证写成这样的关联数组(我不知道有什么更好的方法):

app:
  mail:
    accounts:
    - login: firstlogin
      password: firstpassword
    - login: secondlogin
      password: secondpassword

然后我将这些值映射到带有@Value 注解的spring 应用程序:

@Service
public class MyClass 
 
  @Values("$app.mail.accounts")
  private List<Map<String, String>> accounts;

   ...

但是 spring 不断抛出异常,因为它无法读取这些值。

Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException:
Could not resolve placeholder 'intelaw.mail.accounts' in value "$app.mail.accounts"

【问题讨论】:

嘿,用@ConfigurationProperties代替@Value 在此处查看与列表类似的讨论:***.com/questions/26699385/… 【参考方案1】:

在不更改 application.yml 的情况下,您可以调整数据结构并使其正常工作。

创建一个类帐户

class Account 
      private String login;
      private String password;

    //constructors, getters and setters here

并使用带有 @ConfigurationProperties 注释的类来阅读它

@Component
@ConfigurationProperties("app.mail")
class MyClass 
   private List<Account> accounts = new ArrayList<>();
   //getters and setters here

在您的服务类中,您可以像这样使用它:

@Autowired
private MyClass myClass;

void someMethod() 
  myClass.getAccounts();

【讨论】:

以上是关于从application.yml/java、spring中读取应用变量(assoc数组)的主要内容,如果未能解决你的问题,请参考以下文章

Pygame错误:self.spritedict [spr] = surface_blit(spr.image,spr.rect)

SFML从入门到放弃 图像和音频

使用Spire组件抛出异常The type initializer for 'spr857' threw an exception

Spring AOP:Exception encountered during context initialization - cancelling refresh attempt: org.spr

找不到“org.springframework.security.oauth2.client.registration.ClientRegistrationRepository”类型的 <Spr

Aurora 极光 A21超算将会使用SPR CPU和Ponte Vecchio GPU