Mybatis 的配置xml和properties放在jar包以外的一种方法
1.问题
开发时候,将xml和properties放resources,直接可以访问到,然而打包后这两个文件也一同被打包到jar包里面,如果发布后想修改就会比较麻烦,所以希望将xml配置文件和properties放在jar包以外来做,这样就可以动态来指定环境。
2.分析
我们查看sessionfactory的源码会发现,读取properties部分的代码是使用两种机制来做的。
一是:Resources.getResourceAsProperties(resource)
二是:Resources.getUrlAsProperties(url)
也就是可以使用URL的标准写法来做配置,比如xml的位置和mapper的xml的位置应该都可以这样来写。所以做一次尝试。
我们把用一个InputStream来读取mybatis的xml文件,作为输入,在这个xml中使用URL方式来定义数据的配置文件也就是properties,mapper也使用url方式来定义。
3.解决
我们将SqlSessionFactory的创建方法修改一下,变成类似如下的方式。
先从conf目录读取配置文件
File conf_file = new File(System.getProperty("user.dir")+"/conf/config.xml");
InputStream inputStream1 = new FileInputStream(conf_file);
//2.获取SqlSessionFactory 分别使用不同的环境来进行连接配置
sessionFactory_mysql_sys = new SqlSessionFactoryBuilder().build(inputStream1,"mysql_sys");
在将config.xml中的properties部分和mapper部分修改为使用url方式来加载。类似
就是要特别注意url中file://的写法就可以了。这样就可以将properties文件和mapper文件都定义在jar包以外了。
当然还可以使用更为负载的方法比如手工方法创建SqlSessionFactory,那样就解决的更为彻底,但是因为目前我的做法中还要引入一个spring来管理bean,改造显得稍稍麻烦了一些,这次就不介绍了。可以另起一篇来写一下。
更为彻底的解耦。
Mybatis 的配置xml和properties放在jar包以外的一种方法的更多相关文章
- jar包生制作几种方法,jar包导出三种方法:eclipse导出、jar命令、FatJar插件
Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFEST.MF”, 由于是打包引用了第三 ...
- IDEA第三方jar包引入的三种方法(专治IDEA2020.1.1的坑)
一: 二: 三:
- (转)如何在maven的pom.xml中添加本地jar包
1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...
- (转)如何在maven的pom.xml中添加本地jar包
转载自: https://www.cnblogs.com/lixuwu/p/5855031.html 1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下 ...
- eclipse中基于maven构建的web项目pom.xml中指定的jar包无法发布到tomcat中
eclipse运行maven web项目报错: 信息: Starting Servlet Engine: Apache Tomcat/7.0.57 一月 07, 2015 11:50:44 下午 or ...
- 只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找
只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找
- Android Studio导入第三方jar包或依赖工程的方法
Android Studio导入第三方jar包或依赖工程的方法 一 导入jar包的方法 1.打开自己的工程,将需要导入的jar包copy到libs文件夹下 2.在导入的jar包处单击菜单 Add ...
- Maven中解决jar包冲突的三种方式
首先我们在idea中创建一个maven工程,我们只关注pom.xml以及External Libraries中导入的jar包 导入spring-beans.jar <dependency> ...
- 读取xml文件转成List<T>对象的两种方法(附源码)
读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...
随机推荐
- ReLU为什么比Sigmoid效果好
附:双曲函数类似于常见的(也叫圆函数的)三角函数.基本双曲函数是双曲正弦"sinh",双曲余弦"cosh",从它们导出双曲正切"tanh" ...
- 吐嘈OpenCV的图像旋转功能 >_<7
實在出乎我的意料!OpenCV竟然連這么簡單的功能都沒有封裝!還要讓本大爺自己動手寫!強烈要求OpenCV下一個版本添加本功能! 函數功能和這個網頁一樣,只不過這個作者寫的太糟了,我把它變得簡潔了一點 ...
- Asp.Net MVC EF之二:原生EF插入,更新数据的正确方法
引言 EF是相对与Dapper.NHibernate官方首推的ORM框架,其在开发过程中的方便,快捷毋庸置疑的,但由于EF本身的一些缓存机制.跟踪机制,所以在使用时有些地方需要特别注意. 下面我将自己 ...
- XML hexadecimal value 0x__, is an invalid character
XML操作时异常:(十六进制值 0x__) 是无效的字符. 方法一: 设置 CheckCharacters=false. XmlReaderSettings xmlReaderSettings = n ...
- 【BZOJ2328】 [HNOI2011]赛车游戏
BZOJ2328 [HNOI2011]赛车游戏 前言 这道题目我真的佛了,卡精度+卡时间这就是下一个聊天鬼才. Solution 首先可以二分出最大速度,然后考虑下坡的话可能有更好的解,然后这样子算一 ...
- linux03
linux day31.正则表达式 \* ------重复0无数次 \+ ------重复1 无数次 ^ -------开头 $ -------结尾 | ------或 & ----- 与 ( ...
- Git错误日志--! [rejected]
当出现下面错误时 ,是因为和仓库两端版本不一致时,常见于刚创建仓库时,中只有readme文件的情况.执行下面的运行完毕之后.再push到仓库即可 ! [rejected] master -> m ...
- Android------------------RecyclerView学习
一.多种布局的保存 1.Type->getItemViewType(int position) 2.RecylerView.Holder : 定一个holder的内部类,里面保存一些 ...
- vue.js - 2
最近开发公司vue前端项目,做一下笔记,偶尔上来查漏补缺 组件操作: 使用flag标识符结合v-if和v-else切换组件 页面结构: <div id="app"> & ...
- Spring学习笔记3——消息队列(rabbitmq), 发送邮件
本节的内容是用户注册时,将邮箱地址先存入rabbitmq队列,之后返回给用户注册成功:之后消息队列的接收者从队列中获取消息,发送邮件给用户. 一.RabbitMQ介绍 如果之前对rabbitm ...