spring boot可以自定义properties吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot可以自定义properties吗相关的知识,希望对你有一定的参考价值。
参考技术A 1. 在application.properties中添加配置项比如说我在application.properties中添加了如下配置项:
# user privilege
privilege.assistor=assitor
privilege.admin=assistor_create,star_operate,requirement_dispatch,fee_return,fee_charge,expiration_set
privilege.superman=admin_create
依然可以通过@Value注解方便地获取到配置项的值:
@Value("$privilege.assistor") private String assistorPrivileges;
2. 使用新的配置文件
为了和其他默认配置项保持独立,我也可以新建一个privilege.properties的配置文件,然后将权限相关的配置内容放到这个文件里面:
privilege.properties
# user privilege
privilege.assistor=assitor
privilege.admin=assistor_create,star_operate,requirement_dispatch,fee_return,fee_charge,expiration_set
privilege.superman=admin_create
这个时候再使用@Value注解就拿不到配置项的值了。怎么办呢?我们可以新增相应的配置项类,在需要使用到配置项的地方直接注入使用。
Spring boot - Application.properties 中的自定义变量
【中文标题】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 团队。我所知道的是它应该开箱即用。我们没有太多需要调查的内容,请创建另一个线程以提供更多详细信息。
@StephaneNicoll :这是我刚刚发现的一个很棒的功能,我要感谢您和团队的其他成员为您在 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可以自定义properties吗的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot 的 properties 属性值配置 application.properties 与 自定义properties
25. Spring Boot使用自定义的properties从零开始学Spring Boot
spring boot 中属性注入,application.properties 自定义前缀以及使用properties 封装mysql