问题汇总

  • 1. 虚拟机
  • 1.1 CentOS7
  • 1) 连不上网络
  • 问题
  • 解决
  • 1.2 Docker
  • 1) 私服配置无法重启docker
  • 问题
  • 解决
  • 后续
  • 2. SSMP
  • 2.1 Spring
  • 1) 测试类一直空指针
  • 问题
  • 解决
  • 2.2 MyBatis MyBatis-Plus
  • 1) IDEA加入方言后SQL语句依然不提示
  • 解决
  • 2) MP更新数据,更新了其他列
  • 问题
  • 解决
  • 3.SpringBoot
  • 3.1 Thymeleaf
  • 1) th:onclike传入多个参数会报错
  • 2) SpringBoot 使用 `java -jar` 打包运行时Thymeleaf Engine报错500
  • 4. MySQL
  • 1) 存入时间,时间总是提前8小时
  • 5. Maven
  • 1)Maven打包时出现There are test failures错误
  • 6.ElasticSearch
  • 1) ES部署到Linux上一直无法启动
  • 原因一
  • 原因二


1. 虚拟机

1.1 CentOS7

1) 连不上网络

问题

修改虚拟机内存或核心或有时候开机会连不上网络

解决

java项目中utils java项目中遇到的问题_java

service NetworkManager stop
service network restart

1)service network restart 重启连接网络,若失败的话,执行第二条
2)service NetworkManager stop 3)重新执行第一条,会发现网络连上,并分配了IP地址

1.2 Docker

1) 私服配置无法重启docker

问题

配置完Docker私服信任后,重启docker报错

[root@localhost qiuyu]# systemctl start docker
Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details.
To force a start use "systemctl reset-failed docker.service" followed by "systemctl start docker.service" again.
解决

将/etc/docker/ 下的 daemon.json 改为 daemon.conf

重启docker,解决!

后续

还是得改回json格式,否者后面上传镜像无法读取到

2. SSMP

2.1 Spring

1) 测试类一直空指针

问题

使用了Mybatis-Plus

自动装配Dao接口,自动装配失败,得到空指针

java项目中utils java项目中遇到的问题_开发语言_02

解决

使用 @RunWith(SpringRunner.class) 先开启Spring

2.2 MyBatis MyBatis-Plus

1) IDEA加入方言后SQL语句依然不提示

解决

https://mybatis.org/dtd/mybatis-3-mapper.dtd

改为http://mybatis.org/dtd/mybatis-3-mapper.dtd

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.qiuyu.dao.UserMapper">
    <select id="selectByName" parameterType="string" resultType="User">
        select * from community.user where username = #{username}
    </select>

</mapper>

2) MP更新数据,更新了其他列

问题

如果Bean中使用了基本数据类型,比如下面的userid,默认会赋0

@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginTicket {
    private int id;
    private int userId;
    private String ticket;
    private int status;
    private Date expired;
}

在进行更新时,本来只想更新状态的,userid也会被更新为0

public void logout(String ticket){
    LoginTicket loginTicket = new LoginTicket();
    loginTicket.setStatus(1);
    loginTicketMapper.update(loginTicket,new LambdaUpdateWrapper<LoginTicket>().eq(LoginTicket::getTicket,ticket));
}
解决

Bean中别使用基本数据类型,使用装箱类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginTicket {
    private Integer id;
    private Integer userId;
    private String ticket;
    private Integer status;
    private Date expired;

}

3.SpringBoot

3.1 Thymeleaf

1) th:onclike传入多个参数会报错

<a href="javascript:;"   th:onclick="|like(this,1,${post.id},${post.userId})|">

这是Thymeleaff防止注入

解决

  1. 定义多个th:data-*
<a href="javascript:;"  th:data-id="${post.id}" th:data-userId="${post.userId}"
   th:onclick="|like(this,1,this.getAttribute('data-id'),this.getAttribute('data-userId'))|">
  1. ||去掉,用[[ ]]将参数包围
<a href="javascript:;"   th:onclick="like(this,1,[[${post.id}]],[[${post.userId}]])">

2) SpringBoot 使用 java -jar 打包运行时Thymeleaf Engine报错500

Error resolving template [/index], template might not exist or might not be accessible by any of the configured Template Resolvers

打包时不能在站点前面不能使用/

java项目中utils java项目中遇到的问题_docker_03

去掉/后不会报错500


java项目中utils java项目中遇到的问题_docker_04

4. MySQL

1) 存入时间,时间总是提前8小时

将配置中的时区进行修改

把UTC改为上海时区

url: jdbc:mysql://localhost:3307/community?serverTimezone=Asia/Shanghai&useSSL=false

5. Maven

1)Maven打包时出现There are test failures错误

禁止掉测试就行

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
    </plugins>
</build>

6.ElasticSearch

1) ES部署到Linux上一直无法启动

9200端口可以访问,但是 ElasticSearch的实体类无法被映射,导致ES无法启动

原因一

MySQL在Windows中是不区分大小写的,在Linux中区分大小,所以需要把Linux中的大小写敏感去掉

尝试过去修改/etc/mysql/…/my.cnf

但是因为这时候容器已经初始化完毕了,所以mysql会无法启动

最终解决==> docker运行容器的时候 加上 --lower-case-table-names=1

docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=qiuyu \
-p 3306:3306 \
-v /opt/docker/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /opt/docker/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25 --lower-case-table-names=1

原因二

MySQL在高版本中需要加入时区和SSL设置,缺一不可

serverTimezone=Asia/Shanghai&useSSL=false