Ibatis load properties file based on environment variables(Ibatis基于环境变量加载属性文件)
问题描述
我正在尝试重构一个旧的应用程序,以便一次构建它并将其部署到任何地方。我现在面临的问题是属性文件,ibatis无法理解任何环境变量的任何占位符。所以理论上我需要这样的东西:
<properties url="file:///${sys:catalina.home}/tools/apache-tomcat-8.5.70/data/tomapps/proj.properties"/>
类似于log4j2的内容可以理解:
<File name="LogToFile" fileName="${sys:catalina.home}/logs/proj.log">
好的,这就是背景。Log4j2理解这一点,但ibatis一点也不..甚至不是来自Linux的相对路径:~/specific/path
所以我看了一下这个:Using Environment variables in Mybatis properties file,如果您想将所有东西从XML样式转换到Java样式,这是一个很好的解决方案。
但在我的情况下,这是一个旧的应用程序,在XML文件中定义了许多映射器,我更愿意保持原样。
推荐答案
经过几天的反复,我似乎找到了一个将所有映射器保留在xml文件中的解决方案,这很棒!
第一件事是从我的sqlMapConfig.xml中删除属性行(加载所有ibatis配置的那行)。
和Java,而不是像这样加载配置:
Reader reader = Resources.getResourceAsReader("/resources/sqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
此更改设法从外部相对路径加载属性文件:
Reader reader = Resources.getResourceAsReader("/resources/sqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader, loadProperties());
其中,loadProperties()方法如下所示:
private static Properties loadProperties() throws IOException {
if (configProps == null) {
String catalinaHome = System.getProperty("catalina.home");
String url = "file:///${sys:catalina.home}/data/tomapps/proj.properties".replace("${sys:catalina.home}", catalinaHome);
configProps = new Properties();
try (InputStream is = new URL(url).openStream()) {
configProps.load(is);
}
}
return configProps;
}
这帮助我欺骗了ibatis来理解${sys:catalina.home}
。希望这对你也有帮助。编码快乐!
这篇关于Ibatis基于环境变量加载属性文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Ibatis基于环境变量加载属性文件


基础教程推荐
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 降序排序:Java Map 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01