開發時候,將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