1

我创建了一个 Spring Boot 项目,其中包含一个名为 wmdl_app.properties 的属性文件,它位于 src/main/config 中,其中包含一些配置和一些凭据,需要根据项目运行的环境进行更改。我在 tomcat 文件夹->instance-config 中也有这个文件

似乎我为这个项目所做的配置是错误的,因为它不是从 Tomcat 中的 instance-config 文件夹中读取带有属性的文件,而是从 src/main/config 中读取文件。

为了使应用程序查看该文件的 instance-config 文件夹而不是类路径,我应该进行哪些更改?

我的 pom 包含对资源的引用,如果删除,会导致我的项目失败,因为它找不到属性文件和 log4j 配置 - 它们都放在 src/main/config

<resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
            </resource>
            <resource>
                <directory>${project.basedir}/src/main/config</directory>
            </resource>
        </resources>

包含对属性文件的引用的类,我在整个应用程序的其他任何地方都没有它:

@SpringBootApplication( scanBasePackages = {"com.db.wmdl.glue2g.*","com.db.wmdl.fo.service","com.db.wmdl.fo.persistence", "com.db.wmdl.fo.serversync"})
@PropertySource("classpath:wmdl_app.properties")
@EnableScheduling
public class Application {

    @PostConstruct
    public void init() throws IOException {
        LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
        context.setConfigLocation(new ClassPathResource("log4j-dl-fo-config.xml").getURI());
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

请告诉我应该更改什么以使其从 Tomcat 的 instance-config 文件中获取属性。

4

2 回答 2

0

本文提到了传入 spring.config.location 变量的可能性,该变量可用于指示 Spring Boot 应在何处查找资源。我不确定您是否可以同时拥有两者(JAR 中的属性加上外部的属性)。

于 2020-05-08T08:21:08.980 回答
0

根据代码

@PropertySource("classpath:wmdl_app.properties")

属性文件是从类路径中读取的。因此, src/main/resources 中的任何内容都将位于 JAR 中的类路径下。

@PropertySource(value = {"classpath:wmdl_app.properties", "file:/absolute/path/to/file"})

可用于直接从文件位置读取属性文件。

既然您提到它是项目运行的特定环境,您可以改为使用Spring 配置文件

因此你可以拥有 wmdl_app_dev.properties & wmdl_app_qa.properties

于 2020-05-08T11:27:26.560 回答