MyBatis扫描通过VFS来实现
在Spring Boot中,由于是嵌套Jar,导致Mybatis默认的VFS实现DefaultVFS无法扫描嵌套Jar中的类。
说俗一点就是:你的项目要引入别人的jar包,别人的jar包也是有集成mybatis相关的xml文件内容的
解决办法,实现自定义的VFS,参考DefaultVFS增加对Spring Boot嵌套JAR的处理。
1:新建一个类SpringBootVfs
package com.tortoise.workflow.config; |
2:自定义Mybatis的配置信息类MybatisConfig
配置信息:
#数据库连接驱动类名 spring.datasource.driver-class-name = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://172.16.0.1:3306/portal?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false spring.datasource.username = root spring.datasource.password = 1234
|
package com.tortoise.workflow.config; import com.alibaba.druid.proxy.jdbc.DataSourceProxy; import com.zaxxer.hikari.HikariDataSource; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.io.VFS; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import javax.sql.DataSource; @Configuration @Slf4j public class MybatisConfig { @Value("${spring.datasource.url}") private String jdbcUrl; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driver_class_name}") private String driverClassName; /** * 配置数据源代理,用于事务回滚 * * @return The default datasource * @see DataSourceProxy */ @Primary @Bean("dataSource") @ConfigurationProperties("spring.datasource") public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(jdbcUrl); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setDriverClassName(driverClassName); return dataSource; } @Bean(name = "sqlSessionFactory") public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource") DataSource dataSource) { //解决myBatis下 不能嵌套jar文件的问题 VFS.addImplClass(SpringBootVfs.class); SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setTypeAliasesPackage("com.tortoise"); // 分页插件 //添加XML目录 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { // 添加插件 bean.setMapperLocations(resolver.getResources("classpath*:mapping/**/*.xml")); return bean.getObject(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } }
|
|