报错集合.md 15 KB

报错集合

image-20231121111617698

无法解析值“${file.path}”中的占位符“file.path”

Could not resolve placeholder 'file.path' in value "${file.path}"

SpringBoot启动项目时报错:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: 

Error creating bean with name 'msgReceiver': 

Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: 

Could not resolve placeholder 'file.post-url' in value "${file.post-url}"

还是一样,遇到SpringBoot启动报错,从最后看起,很明显这里是在msgReceiver中因为找不到file.post-url的定义。

查看MsgReceiver的代码:

    @Value("${file.post-url}")

	private String postUrl; 

问题就出在这里,这里将配置文件里的file.post-url的值赋给了postUrl,但是SpringBoot启动时,没有在配置文件application.yml(application.properties)中找到关于file:post-url:(file.post-url=)的定义。

可以去查看一下,有没有这个定义,没有加上即可。

笔者遇到的问题是,配置文件中有相关定义,但是启动依然报错。这是因为生成的Class文件中配置没有及时被更新,可以右键项目,找到Maven—>Reload Project、右键项目->Reload From Disk以及Build标签下的Build Project来刷新项目代码和重新build来解决。这三个操作是解决代码和生成的class文件不匹配的三板斧,遇到此类问题都可以这样操作。

找不到注册的bean

@Repository

@mapper注解也行,推荐上面这个

Java中与MySQL中的DATETIME类型相对应的是java.sql.Timestamp类

java.sql.Timestamp是从java.util.Date继承的,它精确到毫秒,并且可以存储MySQL DATETIME类型所表示的日期和时间信息。

baseMapper.insert 能够直接插入数据到数据库中,是因为它是基于某个 ORM(对象关系映射)框架---MyBatis Plus

baseMapper.insert();

这些框架在内部使用了 JDBC(Java 数据库连接)来与数据库进行交互,它们提供了更高级别的抽象,使得开发者可以使用对象模型来操作数据库,而不需要编写繁琐的 SQL 语句。

具体来说,当你在代码中使用 baseMapper.insert 方法时,ORM 框架会根据你提供的对象自动生成相应的 SQL 插入语句,并执行该语句来将数据插入到数据库中。这个过程是自动的,你不需要手动编写 SQL 语句或连接数据库。

此外,baseMapper 类通常是由框架根据数据库表和 Java 类的映射关系自动生成的。在映射关系中,你可以定义表名、列名和 Java 类属性之间的对应关系,这样框架就可以根据这些映射关系来生成正确的 SQL 语句。

错误提示是在尝试将一个字符串(String)类型的值转换为HttpServletRequest类型时出现的。由于字符串类型和HttpServletRequest类型之间没有直接的转换方法

ERROR:Failed to convert value of type 'java.lang.String' to required type 'javax.servlet.http.HttpServletRequest'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'javax.servlet.http.HttpServletRequest': no matching editors or conversion strategy found

解决:

@RequestHeader("appKey") String appKey)

保证字段唯一性

@Column(unique = true)

作用实体类上,可以保证数据库层面字段的唯一性

  1. 在后端控制器(Controller)中,接收前端传入的参数。
  2. 利用参数查询数据库,检查该字段的值是否已经存在。可以使用JPA、MyBatis等ORM框架进行数据库操作,或使用JDBC进行原生SQL查询。
  3. 如果查询结果返回了已存在的记录,表示该字段的值已经存在,可以做出相应的处理,例如返回错误提示信息给前端。
  4. 如果查询结果为空,表示该字段的值是唯一的,可以继续进行后续操作。

直接通过前端传过来的数据进行对比:

