ibatis根据环境变量加载属性文件
Ibatis load properties file based on environment variables
我正在尝试重构一个旧应用程序,以便构建一次并在任何地方部署它。我现在面临的问题是 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
所以我看了一下这个: ,如果您想将所有内容从 xml 样式切换到 java.[=14,这是一个很好的解决方案=]
但在我的例子中,这是一个旧应用程序,在 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;
}
所以这帮助我在理解 ${sys:catalina.home}
时欺骗了 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
所以我看了一下这个: 但在我的例子中,这是一个旧应用程序,在 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;
}
所以这帮助我在理解 ${sys:catalina.home}
时欺骗了 ibatis。希望这也会对你有所帮助。编码愉快!