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

Spring boot应用程序特定的外部属性

史智志
2023-03-14

我正在寻找解决这个问题的方法。

我有几个属性文件(application.properties、application realdb.properties)。假设我从“realdb”spring概要文件开始。现在,我想在部署到tomcat上时重写我的属性。我决定将文件放在/lib文件夹中,因为它自动位于类路径上,我没有找到更好的(即特定于应用程序的类路径文件夹)

所以我可以在那里申请。属性,只要我只有一个应用程序,它就可以工作。如果我有多个spring boot应用程序,我想给文件命名(注意:特定于应用程序的命名)

>

  • 我可以使用app。特定的Spring轮廓并添加 /lib/application-appname.properies,其中包括传递正确轮廓的必要性

    我可以用Spring。配置。名称,我也不喜欢它,因为需要在命令行中传递它(我不知道在war文件中可以这样做,可能在spring boot主类中设置系统属性?)

    在@ConfigurationProperties(locations=“类路径:appname.properties,前缀…”中它按我所希望的方式工作,它被正确覆盖,但仅限于绑定值的类。

    总结:有没有办法在类路径上复制特定命名的文件,从而覆盖application.properties????

    我现在可以使用不同的属性名称,但在类路径外部加载文件时仍然存在问题。

    Adding [applicationConfig: [classpath:/my-app-realdb.properties]] PropertySource with search precedence immediately lower than [applicationConfigurationProperties]
    Adding [applicationConfig: [classpath:/config/my-app.properties]] PropertySource with search precedence immediately lower than [applicationConfig: [classpath:/my-app-realdb.properties]]
    Adding [applicationConfig: [classpath:/my-app.properties]] PropertySource with search precedence immediately lower than [applicationConfig: [classpath:/config/my-app.properties]]
    

    最后一个在。war,I quess/lib/config文件夹应具有优先权

    3. A classpath /config package
    4. The classpath root
    

    所以寻找答案的工作还在继续

    UPDATE2看起来顺序是

    1. /config/application-<profile_specific>.properties
    2. /application-<profile_specific>.properties
    3. /config/application.properties
    4. /application.properties
    

    这意味着我不能覆盖所有非配置文件特定的属性,这可能是预期的,但对我来说,如果我只想要一个文件来统治它们都不是很有用。

  • 共有1个答案

    许法
    2023-03-14

    您可以在主类中配置spring.config.name属性,可以在作为可执行存档运行时在main方法中配置,也可以在作为战争部署时在confiure方法中配置。例如:

    @SpringApplication
    public class SampleApplication extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(SampleApplication.class)
                .properties("spring.config.name:my-app");
        }
    
        public static void main(String[] args) throws Exception {
            new SpringApplicationBuilder(SampleApplication.class)
                .properties("spring.config.name:my-app").build().run(args);
        }
    
    }
    

    有了此更改,Boot将查找名为my app的文件。属性和我的应用程序{profile}。属性。

     类似资料:
    • 我正在开发一个spring boot应用程序 我想用外部文件(例如)重写中的某些属性。 我尝试了几种方法: 中的“我的应用程序.属性”中的 我使用对其进行了测试。第一个方法只添加了属性,但没有重写它们。

    • 问题内容: 我有一个Spring应用程序,到目前为止运行良好。现在,我希望属性文件位于外部配置文件夹中,而不是在打包的jar中,而无需重新打包即可更改内容。这就是我得到的: 问题答案: 如果将其放置在名为spring的目录中的类路径中的某个位置(相应地更改名称/目录),则可以使用 这将指向web-inf / classes / config / springcontext.properties

    • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

    • 完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。

    • 我正在将一个非常基本的web应用程序部署到Google应用程序引擎。我使用的是Springboot,我可以在本地很好地运行应用程序,但当我部署到Google时,应用程序引擎不会启动实例。我在启动时配置了一个云SQL数据源。 我有云sql配置属性配置src/main/Resources/application.properties.App Engine似乎找不到这些属性,所以它无法正确设置Cloud