gpt4 book ai didi

java - 在 Spring 上下文中查找 *.properties 文件的绝对路径

转载 作者:行者123 更新时间:2023-11-28 22:12:28 26 4
gpt4 key购买 nike

我有一些遗留 jar,我正试图在 spring 上下文中工作。

在我的 applicationContext.xml 中,我使用以下方式加载属性文件:

<context:property-placeholder location="classpath*:META-INF/spring/*.properties" />

...并且它在 spring 上下文中完美运行。

在遗留代码中,我需要获取该配置文件的绝对路径,当我运行 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劫持路径,但是除了为了获取application.properties的绝对路径而第二次加载applicationContext效率很低之外,还会导致@PostConstruct的死循环被处决。

遗留代码使用 Commons Configuration(据我所知并基于依赖性错误)来设置其配置,我正在寻找的是 Commons Configuration 加载正确的 application.properties 文件的方法,无论它是否正在运行在 Linux、Windows 上,来自 WAR 文件或来自嵌入式 Tomcat 等。

最佳答案

看来您的 legacyCode 想要一个正确的文件路径,并且不了解 Spring 资源 ("classpath*:META-INF/spring/applicationContext.xml")

我个人会做以下事情:

LegacyCode.init(new File(this.getClass().getClassLoader().getResource("application.properties").toURI()).getPath());

getResource("application.properties") 是 Spring 表示法的 Java 等价物

关于java - 在 Spring 上下文中查找 *.properties 文件的绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com