Spring Boot 2.0 - 用户配置

初学者

我有一个应用程序(springboot 2),客户希望在其中编辑整数值,该值代表 AutoGrowCollectionLimit 最大值的值。这个值默认(根据 spring docs)设置为 256,这对于我们的目的来说是不够的。

设置属性的代码:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit([configurable_number]);
}

这个值应该可以在配置文件中配置(比如 some.txt),它将作为一个 txt 文件发送到应用程序旁边。现在将 some.txt 文件放在哪里并不重要,即使是应用程序的 root 现在也可以。

这意味着,作为客户,我可以轻松更改它。打开 some.txt 文件并将值从 ie: 256 更改为 ie: 555。

在调查期间,我能够找到这一点但它不适合我的情况。我正在寻找的是 some.txt 文件中具有非常简单属性的配置,即:

AutoGrowCollectionLimit=[configurable_number]

根据 spring docs,我尝试了以下操作:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit(${set.max.collectionLimit});
}

并且还编辑了 [projectUrl]/src/main/resources/application.yml 如下:

set:
    max:
     collectionLimit: 500

当我尝试在以下位置调用此属性时,IDE 需要 ')' 或 '}':

binder.setAutoGrowCollectionLimit(${set.max.collectionLimit});

有人可以帮忙吗?

布赖恩

在 Spring Boot 中有多种创建外部化配置的方法,但您需要使用@Value注入来实现几乎所有这些。

价值注入

要注入您的配置值,您需要使用@Value注释。这可以在您可以使用的所有相同位置完成@Autowired例如,在一个属性上:

@Value("${com.example.app.host-name}")
private String hostName;

或者通过构造函数或方法:

@Value("${com.example.app.host-name}")
public void setHostName(String hostName) { ... }

或者在特定的构造函数或方法参数上:

public MyServiceBean(
        @Value("${com.example.app.host-name}") String hostName,
        @Value("${com.example.app.port}") int port) {
    ...
}

您还可以使用此系统使用:符号提供默认值,例如:

@Value("${com.example.app.port:8180}")
public void setPort(int port) { ... }

${}所有这些中位都使用Spring 表达式语言进行解释在这种情况下,${property}语法告诉 Springproperty从上下文中检索 的值,这是通过PropertySource在上下文中的所有bean 中查找属性来完成的您也可以Environment.getProperty通过上下文自己执行此操作,例如:

ApplicationContext appCtx = ... ;
int port = appCtx.getEnvironment().getProperty("com.example.app.port", Integer.class);

使用@Value注解更方便,原因与使用更方便一样@Autowired

Spring Boot 配置

由于您使用的是 Spring Boot,因此您PropertySource的应用程序中已经有一些实例。例如,您的application.yml文件加载为PropertySource. 请注意,Spring 会将名为的属性转换为a.b.cYAML 文件中的嵌套文档。在您的情况下,这将是set.max.collectionLimit.

Spring Boot 通过查找application.ymlapplication.properties文件以及其他属性源(如 )来完成此操作System.getProperties(),Spring Boot 如何查找这些属性的默认顺序可以在此处的文档中找到

外部配置

为了外部化您的配置,您声明您不想使用 .yml 文件,但是 .properties 呢?例如:

set.max.collectionLimit=555

您可以将此文件放在 .jar 文件旁边并将其命名为 .jar application.properties此文件中的任何值都将覆盖您在内部application.yml文件中的值

他们也可以直接在命令行上覆盖它,例如:

java -jar your-app.jar --set.max.collectionLimit=555

或通过System属性:

java -Dset.max.collectionLimit=555 -jar your-app.jar

所有这些都是覆盖值的有效方法,但前提是您使用值注入,例如通过@Value.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章