• 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,改造显得稍稍麻烦了一些,这次就不介绍了。可以另起一篇来写一下。
    更为彻底的解耦。

  • 相关阅读:
    【产品】Pony三问
    【数据平台】阿里dataphin
    【数据中台】阿里数据中台架构
    关于 Qt 5,你所需要了解的基础知识
    Skynet 游戏服务器开发实战
    关于自然语言处理,有一本通关手册待接收
    ROS 机器人操作系统进阶实战
    面试官不讲武德,问我如何实现分布式缓存?
    高 star 开源项目来实验楼啦,深度学习强推教材
    Spring Boot 2.4.0 全新发布,还不快来实战
  • 原文地址:https://www.cnblogs.com/pcode/p/9202032.html
Copyright © 2020-2023  润新知