if ((dataStHistoryMapper.checkPackNo(dataStHistory.getPackNo())).size() > 0) {
    throw new BusinessException("订单编号已存在!请再次核对");

xml中SQL语句:

<select id="checkPackNo" resultType="com.usky.park.domain.DataStHistory">
    <if test="packNo != null">
        SELECT *
        FROM data_st_history
        WHERE pack_no = #{packNo}
    </if>
</select>

idea删除了xxx.iml文件

import提示cannot resolve symbol‘xxx‘

所有引用都爆红,pom文件不报错

没用:刷新一下Maven Project就会自动生成.iml文件

解决:在缺少.iml文件项目下运行mvn idea:module;然后再重启

image-20231204174512707

image-20231204174552588

再不行就手动粘贴到本地

提示:SpringBoot Configuration Annotation Processor not configured

方案1

如果您正在使用Maven,请确保在您的pom.xml文件中添加以下依赖项:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
这将会启用Spring Boot的配置处理器。

方案2

在您的IDE中,确保您的项目的Annotation Processor已经被启用。
对于IntelliJ IDEA,
请转到"Settings > Build, Execution, Deployment > Compiler > Annotation Processors",
并确保"Enable annotation processing"选项已经被勾选。

方案3

如果您正在使用Gradle,请确保在您的build.gradle文件中添加以下依赖项:
dependencies {
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
}
这将会启用Spring Boot的配置处理器。

方案4

如果您的IDE中没有默认启用Annotation Processor,您可以手动配置它。
对于IntelliJ IDEA,请在"Settings > Build, Execution, 
Deployment > Compiler > Annotation Processors"中,
添加一个新的Annotation Processor配置,
将"-proc:only"添加到"Command line arguments"中,
并在"Processor path"中添加Spring Boot的配置处理器
(即spring-boot-configuration-processor)。

方案5

清除并重新构建

对于Maven项目,您可以运行mvn clean install命令;

对于Gradle项目,您可以运行gradle clean build命令。

项目idea运行正常,jar包运行报错

java -jar -Dfile.encoding=UTF-8 service-fire-biz.jar

Zero date value prohibited

Caused by: org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'clsj' from result set. Cause: java.sql.SQLException: Zero date value prohibited ; Zero date value prohibited; nested exception is java.sql.SQLException: Zero date value prohibited

在数据库URL后面添加参数zeroDateTimeBehavior=convertToNull来处理零日期时间

1jdbc:mysql://your_host:port/your_database?serverTimezone=UTC&zeroDateTimeBehavior=convertToNull

导入数据保持旧表id

image-20240201175319356

@TableId(value = "id", type = IdType.AUTO)
改成
@TableId(value = "id", type = IdType.INPUT)

usky

Internal system error-NullPointerException-null:空指针异常

image-20231205095900754

image-20231205100217105

image-20231205095925813

定位问题在fire模块里的PatrolInspectionAreaServiceImpl中的add、update

image-20231205100527569

image-20231205100538224

image-20231205100543806

image-20231205100549879

image-20231205100616941

image-20231205100626384

返回时间格式有误:2023-12-09T13:20:20

image-20231214141349359

正确格式:2023-12-09 13:20:20

image-20231214141410241

在实体类属性上添加注解:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

sql函数格式化

image-20231215154054534

直接转为格式化字符串

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
for (Map<String, Object> deviceStatus : deviceStatusList) {
    LocalDateTime alarmTime = (LocalDateTime) deviceStatus.get("alarm_time");
    String formattedTime = alarmTime.format(formatter);
    deviceStatus.put("alarm_time", formattedTime);
}

插入以后直接获取id

xml文件添加:

<insert id="insertOperlog" parameterType="com.usky.system.domain.SysOperLog"
			useGeneratedKeys="true" keyProperty="operId">

达梦数据库

要使用命令行方式启动和初始化达梦数据库,您可以按照以下步骤进行操作:

  1. 打开终端或SSH会话,登录到Linux系统中的用户账户(具有足够权限的用户)。

  2. 进入达梦数据库的安装目录。默认情况下,达梦数据库安装在/opt/dmdbms目录下。您可以使用以下命令进入该目录:

   cd /opt/dmdbms
  1. 使用以下命令启动达梦数据库:
   ./bin/dmdbms

如果需要以后台模式启动,可以使用以下命令:

   ./bin/dmdbms -b

注意:启动数据库可能需要一些时间,请耐心等待。

  1. 接下来,您需要初始化达梦数据库。使用以下命令进行初始化:
   ./bin/dminit

初始化过程中,系统会提示您输入管理员密码和确认密码。请根据提示进行操作。

  1. 初始化完成后,您可以使用达梦数据库的命令行工具(dm命令)进行进一步的操作。例如,使用以下命令登录到达梦数据库:
   ./bin/dm -U用户名 -P密码 -D数据库名

替换"用户名"、"密码"和"数据库名"为您的实际信息。

以上就是在Linux系统中使用命令行方式启动和初始化达梦数据库的步骤。请确保您已经正确安装了达梦数据库并具有足够的权限来执行这些操作。

[dmdba@xfjyzd-xfglyjjy-app dmdbms]$ ./bin/dminit

./bin/dminit: error while loading shared libraries: libdmnsort.so: cannot open shared object file: No such file or directory

这个错误提示表明在运行./bin/dminit命令时,系统无法找到所需的共享库文件libdmnsort.so。共享库文件是一些可重用的代码和功能库,用于程序的运行。

解决此错误的方法是确保libdmnsort.so库文件存在,并且可以被正确地加载。您可以按照以下步骤进行操作:

  1. 检查库文件路径:确认libdmnsort.so库文件是否存在于所需的路径中。您可以通过使用ls命令来查看库文件是否存在,例如:

    ls /path/to/libdmnsort.so
    

    如果文件不存在,请确保您具有适当的权限,并根据您的安装情况,可能需要重新安装或配置达梦数据库软件。

  2. 配置库文件路径:如果库文件存在于其他位置,您可以尝试将其路径添加到系统的库文件搜索路径中。可以通过export命令来设置LD_LIBRARY_PATH环境变量,并将库文件路径添加到其中,例如:

    export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH
    

    然后再次运行./bin/dminit命令。

如果以上步骤无法解决问题,建议您参考达梦数据库的官方文档或联系他们的技术支持团队以获取更详细的帮助。

执行数据库实例配置(新进入到达梦数据库的命令行目录/home/dmdba/dmdbms/bin): [dmdba@test bin]$ ./dminit initdb V8 db version: 0x7000c file dm.key not found, use default license! License will expire on 2022-07-09 input system dir: /home/dmdba/dmdbms/data/ input db name: DMOA input port num: 5234 input page size(4, 8, 16, 32): 32 input extent size(16, 32, 64): 64 input sec priv mode(0, 1, 2): 0 input time zone(-12:59,+14:00): +08:00 string case sensitive? ([Y]es, [N]o): 0 which charset to use? (0[GB18030], 1[UTF-8], 2[EUC-KR]): 1 length in char? ([Y]es, [N]o): 0 enable database encrypt? ([Y]es, [N]o): 0 input slice size(0, 512, 4096): 4096 page check mode? (0/1/2): 0 input elog path: only create huge table with delta? (0/1): 0 rlog generate for huge? (0/1): 0 pseg_mgr_flag (0/1): 0 auto_overwrite mode? (0/1/2): 2 CHARACTER type fixed storage ? ([Y]es/1, [N]o/0): 0 SQL log forbid ? ([Y]es/1, [N]o/0): 0 Normal of FAST Normal of DEFAULT Normal of RECYCLE Normal of KEEP Normal of ROLL

log file path: /home/dmdba/dmdbms/data/DMOA/DMOA01.log

log file path: /home/dmdba/dmdbms/data/DMOA/DMOA02.log

write to dir [/home/dmdba/dmdbms/data/DMOA]. create dm database success. 2021-12-25 23:54:27

3、启动数据库实例: [dmdba@test bin]$ ./DmServiceDMSERVER start Starting DmServiceDMSERVER: [ OK ] [dmdba@test bin]$ [dmdba@test bin]$

initdb V8

db version: 0x7000c

file dm.key not found, use default license!

License will expire on 2022-07-09

input system dir: /usr/local/DM8/data/

input db name: ceweidb

input port num: 5236

input page size(4, 8, 16, 32): 32

input extent size(16, 32, 64): 64

input sec priv mode(0, 1, 2): 0

input time zone(-12:59,+14:00): +08:00

string case sensitive? ([Y]es, [N]o): n

which charset to use? (0[GB18030], 1[UTF-8], 2[EUC-KR]): 1

length in char? ([Y]es, [N]o): y

enable database encrypt? ([Y]es, [N]o): n

input slice size(0, 512, 4096): 0

page check mode? (0/1/2): 0

input elog path: /usr/local/DM8/logs

only create huge table with delta? (0/1): 0

rlog generate for huge? (0/1): 0

pseg_mgr_flag (0/1): 0

auto_overwrite mode? (0/1/2): 0

CHARACTER type fixed storage ? ([Y]es/1, [N]o/0): 0

SQL log forbid ? ([Y]es/1, [N]o/0): 0

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

log file path: /usr/local/DM8/data/ceweidb/ceweidb01.log

log file path: /usr/local/DM8/data/ceweidb/ceweidb02.log

write to dir [/usr/local/DM8/data/ceweidb].

create dm database success. 2021-12-25 23:54:27

ls /home/dm8/data/DMDB/dm.ini