当前位置: 首页 > news >正文

有关优化网站建设的书籍wordpress主题替换不彻底

有关优化网站建设的书籍,wordpress主题替换不彻底,直播软件哪个好,网站开发费用税转自#xff1a; https://blog.csdn.net/LOVELONG8808/article/details/78738086 由于项目已经发布到线上#xff0c;要是修改一个Mapper.xml文件的话#xff0c;需要重启整个服务#xff0c;这个是很耗时间的#xff0c;而且在一段时间内导致服务不可用#xff0c;严重…转自 https://blog.csdn.net/LOVELONG8808/article/details/78738086  由于项目已经发布到线上要是修改一个Mapper.xml文件的话需要重启整个服务这个是很耗时间的而且在一段时间内导致服务不可用严重影响用户的体验度。所以希望可以有一个机制可以当修改某个mapper.xml的时候只要重新加载这个mapper.xml就好了参考网上的一些资料和demo加上一些自己的总结下面的代码是通过测试的可以供你们参考和使用。 import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.builder.xml.XMLMapperBuilder; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; public class RefreshMapperCache { private Log log LogFactory.getLog(RefreshMapperCache.class); private SqlSessionFactory sqlSessionFactory; private Resource[] mapperLocations; private String packageSearchPath; private HashMapString, Long fileMapping new HashMapString, Long();// 记录文件是否变化 //记录发生改变的xml文件名称private ListString changeResourceNameList new ArrayList();public void refreshMapper() { try { Configuration configuration this.sqlSessionFactory.getConfiguration(); // step.1 扫描文件 try { this.scanMapperXml(); } catch (IOException e) { log.error(packageSearchPath扫描包路径配置错误); return; } // System.out.println(刷新前mapper中的内容 start); // //获取xml中的每个语句的名称即 id findUserById; // for (String name : configuration.getMappedStatementNames()) { // System.out.println(name); // } // System.out.println(刷新前mapper中的内容 end); //清空被修改过后的文件名称确保该集合是空的changeResourceNameList.clear();// step.2 判断是否有文件发生了变化 if (this.isChanged()) { // step.2.1 清理 this.removeConfig(configuration); // step.2.2 重新加载 for (Resource configLocation : mapperLocations) { try { //匹配被修改过的mapper文件如果存在则重新加载//如果想要重新加载全部mapper可以不匹配if(changeResourceNameList.contains(configLocation.getFilename())){XMLMapperBuilder xmlMapperBuilder new XMLMapperBuilder(configLocation.getInputStream(), configuration, configLocation.toString(), configuration.getSqlFragments()); xmlMapperBuilder.parse(); System.out.println(mapper文件[ configLocation.getFilename() ]缓存加载成功); }} catch (IOException e) { System.out.println(mapper文件[ configLocation.getFilename() ]不存在或内容格式不对); continue; } }//清空被修改过后的文件名称changeResourceNameList.clear();} // System.out.println(--------------------------刷新后mapper中的内容 start--------------------------); // for (String name : configuration.getMappedStatementNames()) { // System.out.println(name); // } // System.out.println(--------------------------刷新后mapper中的内容 end--------------------------); } catch (Exception e) { System.out.println(****************刷新缓存异常 e.getMessage());} } public void setPackageSearchPath(String packageSearchPath) { this.packageSearchPath packageSearchPath; } public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory sqlSessionFactory; } /** * 扫描xml文件所在的路径 * throws IOException */ private void scanMapperXml() throws IOException { this.mapperLocations new PathMatchingResourcePatternResolver().getResources(packageSearchPath); } /** * 清空Configuration中几个重要的缓存 * param configuration * throws Exception */ private void removeConfig(Configuration configuration) throws Exception { Class? classConfig configuration.getClass(); clearMap(classConfig, configuration, mappedStatements); clearMap(classConfig, configuration, caches); clearMap(classConfig, configuration, resultMaps); clearMap(classConfig, configuration, parameterMaps); clearMap(classConfig, configuration, keyGenerators); clearMap(classConfig, configuration, sqlFragments); clearSet(classConfig, configuration, loadedResources); } SuppressWarnings(rawtypes) private void clearMap(Class? classConfig, Configuration configuration, String fieldName) throws Exception { Field field classConfig.getDeclaredField(fieldName); field.setAccessible(true); Map mapConfig (Map) field.get(configuration); mapConfig.clear(); } SuppressWarnings(rawtypes) private void clearSet(Class? classConfig, Configuration configuration, String fieldName) throws Exception { Field field classConfig.getDeclaredField(fieldName); field.setAccessible(true); Set setConfig (Set) field.get(configuration); setConfig.clear(); } /** * 判断文件是否发生了变化 * param resource * return * throws IOException */ private boolean isChanged() throws IOException { boolean flag false; System.out.println(***************************获取文件名 开始************************************);for (Resource resource : mapperLocations) { String resourceName resource.getFilename(); System.out.println(resourceName resourceName, path resource.getURL().getPath());boolean addFlag !fileMapping.containsKey(resourceName);// 此为新增标识 // 修改文件:判断文件内容是否有变化 Long compareFrame fileMapping.get(resourceName); long lastFrame resource.contentLength() resource.lastModified(); boolean modifyFlag null ! compareFrame compareFrame.longValue() ! lastFrame;// 此为修改标识 if(addFlag){System.out.println( 新增了 resourceName);}if(modifyFlag){System.out.println( 修改了 resourceName);}// 新增或是修改时,存储文件 if(addFlag || modifyFlag) { fileMapping.put(resourceName, Long.valueOf(lastFrame));// 文件内容帧值 flag true; changeResourceNameList.add(resourceName);} } System.out.println(***************************获取文件名 结束************************************);return flag; } } 写一个实体类然后在spring中配置改实体类的bean即可   bean idrefreshMapperCache classcom.company.project.util.RefreshMapperCache !-- 扫描的映射mapper.xml的文件路径这个地方要注意mapper的文件多数据源情况下只能扫描自己数据源下的mapper,否则会报异常 --property namepackageSearchPath valueclasspath*:mapper/trade/**/*.xml/property!-- 配置自己的数据源 --property namesqlSessionFactory refsqlSessionFactoryPay/property /bean 由于我们公司使用的是多数据源所以在配置bean的时候要给每个数据源配置一个bean,注意点就是在配置bean的时候 1. 如果是多数据源的情况 ,  扫描mapper.xml文件的时候只能扫该数据源下的mapper.xml文件 2. 多数据源情况想设置sqlSessionFactory 的时候要设置为对应的数据源 3. 如果是但数据源的情况那么就简单了只需要配置当前数据源及对应的mapper.xml文件即可
http://www.zqtcl.cn/news/568807/

