博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sping Boot集成MyBatis打包成jar时,找不到类的问题
阅读量:6804 次
发布时间:2019-06-26

本文共 3321 字,大约阅读时间需要 11 分钟。

  hot3.png

MyBatis扫描通过VFS来实现

在Spring Boot中,由于是嵌套Jar,导致Mybatis默认的VFS实现DefaultVFS无法扫描嵌套Jar中的类。

解决办法,实现自定义的VFS,参考DefaultVFS增加对Spring Boot嵌套JAR的处理。

1。

import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;import java.util.jar.JarEntry;import java.util.jar.JarInputStream;import org.springframework.util.ResourceUtils;import lombok.extern.slf4j.Slf4j;import net.sourceforge.stripes.vfs.DefaultVFS;@Slf4jpublic class SpringBootVfs extends DefaultVFS {	@Override	protected URL findJarForResource(URL url) throws MalformedURLException {		url = ResourceUtils.extractJarFileURL(url);		return (isJar(url)) ? url : null;	}		@Override	protected boolean isJar(URL url) {		return url.getPath().toLowerCase().endsWith(ResourceUtils.JAR_FILE_EXTENSION)				|| url.getPath().toLowerCase().endsWith(".war");	}	/**	 * List the names of the entries in the given {@link JarInputStream} that	 * begin with the specified {@code path}. Entries will match with or without	 * a leading slash.	 * 	 * @param jar The JAR input stream	 * @param path The leading path to match	 * @return The names of all the matching entries	 * @throws IOException If I/O errors occur	 */	@Override	protected List
listResources(JarInputStream jar, String path) throws IOException { // Include the leading and trailing slash when matching names if (!path.startsWith("/")) path = "/" + path; if (!path.endsWith("/")) path = path + "/"; // Iterate over the entries and collect those that begin with the // requested path List
resources = new ArrayList
(); for (JarEntry entry; (entry = jar.getNextJarEntry()) != null;) { if (!entry.isDirectory()) { // Add leading slash if it's missing String name = entry.getName(); if (!name.startsWith("/")) name = "/" + name; // Check file name if (name.startsWith(path) || name.startsWith("/WEB-INF/classes" + path)) { log.trace("Found resource: ", name); resources.add(name.substring(1)); // Trim leading slash } } } return resources; }}

2在创建sqlSessionFactoryBean时

 加入

VFS.addImplClass(SpringBootVFS.class);
@Bean(name = "sqlSessionFactory")    public SqlSessionFactory sqlSessionFactoryBean() {    	//解决myBatis下 不能嵌套jar文件的问题    	VFS.addImplClass(SpringBootVFS.class);        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setTypeAliasesPackage("org.weichai");        // 分页插件        PageHelper pageHelper = new PageHelper();        Properties props = new Properties();        props.setProperty("reasonable", "true");        props.setProperty("supportMethodsArguments", "true");        props.setProperty("returnPageInfo", "check");        props.setProperty("params", "count=countSql");        pageHelper.setProperties(props);        //添加XML目录        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        try {        	  // 添加插件            bean.setPlugins(new Interceptor[] { pageHelper });            bean.setMapperLocations(resolver.getResources("classpath*:mapper/**/*.xml"));            return bean.getObject();        } catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e);        }    }

 

转载于:https://my.oschina.net/wwh/blog/849418

你可能感兴趣的文章
IO异常处理方式
查看>>
Date的用法
查看>>
Juniper SRX 初级配置教程
查看>>
java代码获取pdf文件第一页作为封面缩略图
查看>>
gluLookAt()
查看>>
MySQL 和Swap Memory
查看>>
python读取大文件
查看>>
百度官方WordPress收录插件
查看>>
gitlab 的 CI/CD 配置管理 (二)
查看>>
you may safely reboot your system
查看>>
SCP报错
查看>>
mysql(六)
查看>>
安保方案
查看>>
【设计模式与Android】状态模式——一个人的两幅面孔
查看>>
linux 日期时间计算
查看>>
华为93系统交换机配置跨×××路由和跨×××策略路由
查看>>
无限极分类,把子集数组压到父集数组的一个子项下面,用于在前台模板更好的循环显示...
查看>>
Axis --SOAP引擎
查看>>
解决XenDesktop启动后无法加载picagina.dll文件
查看>>
linux进程管理、任务管理
查看>>