当前位置: 首页 > 知识库问答 >
问题:

外部化Spring Boot资源的问题

钱志
2023-03-14

我试图将一些财产和资源外部化;具体来说,是一个属性文件和一个json文件

我有一个配置类:

@Configuration
@PropertySource("sheets.properties")
public class SheetsConfiguration {

    @Bean(name="sheets.secrets")
    public GoogleClientSecrets clientSecrets(GoogleClientSecretsFactory clientSecretsFactory, 
                                             @Value("${sheets.credentials.file}") String credentialFileName) {
        return clientSecretsFactory.buildWithResourceCredentials(credentialFileName);

        // which calls GoogleClientSecretsFactory.class.getResourceAsStream(credentialsFilePath);
        // ${sheets.credentials.file} should resolve to "/sheets.json"
    }

    //...
}

我的启动目录如下所示:

root@foobar:~/# ls ~ -al
total 34292
drwxr-xr-x 4 root root     4096 Mar  8 19:23 .
drwxr-xr-x 3 root root     4096 Mar  7 19:39 ..
-rw-r--r-- 1 root root 35086447 Mar  8 20:50 foo.jar
drwxr-xr-x 2 root root     4096 Mar  8 19:23 logs
-rw-r--r-- 1 root root      436 Mar  8 20:51 sheets.json
-rw-r--r-- 1 root root       91 Mar  8 20:51 sheets.properties

根据外部化配置的留档,我想应该是https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/html/boot-features-external-config.html

root@foobar:~/#java-jar~/foo.jar--spring.config.location=file:~/sheets.properties

root@foobar:~/#java-jar~/foo.jar--spring.config.additional位置=file:~/sheets.properties

root@foobar:~/#java-jar~/foo.jar--spring-config-name=应用程序,工作表--spring.config.location=file:~/

但每次:

2021-03-08 20:51:13,598 ERROR [org.springframework.boot.SpringApplication] Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [foo.Main]; nested exception is java.io.FileNotFoundException: class path resource [sheets.properties] cannot be opened because it does not exist
...
Caused by: java.io.FileNotFoundException: class path resource [sheets.properties] cannot be opened because it does not exist

如果资源与jar一起打包,那么一切都可以正常工作,但凭证信息显然应该外部化。

在包含spring boot的外部属性和资源时,我忽略了什么?

共有2个答案

牛华皓
2023-03-14
匿名用户

尝试以下操作

<代码>root@foobar:~/#java-jar ~/foo。jar——Spring。配置。名称=图纸。属性

默认情况下,Spring Boot会根据配置文件的位置覆盖它们。但是默认情况下,它会尝试将名称为application.propertiesapplication.yml的文件加载为属性文件。因为您有一个自定义属性文件,所以必须声明它。

至于文件位置。外部配置文件覆盖内部文件。因此,如果您的资源中有jar a<代码>表。属性当前目录中的外部文件将覆盖它。你不需要任何特殊的财产。

因此,如果您使用上述命令执行Jar,您当前目录中的属性文件将被加载。

查看以下链接以了解如何应用外部化配置,以及spring boot在默认情况下尝试从哪些目录加载属性。

Spring引导外部化属性

郑翰海
2023-03-14

在类中使用属性文件的绝对路径,如下所示:

@PropertySource("file:${FOO_PATH}sheets.properties")

然后在启动应用程序时设置其值:

java-jar-DFOO\u路径=/your/project/PATH/~/foo。jar

在windows上使用路径分隔符。

 类似资料:
  • Generators 相关文章 The Basics Of ES6 Generators By Kyle Simpson ES6 generators in depth By Axel Rauschmayer redux-saga 相关文章 Redux nowadays : From actions creators to sagas By Riad Benguella Managing Side

  • 全局配置 在 nuxt.config.js 中配置你想引用的资源文件: module.exports = { head: { script: [ { src: 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js' } ], link: [ { rel: 'style

  • 此页面包含来自 Booyant 和 linkerd 用户的关于 linkerd 的博客和谈话。 通过 Buoyant的博客 查看更多的帖子! 注: 详细列表请见原文(没有翻译的必要): https://linkerd.io/overview/external-resources/

  • 在springboot应用程序中,我有一个jar,然后是一个子目录config with application。属性,applicationContext。xml和log4j。。。属性文件。 我正在尝试外部化log4j配置。application.properties是这样外部化的。 但是,当springboot运行时,它使用jar文件中的log4j配置文件。通过使用-Dlog4j.debug选

  • 问题内容: 到目前为止,直到未模块化的Java,您只需将文件放入以确保它位于类路径中,然后使用 从classpath的几乎任何地方开始。 现在有了模块,地块变厚了。 我的项目设置如下: 配置文件放在里面。 项目运行于 由于主类不是位于我自己的项目中,而是位于外部框架模块中,因此看不到。现在的问题是,是否有办法以某种方式将我的配置文件放入模块或打开它?我是否必须更改框架上游加载文件的方式? 我尝试在

  • 我的项目设置如下: 配置文件放在中。 运行项目时使用 如何以最佳实用的方式实现这一点,使它能够像在Java8中一样工作,并且尽可能少的改动?