【问题标题】:Put value into application.yaml and use Runtime将值放入 application.yaml 并使用 Runtime
【发布时间】:2019-02-04 04:31:25
【问题描述】:

我有 Spring Boot 应用程序。 我想将一些值作为读取超时、调试模式放在 yaml 文件中,然后从 java 代码中读取它们。

application.yaml

spring:
  jpa:
      database-platform: org.hibernate.dialect.PostgreSQLDialect
      hibernate:
        ddl-auto: update
      show-sql: false


  datasource:
      url: jdbc:postgresql://localhost:5432/database_name
      username: database_username
      password: database_password


  http:
      multipart:
         maxFileSize: 15Mb
         maxRequestSize: 15Mb

server:
      port: 8585
      contextPath: /

【问题讨论】:

  • 我不清楚问题是什么以及到目前为止你尝试了什么。
  • @RolandWeisleder 我想将变量放在 application.yaml 中并在我的 java 代码中使用,与 debug-mode: true 相同
  • @MortezaJalambadani 您是在谈论在不同的配置文件中使用不同的 yaml 变量值。喜欢dev 的不同值和debugprod 的不同值?
  • @FarooqKhan 不,我不想将 debug-mode 、 read-timeout 、 socket-timout 、 api-token 等变量放入 yaml 并在代码中使用此变量

标签: java spring spring-mvc spring-boot yaml


【解决方案1】:

你可以使用spring框架提供的@Value注解来做到这一点。

示例如下:

api:
   values:
      socket-timout: 20

在您的 java 代码中,您可以使用以下代码获取 socket-timout 的值。

@Value("${api.values.socket-timeout}")
private Integer socketTimeout;

它将自动填充值20。您不能对静态变量执行此操作。要为静态变量实现这一点,您可以使用以下代码。

public static Integer mySocketTimeout;

@Value("${api.values.socket-timeout}")
public void setSocketTimeout(Integer socketTime){
   mySocketTimeout = socketTime;
}

通过非静态setter方法设置静态变量的值。

【讨论】:

  • 谢谢。有一种方法可以读取值并放入静态字段吗?我尝试这个静态字段并返回 null
  • @MortezaJalambadani 我已经更新了答案以满足您的问题。
猜你喜欢
  • 2017-10-16
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 2013-03-15
  • 2022-06-15
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多