2018年总结

1.导入已存在的maven项目运行起来404

eclipse有几处设置应该用jdk目录里的jre; server设置里选择tomcat安装目录

2. 导入本地jar包

把这个jar包加在build path 下, 然后还需要在把jar包拷到WEB-INF/lib目录下

3. ssm引入spring task

spring的配置xml 加入

<task:annotation-driven scheduler="qbScheduler" mode="proxy"/> 
<task:scheduler id="qbScheduler" pool-size="10"/>  

做定时任务的类上加@Component。
@Scheduled的属性有: fixedDelay 上一个任务完成的间隔
fixedRate 上一个任务开始的间隔

4. springboot打包依赖本地项目

eclipse中在build path添加就ok,但需要package时候报错了,项目里之前的pom文件是:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                 <layout>ZIP</layout>
                <includes>
                    <include>
                        <!-- 本地项目的groupId artifactId -->
                    </include>
                </includes>
            </configuration>
            <!-- 省略 execution - repackage<-->
        </plugin>
    </plugins>
</build>

这样的话只会打包当前项目和include里的本地项目,直接执行jar会报错,必须把项目中依赖的其他jar包拷到lib目录下,执行 java -jar -Dloader.path="./lib" 当前项目package出来的.jar
百度了一下,<configuration>里 layout 必须是 ZIP的时候,用<excludeGroupIds> 可以配置需要忽略的依赖,这样可以起到瘦身的作用,打包更快,但我们这个项目并没有用<excludeGroupIds>啊,4月21日周六加到七点半终于搞明白了,<includes>会在打包的时候忽略所有依赖,只打包他里面配置的!!
讨论了一下,认为这种引入本地jar的方式是错误的,所以修改如下:
把<configuration>里的都去掉了
在<build>里加入

<resources>  
    <resource>  
        <directory>lib</directory>  
        <targetPath>BOOT-INF/lib/</targetPath>  
        <includes>  
            <include>**/*.jar</include>  
        </includes>  
    </resource>  
    <resource>  
        <directory>src/main/resources</directory>  
        <targetPath>BOOT-INF/classes/</targetPath>  
    </resource>  
</resources>   

然后还需要指定一下主类,可以在<properties>里加入

  <start-class>springboot 启动类名</start-class>

如上就是在需要引用本地项目jar包情况下的 两种打包方法:单独把别的依赖放在一个目录下;所有依赖都打包

5. spring boot返回本地图片

第一种做法:直接url请求静态文件

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(拦截的url).addResourceLocations(本地文件路径);
    }
}

第二种做法 :

public static String show(String pathAndName, HttpServletResponse response){
    File file = new File(pathAndName);
    if (file.exists()) {
        byte[] buffer = new byte[1024];
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        try {
            fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis);
            OutputStream os = response.getOutputStream();
            int i = bis.read(buffer);
            while (i != -1) {
                os.write(buffer, 0, i);
                i = bis.read(buffer);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // close
        }
    }
    return null;
}
6. 解决图片上传from-data里的乱码 (20180623)

springboot2.0.0下同时提交图片和实体类属性,会乱码,用了一天时间!
查询别人的解决方案:

spring:
    http:
        encoding:
            force: true
            charset: utf-8
            enabled: true
public class MvcConfig extends WebMvcConfigurerAdapter{
    @Bean
    public HttpMessageConverter<String> responseBodyConverter() {
        StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
        return converter;
    }
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        converters.add(responseBodyConverter());
    }
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.favorPathExtension(false);
    }
} 

但是没解决,发现WebMvcConfigurerAdapter Deprecated, 尝试换成WebMvcConfigurationSupport,乱码解决了但是会出现静态文件404,配置文件中spring.resources.static-locations失效,是因为自动配置类 WebMvcAutoConfiguration只有在缺失WebMvcConfigurationSupport类型的bean时才会生效,所以需要自己重写

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**/**").addResourceLocations("classpath:/static/").addResourceLocations("classpath:/static/")
            .addResourceLocations("classpath:/public/").addResourceLocations("classpath:/mapper/").addResourceLocations("file:" + uploadProperties.getPath());
        super.addResourceHandlers(registry);
    }

整整浪费了一天时间,对spring还是不了解,过段时间用空一定看文档,深入学习!

7. 生成的图片base64后返回给前端(20180806)

生成后可能会有 = 号补位,再给前端等于号会转成unicode导致无法解析图片

String base64Image= "data:image/jpeg;base64," + java.util.Base64.getEncoder().encodeToString(jpegOutputStream.toByteArray());
map.put("img", base64Image.replaceAll("=",""));
8. 上传照片文件
public static String uploadImage(MultipartFile file) throws UploadException {
        if (file  == null) {
            throw new UploadException("上传为空!");
        }
        String originalName = file.getOriginalFilename();
        if(!uploadProperty.getAcceptType().contains( file.getContentType())){
            throw new UploadException( originalName + " 类型错误");
        }
        if(file.getSize() / 1024 /1024 > uploadProperty.getMaxSize()) {
            throw new UploadException( originalName + " 超大");
        }       // String suffix = originalName.substring(originalName.lastIndexOf("."));
        String newName = generateImageName(6, originalName.substring(originalName.lastIndexOf(".")));
        File saveDir = new File(uploadProperty.getPath() + newName);
        try {
            file.transferTo(saveDir);
        } catch (IOException e) {
            e.printStackTrace(); throw new UploadException("保存错误!");
        }
        System.err.println(uploadProperty.getPath() + newName);
        return BaseConstant.SYS_STATIC_ROOT + "/" + newName;
    }

调用代码如下

@PostMapping(value="/application")
    public String addOne(JobApplication application, @RequestParam(value = "photoImg", required = false) MultipartFile photoImg){
        if (photoImg != null){
            try {
                application.setLinkPhoto(UploadUtil.uploadImage(photoImg));;
            } catch (UploadException e) {
                e.printStackTrace();
                return new JsonResult(null, "保存图片错误!").failure().toString();
            }
        }
    }
9. poi导出父子一对多结构的数据(合并单元格并居中)20180925

正常添加数据

HSSFRow row1 = sheet.createRow(rowNum);
row1.createCell(0).setCellValue(order.getOrderId());

合并单元格,并且居中

private void colspan(HSSFSheet sheet, int no, int beforeRowNum, int count, HSSFCellStyle style){
    for (int i = 0; i < no; i++){
        CellRangeAddress cra = new CellRangeAddress(beforeRowNum, count, i,i);//合并的起始行结束行起始列结束列
    sheet.addMergedRegion(cra);
    RegionUtil.setBorderTop(BorderStyle.THICK, cra, sheet);
    HSSFCell cell = sheet.getRow(beforeRowNum).getCell(i);
    cell.setCellStyle(style);
    }
}
10 . Lombok简化spring注入(20180927)

spring注入的三种方式:直接字段,构造方法,set方法。使用 Lombok可以如下简化:

@Service
@Transactional
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ProductService {
    //@Autowired
    private final ProductMapper productMapper; // 必须是final

    public Product getById(String id){
        return productMapper.getById(id);
    }
}
11 .springboot更新到2.1后数据库配置文件报错

因为2.1把mysql到驱动更新到8.0了。需要加上时区到信息

spring:
    datasource:
        url: jdbc:mysql://47.93.246.239:3306/redseft?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
        
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容