奇葩错误整理

1.idea启动springboot项目报错

  • 报错信息
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/SpringApplication : Unsupported major.minor version 52.0
  • 解决方法
错误原因是springboot 的版本太高,不支持jdk1.7,解决方法有两种降低springboot版本,或者升级jdk版本到8

2.使用MySQL数据库查询数据的时候报错

  • 错误信息
    image.png
  • 解决方法
在springboot的yml文件中的url后边加上?serverTimezone=CTT

image.png

3. 使用HttpClient发起请求之后控制台报错

  • 错误信息
    image.png
  • 解决方法
这个问题百度了好一会才找到答案,原因是流的使用问题,在我的代码中使用了EntityUtils.toString(entity)两次。

image.png

4. 使用springboot,并且在resource文件夹下创建templates文件夹存放静态html文件,访问静态页面报错

  • 错误信息
    image.png
  • 解决方法,因为在resource文件夹下创建templates文件夹存放静态html文件,这里用到了thymeleaf,所以需要导入thymeleaf依赖
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

5. 使用jpa,数据库查询的时候报错

  • 错误信息
    image.png
  • 解决方法,需要在数据对应的实体类的id属性添加自增长
    image.png

6. 使用@ConfigurationProperties(prefix = "zcf")报错

  • 错误信息
    image.png
  • 解决方法,在pom.xml中添加一个依赖,
	<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
  • 并配置一个类,使用@EnableConfigurationProperties(SecurityProperties.class)
@Configuration
@EnableConfigurationProperties(SecurityProperties.class)
public class SecurityCoreConfig {

}

7. Linux上启动zookeeper报错,这个错差点给我心态直接搞崩。

  • 错误信息
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
  • 解决方法
从目前的最新版本3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。

8. 关于StringUtils的使用问题

  • 之前一直没有搞清楚StringUtils.isBlank()和StringUtils.isEmpty()两者的区别,翻了下源码才有所了解。
     * StringUtils.isBlank(null)      = true
     * StringUtils.isBlank("")        = true
     * StringUtils.isBlank(" ")       = true
     * StringUtils.isBlank("bob")     = false
     * StringUtils.isBlank("  bob  ") = false
     * StringUtils.isNotEmpty(null)      = false
     * StringUtils.isNotEmpty("")        = false
     * StringUtils.isNotEmpty(" ")       = true
     * StringUtils.isNotEmpty("bob")     = true
     * StringUtils.isNotEmpty("  bob  ") = true

  • 两者对比来可以看出来isEmpty()只要是字符串的长度为空都为空。而isBlank()会判断字符串是否由空白字符组成。

9. 使用Integer和int的误区

public static void main(String[] args) {
        Integer i = 100;
        Integer j = 100;
        System.out.println(i == j);             //----true
        System.out.println(i.equals(j));        //----true  
    }

  • 众所周知==比较的内存地址,i和j两个很明显是两个不同的对象,那么为啥会相等呢?看看接下来代码。
public static void main(String[] args) {
        Integer i = 128;
        Integer j = 128;
        System.out.println(i == j);             //----false
        System.out.println(i.equals(j));        //----true
    }

  • 为啥这两个又不相等了呢?再看看接下来代码。
public static void main(String[] args) {
        Integer i = 127;
        Integer j = 127;
        System.out.println(i == j);             //----true
        System.out.println(i.equals(j));        //----true
    }

  • 很明显存在一个临界值,当不超过这个临界值的时候i和j两个对象会被认为是同一个对象。这个域就是{-127,+127}。这在Integer类中的源码中有说到。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×