从外部位置加载属性

Loading Properties from external location

提问人:user497087 提问时间:11/10/2023 更新时间:11/12/2023 访问量:30

问:

使用 springboot 3.1.5,我需要将 .properties 文件保留在 jar 外部,所以我用

java -jar --spring.config.location=file:path/to/directory/

这将找到 Application.Properties,没有问题。但是,如果我将另一个.properties文件添加到同一目录,spring不会加载该文件。如何告诉Spring加载该目录中的所有.properties文件,而不必手动列出它们

问候

spring-boot 属性

评论

1赞 seenukarthi 11/10/2023
docs.spring.io/spring-boot/docs/current/reference/html/......可能会有所帮助

答:

0赞 phuongnq1995 11/12/2023 #1

您可以通过方法以编程方式导入它们并将它们设置为 ,这是一个演示。mainspring.config.import

@SpringBootApplication
public class ServiceParentApplication {

    public static void main(String[] args) {
        Arrays.stream(args)
            .filter(arg -> arg.startsWith("--spring.config.location=file:")) // Incase you read folder application.properties via args
            .map(arg -> arg.replace("--spring.config.location=file:", ""))
            .findFirst()
            .ifPresent(folder -> {
                try (Stream<Path> paths = Files.walk(Paths.get(folder))) {
                    var importFiles = paths
                        .filter(Files::isRegularFile)
                        .map(file -> file.toString())
                        .filter(fileName -> fileName.endsWith("properties") || fileName.endsWith("properties") && !fileName.endsWith("application.properties"))
                            .map(fileName -> "optional:file:" + fileName)
                            .collect(Collectors.joining(";"));
                    System.setProperty("spring.config.import", importFiles);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            });

        SpringApplication.run(ServiceParentApplication.class, args);
    }

这是 可选位置 的文档。此外,如果不使用文件作为附加导入,则可以首选配置树来导入每个变量的每个文件。.properties

谢谢@seenukarthi的建议,我指的是构建这个。