Spring Boot 从外部位置加载属性

vawmfj5a  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(113)

使用springboot 3.1.5,我需要将.properties文件保存在jar外部,因此我使用

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

字符串
这会毫无问题地找到application.properties。但是如果我将 another.properties文件添加到同一个目录,spring不会加载该文件。我如何告诉Spring加载该目录中的所有.properties文件,而不必手动列出它们
问候

wqsoz72f

wqsoz72f1#

您可以通过main方法以编程方式导入它们并将其设置为spring.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的建议,我指的是建立这个。

相关问题