国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Mybatis熱加載Mapper.xml
import java.io.IOException;import java.lang.reflect.Field;import java.util.HashMap;import java.util.Map;import java.util.Set;import java.util.Timer;import java.util.TimerTask;import org.apache.ibatis.builder.xml.XMLMapperBuilder;import org.apache.ibatis.executor.ErrorContext;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.session.SqlSessionFactory;import org.springframework.beans.BeansException;import org.springframework.beans.factory.InitializingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.core.NestedIOException;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;public class MybatisMapperDynamicLoader implements InitializingBean, ApplicationContextAware {    private final HashMap<String, String> mappers = new HashMap<String, String>();    private volatile ConfigurableApplicationContext context = null;    private volatile Scanner scanner = null;    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        this.context = (ConfigurableApplicationContext) applicationContext;    }    @Override    public void afterPropertiesSet() throws Exception {        try {            scanner = new Scanner();            new Timer(true).schedule(new TimerTask() {                public void run() {                    try {                        if (scanner.isChanged()) {                            System.out.println("load mapper.xml");                            scanner.reloadXML();                        }                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }, 10 * 1000, 5 * 1000);        } catch (Exception e1) {            e1.printStackTrace();        }    }    @SuppressWarnings("unchecked")    class Scanner {        private static final String XML_RESOURCE_PATTERN = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "**/*Sql.xml";        private final ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();        public Scanner() throws IOException {            Resource[] resources = findResource();            if (resources != null) {                for (Resource resource : resources) {                    String key = resource.getURI().toString();                    String value = getMd(resource);                    mappers.put(key, value);                }            }        }        public void reloadXML() throws Exception {            SqlSessionFactory factory = context.getBean(SqlSessionFactory.class);            Configuration configuration = factory.getConfiguration();            removeConfig(configuration);            for (Resource resource : findResource()) {                try {                    XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(resource.getInputStream(), configuration, resource.toString(), configuration.getSqlFragments());                    xmlMapperBuilder.parse();                } finally {                    ErrorContext.instance().reset();                }            }        }        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");        }        private void clearMap(Class<?> classConfig, Configuration configuration, String fieldName) throws Exception {            Field field = classConfig.getDeclaredField(fieldName);            field.setAccessible(true);            ((Map) field.get(configuration)).clear();        }        private void clearSet(Class<?> classConfig, Configuration configuration, String fieldName) throws Exception {            Field field = classConfig.getDeclaredField(fieldName);            field.setAccessible(true);            ((Set) field.get(configuration)).clear();        }        public boolean isChanged() throws IOException {            boolean isChanged = false;            for (Resource resource : findResource()) {                String key = resource.getURI().toString();                String value = getMd(resource);                if (!value.equals(mappers.get(key))) {                    isChanged = true;                    mappers.put(key, value);                }            }            return isChanged;        }        private Resource[] findResource() throws IOException {            return resourcePatternResolver.getResources(XML_RESOURCE_PATTERN);        }        private String getMd(Resource resource) throws IOException {            return new StringBuilder().append(resource.contentLength()).append("-").append(resource.lastModified()).toString();        }    }}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MyBatis入門示例
MyBatis 簡(jiǎn)單入門
Hibernate 工具類
Hadoop HDFS文件操作的Java代碼
【大數(shù)據(jù)計(jì)算】(二) HBase 的安裝和基礎(chǔ)編程
java利用mybatis攔截器統(tǒng)計(jì)sql執(zhí)行時(shí)間示例
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服