开发时候,将xml和properties放resources,直接能够访问到,然而打包后这两个文件也一同被打包到jar包里面,若是发布后想修改就会比较麻烦,因此但愿将xml配置文件和properties放在jar包之外来作,这样就能够动态来指定环境。mysql
咱们查看sessionfactory的源码会发现,读取properties部分的代码是使用两种机制来作的。
一是:Resources.getResourceAsProperties(resource)
二是:Resources.getUrlAsProperties(url)
也就是可使用URL的标准写法来作配置,好比xml的位置和mapper的xml的位置应该均可以这样来写。因此作一次尝试。
咱们把用一个InputStream来读取mybatis的xml文件,做为输入,在这个xml中使用URL方式来定义数据的配置文件也就是properties,mapper也使用url方式来定义。spring
咱们将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,改造显得稍稍麻烦了一些,此次就不介绍了。能够另起一篇来写一下。
更为完全的解耦。sql