Spring boot - Application.properties 中的自定义变量

     2023-02-26     245

关键词:

【中文标题】Spring boot - Application.properties 中的自定义变量【英文标题】:Spring boot - custom variables in Application.properties 【发布时间】:2015-11-10 14:05:59 【问题描述】:

我有一个使用 restful api 的 spring boot 客户端。我可以使用 application.properties 中的任何密钥条目,而不是在 java 类中硬编码 REST API 的 IP 地址?

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

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

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

    // getter & setter

那么你有两个选择

    @Component 放在FooProperties 上并通过在任何@Configuration 类上添加@EnableConfigurationProperties 来启用配置属性的处理(从Spring Boot 1.3.0.M3 开始,这最后一步不再需要) 保留FooProperties 原样并将@EnableConfigurationProperties(FooProperties.class) 添加到您的任何@Configuration 类中,这将自动为您创建一个Spring Bean。

完成后,app.foo.ip 可以在 application.properties 中使用,您可以在代码中使用 @Autowired FooProperties 来查找属性的值

@Component
public MyRestClient 

    private final FooProperties fooProperties;

    @Autowired
    public MyRestClient(FooProperties fooProperties)  ... 

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


好的,所以您的密钥在 IDE 中仍然是黄色的。最后一步是add an extra dependency that will look your code and generate the relevant meta-data at build time。将以下内容添加到您的 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)。

查看this sample project 和the documentation 了解更多详情。

【讨论】:

哇,我对此一无所知(也许我应该开始阅读更多文档),这对您有很大帮助,谢谢。 我遵循了这些步骤(选择了上面的选项 1),但 Spring Tool Suite 仍然在 application.properties 文件中将我的属性标记为未知。有一个快速修复可用于创建应用程序元数据,但我认为 spring-boot-configuration-processor 应该可以解决这个问题? 您必须询问 STS 团队。我所知道的是它应该开箱即用。我们没有太多需要调查的内容,请创建另一个线程以提供更多详细信息。 @StephaneNic​​oll :这是我刚刚发现的一个很棒的功能,我要感谢您和团队的其他成员为您在 spring-boot 上所做的所有工作,继续努力;) 我不能说这是正确且最好的方法,但仅使用 @zmitrok 也可以。忽略黄色警告【参考方案2】:

您可以使用

启动应用程序,而不是将 IP 硬编码到属性文件中

-Dmy.property=127.127.10.20

Spring Boot 会自动拾取它

@Value("$my.property")
private String myProperty;

【讨论】:

在哪里添加-Dmy.property 您使用哪个 IDE?如果是 Eclipse:***.com/questions/862391/… 如果你是从命令行运行的,只需将其添加到末尾 啊,好的,谢谢,这个 -Dmy.property 可以添加到 java -jar my-application.war 的末尾? 我认为这是要走的路【参考方案3】:

您可以将自己的条目添加到 application.properties。只需确保属性名称不会与http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties 中列出的常见属性冲突

【讨论】:

我明白了,但是当我输入 restAPIServiceAddress 作为条目时,它会用黄色下划线并说“是未知属性”,可以吗? 我刚刚添加了一个答案来解释那个黄色的东西是什么意思。

Spring Boot 不加载 application.yml 配置还是?

】SpringBoot不加载application.yml配置还是?【英文标题】:SpringBootdoesn\'tloadapplication.ymlconfigor?【发布时间】:2019-07-1707:06:49【问题描述】:我有一个简单的主应用程序://Application.javapackagecom.my.application;importorg.springframework.boot.SpringA... 查看详情

用于 Spring Boot 的 application.yml 与 application.properties

】用于SpringBoot的application.yml与application.properties【英文标题】:application.ymlvsapplication.propertiesforSpringBoot【发布时间】:2018-05-0720:37:33【问题描述】:在我的项目中,我目前使用application.yml进行配置。SpringInitializr生成application.prope... 查看详情

如何 JUnit 测试 Spring-Boot 的 Application.java

】如何JUnit测试Spring-Boot的Application.java【英文标题】:HowtoJUnitTestSpring-Boot\'sApplication.java【发布时间】:2017-06-0602:54:23【问题描述】:道歉,因为这似乎是一个无用的行为,但是我们有什么办法可以在Spring-Boot(1.3.8.RELEASE)的Applicati... 查看详情

使用 spring boot 和 spring-boot-maven-plugin 生成战争时排除 application.properties

】使用springboot和spring-boot-maven-plugin生成战争时排除application.properties【英文标题】:Excludeapplication.propertieswhengeneratingwarusingspringbootandspring-boot-maven-plugin【发布时间】:2014-12-3120:51:54【问题描述】:我正在使用SpringBoot开发一个Web... 查看详情

application.properties 中的 Spring Boot 未知属性

】application.properties中的SpringBoot未知属性【英文标题】:SpringBootunknownpropertyinapplication.properties【发布时间】:2017-09-1915:31:36【问题描述】:我已经使用SpringInitializr,使用嵌入式Tomcat+Thymeleaf模板引擎生成了一个SpringBootWeb应用程序... 查看详情

