当前位置: 首页 > 知识库问答 >
问题:

Spring启动-应用程序中的自定义变量。性质

司空昊阳
2023-03-14

我有一个使用restful api的Spring Boot客户机。应用程序中有任何密钥条目,而不是在java类中硬编码RESTAPI的IP地址。我可以使用的属性?

如果没有,我可以创建一个自定义条目吗?

谢啦

共有3个答案

聂炜
2023-03-14

您可以将自己的条目添加到应用程序中。财产。只需确保属性名称与中列出的常用属性不冲突即可http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-应用程序属性

荀增
2023-03-14

您可以使用以下命令启动应用程序,而不是将IP硬编码到属性文件中

-Dmy。属性=127.127。10.20

而且Spring靴会自动用

@Value("${my.property}")
private String myProperty;
杨阳飇
2023-03-14

Spring Boot使用的基础设施可以以完全相同的方式在您自己的项目中使用。您在@zmitrok answer中评论了“未知属性”警告。这是因为您的属性没有元数据,所以IDE不知道它。

如果可以的话,我强烈建议您不要使用@Value,因为与Spring Boot提供的功能相比,它相当有限(@Value是Spring框架的一项功能)。

首先为您的IP创建一些POJO:

@ConfigurationProperties("app.foo")
public class FooProperties {

    /**
     * IP of foo service used to blah.
     */
    private String ip = 127.0.0.1;

    // getter & setter
}

那你有两个选择

  1. @Component放在FooProperties上,并通过在任何@configuration类上添加@EnableConfigurationProperties来启用配置属性的处理(从Spring Boot1.3.0.M3开始,这最后一步不再是必需的)
  2. 保持FooProperties不变,并将@EnableConfigurationProperties(FooProperties.class)添加到任何@Configuration类中,该类将自动为您创建Springbean

一旦你完成了应用程序。福。ip可在应用程序中使用。属性,您可以在代码中查找属性的值

@Component
public MyRestClient {

    private final FooProperties fooProperties;

    @Autowired
    public MyRestClient(FooProperties fooProperties) { ... }

    public callFoo() {
       String ip = this.fooProperties.getIp();
       ...
    }

}

好的,所以你的密钥在你的IDE中仍然是黄色的。最后一步是添加一个额外的依赖项,它将查看您的代码并在构建时生成相关的元数据。将以下内容添加到您的pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

瞧,你的密钥被识别了,你有javadoc,IDE给你默认值(你在字段中初始化的值)。一旦确定可以使用任何类型,转换服务将处理(即URL)并使用该字段上的javadoc为密钥生成文档。

您还可以在字段中添加任何JSR-303约束验证(例如,一个正则表达式来检查它是否是有效的ip)。

查看此示例项目和文档以了解更多详细信息。

 类似资料:
  • 但如果我做了这样的事情,它是有效的!!!(重写当前可用的方法以捕获HttpMessageNotReadableException) 我的问题是@exceptionHandler(value={customexception.class})只用于自定义异常?不能习惯于现有的更一般的异常?为了自定义这样的一般异常,我们总是需要重写它们原来的异常处理方法吗? 下面是日志结果。

  • 当尝试运行或调试带有applicationIdSuffix(.debug)的自定义BuildType时,手机上安装了应用程序,但正确的活动实际上并没有启动。实际上,启动了具有原始包名的活动(示例:在应该启动com.fobbymaster.app.debug时启动了com.fobbymaster.app)。 我在想,有一些配置需要修改,但我似乎找不到。 有什么想法吗? 设备SHELL命令:pm in

  • 在我的申请中。在yaml属性文件中,我定义了一个变量,如下所示- 从这篇SOF文章中,我了解了。(点)和-(破折号)是如何转换的。 现在在ENV变量文件中-我没有像- 或或等 相反,我在env(文件)是- spring boot是否将props文件中的变量< code > service-account . SECRET 与< code > service account _ SECRET env

  • 我正在创建一个Spring启动应用程序,它也为外部库的一个类创建bean,这个外部java bean需要java.util.properties作为构造函数参数之一。虽然我可以使用配置Propety与前缀从Spring引导加载的属性文件读取属性并将其转换为java.util.properties.但是,我不希望在属性文件中有任何额外的前缀环境或属性来源java.util.properties 这是

  • 我们运行了一些基于sames原则的Spring boot应用程序,例如: 记录数据库中的事件。 处理异常的常用方法(@controlleradvice) 使用MDC显示日志 及更多信息。 今天,我们使用Spring Boot父应用程序建立应用程序的基础。它的工作相当好,但似乎更好地使用Spring启动机机制。 null 如果我们只使用它来定义我们的启动配置,那么提供一些没有@bean或@servi