使用SpringBoot过程常见问题

    xiaoxiao2021-03-25  74

    1.springboot配置连接mysql数据库的时候报错: 报错信息如下:

    The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration

    原因是需要配置serverTimezone :

    数据库配置做如下修改:

    spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

    2.maven编译报错: 报错信息如下:

    java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags

    原因是原因是lombok版本太低 升级lombok版本即可,如下:

    <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> </dependency>

    3.maven编译报错: 报错信息如下:

    Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1

    原因是java的版本过高,设置java的编译版本为1.8即可

    4.springboot配置servlet报错: 报错信息如下:

    Error starting Tomcat context. Exception: java.lang.IllegalArgumentException. Message: Invalid <url-pattern> [servlet] in servlet mapping

    这是在配置ServletRegistrationBean的时候报的错,带入如下:

    @Bean public ServletRegistrationBean servletRegistrationBean(){ return new ServletRegistrationBean(new TestServlet(),"servlet"); }

    TestServlet是继承了HTTPServlet的配置类

    报错原因是所有的针对URL的修改都必须以 / 开始 将上面的代码中的servlet添加一个/前缀即可,如下:

    @Bean public ServletRegistrationBean servletRegistrationBean(){ return new ServletRegistrationBean(new TestServlet(),"/servlet"); }

    5.springboot配置Redis时报错:

    an attempt was made to call a method that does not exist. The attempt was made...

    这是maven依赖出现了错误,原因是springboot的Redis的starter依赖中自动导入的jedis版本和项目中使用的jedis版本不一致,有些jedis包的位置出现了变化,进而导致springboot在初始化jedis相关内容的时候,无法依赖到对应的包

    解决办法有两个,其一是将springboot的版本将下来,其二是将jedis的版本升级(需要改动jedis相关的代码)

    6.命令行启动服务: 在idea的左下角的Terminal工具,对应的是终端的命令行

    例如创建一个springboot项目,然后在此终端输入mvn spring-boot:run 这条mvn命令将使用springboot插件,然后使用嵌入式的tomcat服务器启动应用程序

    微服务实现的一个重点是分布于不同的物理机上的同一个服务的多个实例应该是完全相同的

    7.idea中新建项目下的webapp无法识别是web项目 是因为idea判断是否是web项目是根据pom.xml中的packing的值来判断的,只有packing的值为war的时候,才会自动识别module下的webapp为存储web页面的目录

    8.如何将一个模块项目改成多模块项目 1.将最外层的pom.xml里面的packing改成pom 2.创建一个新的模块,然后把最外层的src目录下的代码复制到新的模块下面,然后删除原来的src目录 3.在最外层的pom.xml里面使用dependencyManagement来管理整个项目的依赖(子模块依赖jar包的时候可以直接继承最外层定义的jar包版本,实现版本的统一)

    9.springboot依赖命名规则 springboot大多数采用starter(启动器,包含一些自动装配的Spring组件),官方命名规则是: springboot-starter-{name},业界或者民间:{name}-spring-boot-starter

    10.怎么把400改成200 使用HandlerInterceptor,可以处理response,例如: Integer status = response.getStatus(); if(status== HttpStatus.BAD_REQUEST.value()){ // BAD_REQUEST =400 response.setStatus(HttpStatus.OK.value()); }

    11.构建可执行jar包或者war包 位置:2017 springboot初体验

    12.spring验证方式 webFlux异步编程是趋势 (1)可以通过API的调用 Assert.hasText(user.getName(),“名称不能为空”); (2)通过JVM断言 assert user.getId() <=10000; 但是这两种方式都有一个问题,那就是对业务逻辑有影响,也就是这些判断都需要穿插在业务代码中(耦合了业务逻辑) (3)通过HandlerIntercepter(WebMVC)或者Filter做拦截,但是也是比较啰嗦的 (4)还可以通过AOP的方式,也可以提升代码的可读性 但是以上方式都不是统一的标准

    13.自定义配置类: 当我们需要在application.yml 或者application.properties 配置文件中定义自定义的配置的时候 我们需要用到注解@ConfigurationProperties 此注解声明了一个自定义的属性类,此类可以从配置文件中加载对应字段的值,这样就优雅的实现了代码从配置文件中读取配置的需求,如下所示:

    @ConfigurationProperties(value = "huoqishi") public class HqsProperties { private String device; private String wapUrl; }

    value和profix属性都可以指定自定义配置的前缀标识

    转载请注明原文地址: https://ju.6miu.com/read-34211.html

    最新回复(0)