BUG复现
在SpringBoot项目,重写MyBatis自动配置产生的SqlSessionFactoryBean
,在其中配置了类别名。
@Configuration
@MapperScan(basePackages = "springboot.o2ov1.dao")
public class MybatisConfiguration {
@Autowired
private MybatisProperties mybatisProperties;
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sfb = new SqlSessionFactoryBean();
sfb.setConfiguration(mybatisProperties.getConfiguration());
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
String[] mapperLocations = mybatisProperties.getMapperLocations();
// 缺陷:
// 这里只能支持通配符路径(只能是一个通配的Mapper),对于多个Mapper并没有映射
if (mapperLocations != null && mapperLocations.length == 1)
sfb.setMapperLocations(resolver.getResources(mapperLocations[0]));
sfb.setTypeAliasesPackage(mybatisProperties.getTypeAliasesPackage());
sfb.setDataSource(dataSource);
return sfb.getObject();
}
}
项目在idea中打包部署没有什么问题,但是当以java -jar xxx.jar
的形式独立部署的时候,就会抛出不能解析别名的异常。
Mybatis的SqlSessionFactoryBean
需要依赖于SpringBootVFS
sqlSessionFactoryBean.setVfs(SpringBootVFS.class);