使用SpringBoot过程常见问题

本文档汇总了SpringBoot开发过程中常见的配置问题及其解决方法,包括数据库连接配置、Maven编译错误、Servlet配置错误等,并介绍了如何构建可执行的Jar包、自定义配置类等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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属性都可以指定自定义配置的前缀标识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值