Java Spring boot 2.0-用户配置

Java Spring boot 2.0-用户配置,java,spring-boot,configuration,yaml,Java,Spring Boot,Configuration,Yaml,我有一个应用程序springboot 2,其中客户希望编辑整数值,它表示AutoGrowCollectionLimit的最大值。根据spring设置,该值默认为256,这对于我们的目的来说是不够的 设置属性的代码: @InitBinder public void initBinder(WebDataBinder binder) { binder.setAutoGrowCollectionLimit([configurable_number]); } 这个值应该可以在配置文件中配置,比如

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

设置属性的代码:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit([configurable_number]);
}
这个值应该可以在配置文件中配置,比如some.txt,它将作为txt文件发送到应用程序旁边。现在将一些.txt文件放在哪里并不重要,即使应用程序的根目录现在也可以

这意味着,作为一名客户,我能够轻松地改变它。打开一些.txt文件,将值从i.e.:256更改为i.e.:555

在调查过程中,我找到了。但它不适合我的情况。我要搜索的是一些.txt文件中的配置,具有非常简单的属性,即:

AutoGrowCollectionLimit=[可配置的\u编号]

根据spring的说法,我尝试了以下几点:

@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 injection来实现几乎所有这些方法

价值注入 要注入配置值,需要使用@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) { ... }
所有这些中的${}位都是使用。在本例中,${property}语法告诉Spring从上下文检索property的值,这是通过在上下文中的所有bean中查找属性来完成的。您也可以通过上下文自己执行此操作,例如:

ApplicationContext appCtx = ... ;
int port = appCtx.getEnvironment().getProperty("com.example.app.port", Integer.class);
使用@Value注释更方便,原因与使用@Autowired更方便相同

Spring引导配置 因为您使用的是Spring Boot,所以您的应用程序中已经有一些PropertySource实例。例如,application.yml文件作为PropertySource加载。请注意,Spring将把名为a.b.c的属性转换为YAML文件中的嵌套文档。在您的情况下,将设置为set.max.collectionLimit

Spring Boot通过查找application.yml和application.properties文件以及其他属性源(如)来实现这一点,并且可以找到Spring Boot查找这些属性的默认顺序

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

set.max.collectionLimit=555
您可以将此文件与.jar文件放在一起,并将其命名为application.properties。此文件中的任何值都将覆盖内部application.yml文件中的值

它们也可以,例如:

或通过系统属性:

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

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

这远远不是一个正确的问题。你应该先写一些代码。好的,我编辑了这个问题,现在好多了?好多了,是的。在等待问题重新打开时,请查看文档,特别是关于在类路径之外提供其他.yml或.properties文件的信息。
java -Dset.max.collectionLimit=555 -jar your-app.jar