我有一些遗留的罐子,我正试图在 spring 环境中工作。
在我的 applicationContext.xml 中,我使用以下方法加载属性文件:
<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />
...而且它在春季环境中完美运行。
在遗留代码中,我需要获取该配置文件的绝对路径,它应该在我运行mvn tomcat:run
时以及将其打包到 war 文件并部署到 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 Configuration(据我所见并基于依赖错误)来设置其配置,我正在寻找的是 Commons Configuration 加载正确的 application.properties 文件的方法,无论它是否在 Linux 上运行, Windows,来自 WAR 文件或来自嵌入式 Tomcat 等。