У меня есть несколько устаревших банок, которые я пытаюсь заставить работать в контексте весны.
Внутри моего applicationContext.xml я загружаю файлы свойств, используя:
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
... и он отлично работает в контексте весны.
В устаревшем коде мне нужно получить абсолютный путь к этому файлу (файлам) конфигурации, и он должен работать, когда я запускаю mvn tomcat:run
и когда он упакован в файл войны и развернут в контейнере Tomcat (если вам интересно, да , spring и устаревший код используют один и тот же файл конфигурации application.properties).
@Service
public class Startup {
Logger log = LoggerFactory.getLogger(Startup.class);
@PostConstruct
public void startup() throws Exception {
if (!LegacyCode.isInit()){
// this works using a hardcoded path
LegacyCode.init("/home/user/absolute/path/to/application.properties");
// this doesn't work, but would the preferred solution if it did
// LegacyCode.init("classpath*:META-INF/spring/*.properties");
}
}
}
Я рассматривал возможность использования:
String config[] = { "classpath*:META-INF/spring/applicationContext.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
а затем захватите путь, используя ctx.getResource, но, помимо того, что очень неэффективно загружать applicationContext второй раз только для того, чтобы получить абсолютный путь application.properties, это также вызовет бесконечный цикл выполнения @PostConstruct.
Устаревший код использует конфигурацию Commons (насколько я вижу и на основе ошибок зависимостей) для настройки своей конфигурации, я ищу способ для конфигурации Commons загрузить правильный файл application.properties независимо от того, работает ли он в Linux, Windows, из файла WAR или из встроенного Tomcat и т. д.