Используйте файл свойств из папки tomcat вместо пути к классам - PullRequest
1 голос
/ 08 мая 2020

Я создал проект Spring Boot, который содержит файл свойств с именем wmdl_app.properties и находится в src / main / config с некоторыми конфигурациями и некоторыми учетными данными, которые необходимо изменить в зависимости от среды, в которой выполняется проект. У меня также есть этот файл в папке tomcat-> instance-config

Похоже, что конфигурация, которую я сделал для этого проекта, неверна, потому что вместо чтения файла со свойствами из папки instance-config в Tomcat он читает файл из 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.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Согласно коду

@PropertySource("classpath:wmdl_app.properties")

файл свойств читается из пути к классам. Таким образом, все, что находится внутри src / main / resources, попадет в путь к классам внутри JAR.

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

можно использовать для прямого чтения файла свойств из местоположения файла.

Поскольку вы упомянули, что это специфика среды c, в которой выполняется проект, вы можете вместо этого использовать профили Spring

Таким образом, вы можете иметь wmdl_app_dev.properties & wmdl_app_qa.properties

0 голосов
/ 08 мая 2020

В этой статье упоминается возможность передачи переменной spring.config.location, которая может использоваться, чтобы указать, где Spring Boot должен искать ресурсы. Я не уверен, что у вас может быть и то, и другое (свойства в JAR плюс свойства снаружи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...