相关文章:

  • 网站建设go邢台集团网站建设报价
  • 哪个网站做appwordpress改成织梦
  • 重庆南岸营销型网站建设公司推荐o2o平台网站建设
  • 网站建设横向发展纵向发展贵阳网站建设外包
  • 网站建设的解决方案南京网站搜索排名
  • 网站怎么做背景衡阳网页定制
  • h5做网站用什么软件中英版网站系统
  • 汕头中英文网站推广wordpress取回密码收不到邮件
  • 外贸在线网站建站wordpress开放注册
  • 桂林餐饮兼职网站建设如何在百度上建网站
  • 怎样做免费网站的推广便宜点的网站空间
  • 中国建设部网站失信名单自己做公司网站难吗
  • 济南做网站需要多少钱园区网站到底怎么建设
  • 武清做网站的公司wordpress商城
  • 网站建设的实训技术总结sql 新建网站
  • 开发网站多少钱网站文件目录结构
  • 网站规划和建设的步骤做网站用的各种图标大全
  • 网站公司查询js代码网站大全
  • 湘潭网站建设价格最新新闻热点事件100字
  • 音乐网站程序源码wordpress模板中文版
  • 网站建设计划表wordpress主题 大
  • 在手机制作网站书店网站建设技术风险
  • 爱站网域名查询wordpress自定义标题关键词描述
  • 西安学校网站建设报价建盏
  • 网页 网站 区别东莞手机app开发
  • 空压机网站开发公司广州海珠区有什么好玩的景点
  • 什么网站可以做期货企业解决方案服务协议
  • 西安汽车网站制作手机软件制作网站平台
  • 微信的微网站介绍自己的家乡遵义网站建设
  • 爱站seo东莞网站建设要注意什么