jar启动遇到的问题
1,TypeAliasesPackage失效
虽然设置了: sqlSessionFactory.setTypeAliasesPackage("com.onloon.b2b.sdk.entity;com.onloon.b2b.sdk.query");
JAR启动的时候报错:XML中CurrencyDO类找不到!
解决:使用虚拟文件系统加载文件
sqlSessionFactory.setVfs(SpringBootVFS.class); //加在sqlSessionFactory最前面!
2,classpath下文件找不到
推荐使用Thread.currentThread().getContextClassLoader().getResourceAsStream方式获取文件!
①,如果是在static代码块中使用Thread.currentThread().getContextClassLoader().getResourceAsStream方式获取文件
②,不是在static代码块中使用new ClassPathResource方式获取文件;
③,sqlSessionFactory中获取mapper*.xml使用new PathMatchingResourcePatternResolver方式获取文件,注意classpath后面有个*符号!
比如: sqlSessionFactory.setMapperLocations(resolver.getResources("classpath*:*mapper*.xml"));
sqlSessionFactory.setMapperLocations(resolver.getResources("classpath:*mapper*.xml"));
excelTemplateFile = ResourceUtils.getFile("classpath:template/excel/quotationTemplate.xlsx");
解决:classpath后面加*
改成:
sqlSessionFactory.setMapperLocations(resolver.getResources("classpath*:*mapper*.xml"));
excelTemplateFile = ResourceUtils.getFile("classpath*:template/excel/quotationTemplate.xlsx");
参考:https://www.cnblogs.com/qiyebao/p/12467367.html
读取文件的四种方式:
①,开发环境(IDE中)和生产环境(linux部署成jar包)都可以读取到
ClassPathResource classPathResource = new ClassPathResource("excleTemplate/test.xlsx"); InputStream inputStream =classPathResource.getInputStream();
②,开发环境(IDE中)和生产环境(linux部署成jar包)都可以读取到
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excleTemplate/test.xlsx");
③,开发环境(IDE中)和生产环境(linux部署成jar包)都可以读取到
InputStream inputStream = this.getClass().getResourceAsStream("/excleTemplate/test.xlsx");
④,开发环境 时可以读取到,生产环境读取失败。
File file = ResourceUtils.getFile("classpath:excleTemplate/test.xlsx"); InputStream inputStream = new FileInputStream(file);