Spring Boot 单元测试不适用于 application.yml

】SpringBoot单元测试不适用于application.yml【英文标题】:Springbootunittestnotworkwithapplication.yml【发布时间】:2016-11-1317:28:32【问题描述】:我无法进行单元测试以读取application.yml。我已经按照下面的url进行了回答,但它仍然无法正常... 查看详情

Spring-Boot 中 application.properties 属性的 UTF-8 编码

】Spring-Boot中application.properties属性的UTF-8编码【英文标题】:UTF-8encodingofapplication.propertiesattributesinSpring-Boot【发布时间】:2016-09-2301:05:36【问题描述】:在我的application.properties中,我添加了一些自定义属性。custom.mail.property.subjec... 查看详情

spring boot 无法从 application.yml 获取配置

】springboot无法从application.yml获取配置【英文标题】:springbootcannotgetconfigurationfromapplication.yml【发布时间】:2019-05-1910:45:13【问题描述】:我的SpringBoot应用程序无法从application.yml文件中获取配置参数。我的主要课程如下:@SpringBoo... 查看详情

Spring Boot:尝试使用 EnvironmentPostProcessor 覆盖 application.properties

】SpringBoot:尝试使用EnvironmentPostProcessor覆盖application.properties【英文标题】:SpringBoot:Attemptingtooverrideapplication.propertiesusingEnvironmentPostProcessor【发布时间】:2020-03-0403:39:16【问题描述】:所以我尝试使用存储在Cosul中的键/值来覆盖... 查看详情

Spring Boot - 从 Application.properties 填充列表/集合?

】SpringBoot-从Application.properties填充列表/集合?【英文标题】:SpringBoot-PopulateList/CollectionfromApplication.properties?【发布时间】:2016-09-2921:03:19【问题描述】:这可能是一个愚蠢的问题,但是否可以在SpringBoot中从application.properties文... 查看详情

application.yml 中的 Spring Boot 日志设置

】application.yml中的SpringBoot日志设置【英文标题】:Springbootlogsettingsinapplication.yml【发布时间】:2019-10-2702:17:03【问题描述】:我正在构建一个SpringBoot应用程序。我使用logstash创建结构化日志,效果很好。但是,我正在尝试将以下... 查看详情

如何在spring-boot中添加多个application.properties文件?

】如何在spring-boot中添加多个application.properties文件?【英文标题】:Howtoaddmultipleapplication.propertiesfilesinspring-boot?【发布时间】:2016-01-1816:59:12【问题描述】:我有一个SpringBoot应用程序,它分为几个模块。主模块运行应用程序并... 查看详情

如何在 Spring-Boot 的生产过程中覆盖 application.properties?

】如何在Spring-Boot的生产过程中覆盖application.properties?【英文标题】:Howtooverrideapplication.propertiesduringproductioninSpring-Boot?【发布时间】:2014-06-2702:52:39【问题描述】:我正在使用springboot和application.properties在@Configuration@Profile("... 查看详情

Spring-boot Amazon Elastic Beanstalk 忽略“SPRING_APPLICATION_JSON”

】Spring-bootAmazonElasticBeanstalk忽略“SPRING_APPLICATION_JSON”【英文标题】:Spring-bootAmazonElasticBeanstalkignores\'SPRING_APPLICATION_JSON\'【发布时间】:2016-11-0713:52:23【问题描述】:我已尝试使用我的应用程序的jar和war版本,但无论我做什么,... 查看详情

Spring Boot 无法读取 Docker 中的 application.properties

】SpringBoot无法读取Docker中的application.properties【英文标题】:SpringBootcan\'treadapplication.propertiesinDocker【发布时间】:2017-08-3108:22:12【问题描述】:SpringBoot在Docker容器中运行时不会读取应用程序属性。我的application.ymlserver:port:8080con... 查看详情

无法集成测试 gradle 多模块 Spring-Boot-Application

】无法集成测试gradle多模块Spring-Boot-Application【英文标题】:Unabletointegration-testinggradlemulti-moduleSpring-Boot-Application【发布时间】:2020-10-0201:38:17【问题描述】:在Gradle多模块项目中,在其自己的模块中进行引导,我无法使用MockMvc... 查看详情

Spring Boot:Jackson 不会从“application.properties”中获取配置

】SpringBoot:Jackson不会从“application.properties”中获取配置【英文标题】:SpringBoot:Jacksonwon\'tpickupconfigurationfrom"application.properties"【发布时间】:2018-02-2505:03:42【问题描述】:我有一个基于Maven的多模块SpringBoot应用程序。在... 查看详情

根据环境变量设置 Spring Boot application.properties

】根据环境变量设置SpringBootapplication.properties【英文标题】:SetSpringBootapplication.propertiesbasedonEnvironmentVariable【发布时间】:2016-11-1503:50:48【问题描述】:我有一个SpringBoot应用程序,它将在各种环境中运行,并且根据它运行的环... 查看详情