springboot项目遇到的BUG

1、在JPA插入时,前台误传ID,数据库若有ID,后台将变为修改。若无将是新增。
2、日期类型接收:
pom新增:

 <!--日期转换需要的jar-->
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
            <version>2.9.2</version>
        </dependency>

yaml配置文件新增:

#全局时间格式定义
spring: 
   jackson:
       date-format: yyyy-MM-dd HH:mm:ss

局部属性在实体类上使用@JSONFormat("yyyy-MM-dd")来指定日期格式。

3、吐槽一个JPA里的问题:我一同事在JPA的repository里写了方法,未调用,然后上传。导致我处理了半天,注销了他的代码后,发现一下就好了。才发现这是随手写的一个方法,且没有@query。

4、在结合redis存储时,报错如下(只截取了主要部分):

java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [com.zz.lb.xx.cc.entity.vineVo.xxVo]

报错大意为这个要存储到redis中的类需要序列化。

5、全局日志的拦截:
本全局日志从Spring4.1以后可以使用。其作用就是修改响应内容。

package com.kindo.vine.filter;

import com.kindo.vine.common.OperationContentLog;
import com.kindo.vine.common.OperationLog;
import com.kindo.vine.utils.JsonUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/**
 * Created by lingbao on 2017/11/20.
 *
 * @author lingbao
 * @Description
 * @Modify
 */
@ControllerAdvice
public class LogAdvice implements ResponseBodyAdvice {

    Logger logger = LoggerFactory.getLogger(LogAdvice.class);

    @Override
    public boolean supports(MethodParameter methodParameter, Class aClass) {
        //所有经过GetMapping的注解都不会进行日志记录
        if (null != methodParameter.getMethodAnnotation(GetMapping.class)) {
            return false;
        }
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {

        try {

            HttpServletRequest request = ((ServletServerHttpRequest) serverHttpRequest).getServletRequest();

            if (!RequestMethod.GET.toString().equals(request.getMethod())) {

                String log = request.getParameter("log");
                if (StringUtils.isNotBlank(log)) {
                    logger.info("记录日志:"+log);
                } else
                    logger.error(request.getServletPath() + "日志为空!");
            }
        } catch (Exception e) {
            logger.error("记录日志错误", e);
        }

        return o;
    }
}

6、前后端分离远程调用:

import com.kindo.vine.common.Constant;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.web.filter.OncePerRequestFilter;


import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Configuration
@WebFilter
public class CorsFilter extends OncePerRequestFilter {


    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        response.addHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE,OPTIONS");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type");
        response.addHeader("Access-Control-Max-Age", "1800");//30 min
        response.setHeader("Access-Control-Allow-Credentials","true");
        filterChain.doFilter(request, response);
    }
}

其中request.getHeader("Origin")动态获取远程请求的地址。

redis错误:
java.io.InvalidClassException是redis转换类错误。序列化错误!
解决办法:
在类中实现序列化,添加private static final long serialVersionUID = 5720718939199613394L;,然后清除redis缓存(flushall)。


springboot+ElasticSearch5.6遇到的BUG:
错误:availableProcessors is already set to [4], rejecting [4]
解决:System.setProperty("es.set.netty.runtime.available.processors", "false");

    private Settings settings(){
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        Settings settings = Settings.builder()
                .put("cluster.name",clusterName)
                .put("client.transport.sniff",true)
                .build();
        client = new PreBuiltTransportClient(settings);
        return settings;
    }

springboot 2.0.0.BUILD-SNAPSHOT版本:
针对于实体,主键要有(strategy = GenerationType.IDENTITY)。否则会报错,测试数据库为MySQL。(报错内容为:Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.kindo.lily.entity.Medicine)

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

JPA错误:
自级联时,如果父节点ID为null,在保存时,会报错。
错误内容:

 Data was not saved: object references an unsaved transient instance - save the transient instance before flushing

解决:手动将父节点id为null的节点设置为null(setParent(null))。


elasticsearch
报错内容:NamedWriteable [org.elasticsearch.index.query.QueryBuilder][parent_id] is already registered for...
诊断:缺少Jar包。
解决:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>5.6.0</version>
</dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.0</version>
        </dependency>

2.0.0.BUILD-SNAPSHOT版本中,因为当初版本仓库不稳定,所以出现启动错误(错误已经不能复原了,大意是netty4 transport error)。导致启动失败。折腾了很久很久,最后研究出来了。所以不稳定的版本少用!!!!

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.elasticsearch.plugin</groupId>
                    <artifactId>transport-netty4-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty4-client</artifactId>
            <version>5.5.3</version>
        </dependency>

boot版本是2.0.0:注入一个@FeignClient 的调用客户端,报错说为null注入失败。最后发现是swagger的版本太低,调至2.6.1了(2.5.x以上)。


错误内容:Cannot create binder factory, noMETA-INF/spring.bindersresources found on the classpath
修复:没有rabbitmq。添加依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

配置:

spring: 
    rabbitmq: #RabbitMQ相关的配置
        host: localhost
        port: 5672
        username: guest
        password: guest

其中rabbitmq的java端口就是5672,而web端口为15672。使用自带用户名。


在配置cloud时,尽量不要使用{}之类的来表示某个配置信息,如{server.port},会出现There is no known eureka server; cluster server list is empty错误。
解决:写上具体的值就好了。


Tomcat启动地址冲突:(来自慕课网,未验证)

搜索8080端口的进程,最后一列为pid

netstat -aon|findstr ":8080"

杀掉pid为1234的进程

taskkill /F /pid 1234

以下为本文所参考的地址:

全局日志拦截参考地址:http://blog.csdn.net/u012852374/article/details/53837156

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

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,733评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 序 又到了写年终总结的时候了。每当这个时候思绪总是翻江倒海,因为太久没有反思和总结的缘故,一年才总结一次,确实是有...
    go4it阅读 516评论 1 6
  • 夜灯在不打开 床上的书没有人读 蜷缩着让出位置 来到的都是苦难 我的身躯无处安放 只好睡醒 让灵魂睡上一夜 我成了...
    一1027阅读 241评论 0 2
  • 作者:11 冷月无声作品:天下无骗 点评: 1.标题直接 对于当下热点,我们的散发性思维总是有各种角度,这个看似平...
    尚武三宝阅读 142评论 0 1