学习编程过程中遇到的问题,以及解决方法(持续更新)

(1)类加载异常 : 提示ClassNotFoundException 后边跟自己写的包名类名

//提示这样的错误 , 可能是你的包名写错了
Exception in thread "main" java.lang.ClassNotFoundException: com.siche.javaweb.domain.Person

(2)提示 IllegalAccessException 非法访问异常

//提示这样的错误 , 是 非法的访问异常
Exception in thread "main" java.lang.IllegalAccessException: class com.sichen.javaweb.Persontest cannot access a member of class com.sichen.javaweb.Person with modifiers "private"
//需要设置 暴力反射 

(3)CMD提示编码GBK的不可映射字符

解决办法:

方法一:带上编码utf-8,运行命令:javac -encoding utf-8 HelloWorld.java,

结果,同目录下出现HelloWorld.class文件,编译成功!

方法二:用记事本另存为ANSII编码格式的,直接运行命令:javac HelloWorld.java

出现对应的class文件,成功!

(4)严重: testWhileIdle is true, validationQuery not set 使用Druid连接池报错处理

声明;使用的JDK9, MYSQL8版本数据库,1.0.9Druid的jar包;

使用druid-1.0.9.jar ,报错如下;

这两行报错,是因为没有SpringBoot框架xml配置,在不使用框架的情况下;怎么解决呢;

①先解决第一行报错;严重: testWhileIdle is true, validationQuery not set 原来properties文件配置如下;

driverClassName = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
username = root
password = root

在properties配置文件下添加一些配置;

filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200

附上一些名词解释;

validationQuery = "SELECT 1"  
#验证连接是否可用,使用的SQL语句

testWhileIdle = "true"      
#指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.

testOnBorrow = "false"   
#借出连接时不要测试,否则很影响性能

timeBetweenEvictionRunsMillis = "30000"  
#每30秒运行一次空闲连接回收器

minEvictableIdleTimeMillis = "1800000"  
#池中的连接空闲30分钟后被回收,默认值就是30分钟。

numTestsPerEvictionRun="3" 
#在每次空闲连接回收器线程(如果有)运行时检查的连接数量,默认值就是3.

解释:

配置timeBetweenEvictionRunsMillis = "30000"后,每30秒运行一次空闲连接回收器(独立线程)。并每次检查3个连接,如果连接空闲时间超过30分钟就销毁。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接,维护数量不少于minIdle,过行了新老更替。

testWhileIdle = "true" 表示每30秒,取出3条连接,使用validationQuery = "SELECT 1" 中的SQL进行测试 ,测试不成功就销毁连接。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接。

testOnBorrow = "false" 一定要配置,因为它的默认值是true。false表示每次从连接池中取出连接时,不需要执行validationQuery = "SELECT 1" 中的SQL进行测试。若配置为true,对性能有非常大的影响,性能会下降7-10倍。所在一定要配置为false.

每30秒,取出numTestsPerEvictionRun条连接(本例是3,也是默认值),发出"SELECT 1" SQL语句进行测试 ,测试过的连接不算是“被使用”了,还算是空闲的。连接空闲30分钟后会被销毁

(5)使用xml文件出现 error on line 24 at column 9: Extra content at the end of the document

1643376023250

问题原因 : 未解决 (可能是和编码有关的问题)


(6)tomcat服务器出现java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException

出现这个原因是因为WEB-INF目录下的lib中没有放jar包导致的

在使用maven导入jar包后,在项目结构中 选择Artifacts , 选择工件 , 如图所示 , 将依赖导入到lib目录下 , 刷新即可 ,

1643651206573


(7)数据库5之后 , 出现问题 , 在url后边加一句 (在配置文件中也是如此)

?serverTimezone=UTC 

img


(8)项目中无法快速创建Servlet类

打开项目结构 --> Facets -->

在你想创建servlet的目录前勾选上

注意 : 如果没有这个选项 , 先看看是不是文件类型没有标记? 去设置一下就可以了

1643696853991

这就是创建之后的servlet

1643696954495


(9)Tomcat服务器关闭之后 , 不生成SESSIONS.ser文件

打开Tomcat服务器根目录下的 conf文件夹

找到context.xml文件 打开

1643811843547

将这行的代码复制出来 保存即可


(10)maven导入JSTL依赖出现异常

(1)类转换异常 : 未能加载或实例化TagLibraryValidator类

org.apache.jasper.JasperException: 未能加载或实例化TagLibraryValidator类:[org.apache.taglibs.standard.tlv.JstlCoreTLV]

原因 : 1643899883762

没有导入依赖 standard jar 包导致的

完整的依赖是 (老版本 , javax包下的)

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl -->
    <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>jstl-impl</artifactId>
      <version>1.2</version>
      <scope>runtime</scope>
    </dependency>

新版本 : (jakarta包下的)只用导入一个就可以了

<!-- jstl-api -->
<dependency>    
    <groupId>jakarta.servlet.jsp.jstl</groupId>    
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>    
    <version>2.0.0</version>
</dependency>

(2)如果出现 <%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %> 爆红的概况

可能是因为没有导入standard包的相关依赖导致的

<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>

(3)java.lang.NoClassDefFoundError: (类定义未找到异常)javax/servlet/jsp/tagext/TagLibraryValidator

出现错误主要就是jar没有导完全 ,

使用jstl所需要的jar共有 :

<!-- servlet.jsp-api -->
<dependency>    
    <groupId>jakarta.servlet.jsp</groupId>    
    <artifactId>jakarta.servlet.jsp-api</artifactId>    
    <version>3.0.0</version>
</dependency>
<!-- servlet-api -->
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>
<!-- jstl-api -->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- jstl -->
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>
<!--standard-impl-->
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
<!--standard-spec-->
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>

(12)ClassCastException 类转换异常


(13)解决idea 中的Tomcat log 控制台中文乱码问题

在Tomcat 服务器的根目录中 的 conf文件夹中找到 : logging.properties 文件 , 将其中的

语言设置和idea默认的编码一样即可 :

1644138361905


(14)端口被占用:

致,( Port 8080 … is already in use)
解决方法:

  • ①修改端口号(当然不建议这么做) Tomcat根目录/conf/Server.xml中修改,这里就不提了吧…
  • ②关闭被占用的端口进程:到dos窗口(计算机开始里的查找中输入cmd)
    • 中输入 netstat -ano|findstr 8080 (8080是被占用的端口号,哪个被占用输入哪个)
    • 回车后可以看到有正在使用的进程
    • 再输入 taskkill /pid 8080 /f (这里的8080是正在使用的进程信息中最后一个数字编号)
    • 回车后会显示已结束进程,然后重新启动tomcat即可。
  • ③进入tomcat根目录的bin文件夹,双击shutdown.bat,可以关闭所有占用端口。

(15)使用Redis闪退 :

第一次运行redis-server出现闪退的情况:

 [51756] 09 Dec 11:10:05.518 # Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。

依次执行以下命令即可

 redis-cli.exe
 shutdown   
 exit
 redis-server.exe redis.windows.conf

注意: 只用出现logo的时候才是启动成功


(16)解决控制台出现日志类不能加载异常

异常提示 :

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
上面的意思是,在运行时,你没有做日志的实现(或者说日志的绑定),所以slf4j简简单单的使用了一个什么也不会做的空实现。

解决方法 :

在maven中添加一个简单(simple)的实现,这个实现根本不需要任何配置!只要回到pom.xml然后添加如下配置

<!-- slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.8.0-beta2</version>
</dependency>
<!-- slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.8.0-beta2</version>
</dependency>
<!-- slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.5.3</version>
</dependency>

(17)使用redis访问localhost出现连接失败情况

原因:

redis在默认情况下是设置的有保护措施的

首先在配置文件中redis.windows.conf中有这样一条配置

bind 127.0.0.1

这个选项就是指定谁可以连接“我”,可以指定一个或者多个ip,如果不指定,则可以被任意主机所连接。默认只能被自己主机上的redis-cli 连接。如果你确定想被任何主机连接,那么直接将这一行注释掉即可。也就是说我们想让哪台主机连接redis服务器,就需要在redis服务器的配置文件的bind命令后面加上这台主机的IP地址。

还有一个 : 保护模式 :

Protected-mode yes(no)

如果这里选择yes (保护模式打开)

  • 但是服务器为指定bind命令
  • 或是没有配置密码

那么服务器就只会接受来自巡回地址 127.0.0.1和 : : 1 的链接 , 或者Unix域名套接字 (localhost也不能链接)

所以我们如果想让特定的主机连接我们的redis服务器有以下几种方式:

(1)打开保护模式 指定bind 命令的主机ip 并配置连接密码requirepass
(2)关闭保护模式 指定bind 命令的主机ip 并配置连接密码requirepass
(3)关闭保护模式 指定bind 命令的主机ip 不配置连接密码requirepass
(4)关闭保护模式 不指定bind 命令的主机ip 不配置连接密码requirepass


(18)Java HotSpot™ 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

翻译过来就是:

Java HotSpot(TM)64位服务器虚拟机警告:共享仅支持引导加载程序类,因为已附加引导程序类路径

解决方案:

打开设置,在搜索框内输入:async,然后去掉以下勾选即可

1644992725374


(19)出现NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED’

这个问题是因为jdk版本和tomcat服务器版本不一致导致的 , 虽然不影响运行 , 但是看着难受 , 目前为找到解决办法


(20)解决出现线程未关闭 , 造成内存泄漏问题

16-Feb-2022 16:38:24.978 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [Redis] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。

16-Feb-2022 16:38:24.979 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [Redis] 注册了JDBC驱动程序 [com.mysql.cj.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。

16-Feb-2022 16:38:24.981 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[Redis]似乎启动了一个名为[commons-pool-evictor]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[

解决方法 :

设置监听器 , 在服务器注销的时候运行下边这句话即可

AbandonedConnectionCleanupThread.uncheckedShutdown();
//断开连接 , 清理线程

它的来源是 : com.mysql.cj.jdbc

使用 :

添加一个监听类 : 即可

package cn.sichen.util;
import com.alibaba.druid.pool.DruidDataSource;
import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;
import redis.clients.jedis.JedisPool;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
@WebListener()
public class ContextFinalizerListener implements ServletContextListener {
    public ContextFinalizerListener() {
    }
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        /* This method is called when the servlet context is initialized(when the Web application is deployed). */
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        /* This method is called when the servlet Context is undeployed or Application Server shuts down. */
        //注销驱动
        DruidDataSource druidDataSource= (DruidDataSource) JDBCUtils.getDataSource();
        druidDataSource.close();
        System.out.println("关闭DruidDataSource连接池对象");

        JedisPool jedisPool = JedisPoolUtils.getJedisPool();
        jedisPool.close();
        System.out.println("关闭jedisPool连接池对象");
        try {
            Enumeration<Driver> drivers = DriverManager.getDrivers();
            while(drivers.hasMoreElements()){
                DriverManager.deregisterDriver(drivers.nextElement());
                System.out.println("解除注册");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            AbandonedConnectionCleanupThread.checkedShutdown();
            System.out.println("关闭 Abandoned 线程");
        } catch (Exception e) {
            System.out.println("ContextFinalizer:SEVERE problem cleaning up: " + e.getMessage());
            e.printStackTrace();
        }
    }
}


(21)警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[Redis]似乎启动了一个名为[commons-pool-evictor]的线程,但未能停止它。这很可能会造成内存泄漏

具体原因大概是 创建这个线程后 , 内部没有实现关闭它的方法 , 需要手动去实现 ,

在本次中 , 是因为使用jedis工具的时候 , 没有关闭流JedisPool导致的

在上边的监听器中添加一个获取JedisPool的代码 , 将这个连接池关闭即可


(22)解决使用tomcat服务器打开网页的时候出现中文乱码问题

2、解决tomcat部署完项目后访问项目出现中文乱码问题:

2.1、在tomcat目录的bin文件下找到catalina.bat修改216行左右

set"JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" 修改为set"JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%" -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8

2.2、在tomcat的server.xml配置
添加:URIEncoding=”UTF-8”
添加结果如下:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               URIEncoding="UTF-8" />

2.3、在项目的idex.html(项目首页)
添加:content=“text/html”; charset=“utf-8”
添加结果如下:

<meta charset="utf-8" />

2.4、在tomcat的web.xml

大概119行处添加
添加:

<init-param>
	<param-name>fileEncoding</param-name>
	<param-value>UTF-8</param-value>
</init-param>

添加结果如下:

 <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
		<init-param>
            <param-name>fileEncoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

添加完成后重启tomcat服务即可


(23)使用maven导入slf4j控制台出现

SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.

这是没有添加slf4j-api对应的依赖导致的

解决方法: 在项目结构中找到对应的slf4j-api对应的版本,在maven中搜索slf4j,

1645532126630

找到对应的版本,下滑找到版本支持的依赖,然后在pom.xml文件中添加即可

1645531967634

<!--slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.32</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

(2)又出现下边的错误

log4j:WARN No appenders could be found for logger (com.alibaba.druid.pool.DruidDataSource).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

这是因为,没有配置log4j所需要的配置文件导致的,添加一个log4j.properties文件

# Global logging configuration 开发时候建议使用 debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

(24)使用bootstrap编写前端代码的时候,出现样式失效的情况,

可以查看浏览器的f12界面,看看是不是那个静态资源css或者js文件没有加载,导致出现问题(这可能与filter设置有关)


(25)使用maven打war包的时候,出现错误Cannot access defaults field of Properties

解决办法:

在pom.xml文件中添加一个插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
</plugin>

再次打包即可解决


(26)使用mybatis的日志功能 : 控制台出现

Class not found: org.jboss.vfs.VFS
JBoss 6 VFS API is not available in this environment.
Class not found: org.jboss.vfs.VirtualFile
VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
Using VFS adapter org.apache.ibatis.io.DefaultVFS
Find JAR URL: 乱码 
Not a JAR: 乱码

由上面两处问题大致可以猜测是由于指定的VFS没有找,mybatis启用了默认的DefaultVFS,然后由于DefaultVFS的内部逻辑,从而导致了reader entry乱码
所以解决问题的切入点有两个。1: org.jboss.vfs.VFS 2:修改DefaultVFS

解决方法 : 加入一个依赖即可:

<dependency>
      <groupId>org.jboss</groupId>
      <artifactId>jboss-vfs</artifactId>
      <version>3.2.15.Final</version>
</dependency>

(27)使用SpringBoot构建项目时运行出现Java HotSpot™ 64-Bit Server VM warning但是不影响运行:

Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.

首先我们应该明白的是:-Xverify:no 或者 -noverify 这两个都是 JVM 参数,可以禁止字节码校验,提高编译速度,但是就如同警告所说,这两个参数已经过时了。我们可以使用命令提示符查看详细信息

解决方法 : 不要勾选 Enable lanuch optimization

在idea中 : 依次选择RUN >> Edit Configurations… 找到 Spring boot 相关选项,取消勾选 Enable lanuch optimization

image-20220327201814126


(28)数据库登录报错误号码2003:Can’t connect to MYSQL server on ‘localhost’(0);

问题原因 : 电脑没有打开mysql服务导致的

解决方法 : 打开cmd , 以管理员身份打开 , 在cmd中输入

net start mysql , 即可开启服务

image-20220402112412337

如果还是运行失败 , 可能是你还没有将mysql的bin目录添加到环境变量的PATH里面 , 添加后重新尝试一遍

image-20220402112550137


(29)数据库使用的时候报1045错误

解决方法 :

  1. 停止服务 : net stop mysql

  2. 跳过登录验证 :

    1. 在mysql的安装目录下 , 找到my.ini配置文件 
    2. 在my.ini中最后一行添加 : skip_grant_tables
    
  3. 修改密码 :

    1. 启动mysql服务 , 进入dos环境 , 最好使用管理员权限打开
    2. 输入 mysql -uroot -p 登录mysql , 这个时候会提示输入密码 ,随便输入密码即可登录mysql
    出现mysql>控制符
    3. 修改密码 : 
    UPDATE user SET password=PASSWORD('newpswd')WHERE user='root'
    password函数为Mysql内部函数 , 其中newpswd为修改后的新密码
    
  4. 重启服务 :

    1. 将my.ini中加入的跳过权限的语句删除或加#号注释 , 重启服务 , 使用修改后的密码登录即可

(30)Maven打包时报错class lombok.javac.apt.LombokProcessor (in unnamed module @0x5ec1963c) cannot access class

使用maven打包含有lombok的工程时报错 ,错误信息如下:

class lombok.javac.apt.LombokProcessor (in unnamed module @0x5ec1963c) cannot access class com.sun.tools.javac.processin

这种情况是因为你的jdk版本太高与lombok不匹配导致的,将lombok依赖中的版本改成1.18.20即可


(31)使用SpringBoot的注解 @ConfigurationProperties , 出现错误提示

image-20220404210501292

出现这个错误 , 配置注解的处理器并没有配置

在pom文件中添加一个依赖坐标即可

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

(32)安装MongoDB出现错误:找不到dll文件


(33)使用elasticsearch出现错误,启动不了

如果你使用的是官网的最新版本8.0.0以上版本的话 , 出现此错误是因为新版本更新了安全策略 :

将config文件夹下的elasticsearch.yml配置文件打开

修改下图中的true值为false即可

image-20220406205926078

检验是否启动成功 :

通过浏览器访问 http://localhost:9200

会出现页面中显示一个json串 , 这样就表示启动ES成功了


(34)使用elasticsearch创建索引时报错

ElasticsearchStatusException[Elasticsearch exception [type=illegal_argument_exception, reason=request [/books] contains unrecognized parameter: [include_type_name]] ]

最近在使用时创建索引的时候 , 出现以上的错误

我的代码如下 :

@Test
void fu() throws IOException {
    HttpHost host = HttpHost.create("http://localhost:9200"); //创建一个请求 
    RestClientBuilder builder = RestClient.builder(host);
    client = new RestHighLevelClient(builder); //获取RestHighLevelClient对象
    CreateIndexRequest request = new CreateIndexRequest("books"); //专门用来创建索引用的
    client.indices().create(request, RequestOptions.DEFAULT);
    client.close(); //需要关闭这个对象
}

这个时候出现错误 错误详细信息如下:

ElasticsearchStatusException[Elasticsearch exception [type=illegal_argument_exception, reason=request [/books] contains unrecognized parameter: [include_type_name]]
]
	at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:176)
	at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:2011)
	at org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:1988)
	at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1745)
	at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1702)
	at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1672)
	at org.elasticsearch.client.IndicesClient.create(IndicesClient.java:305)
	at com.sichen.SpringBoot14EsApplicationTests.fu(SpringBoot14EsApplicationTests.java:31)
	........
		at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1732)
		... 73 more

解决方法 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了

client.indices().create(request, RequestOptions.DEFAULT);
//其中的create方法 , 有两个版本 , 有一个显示已经过时了 , 两个方法虽然名字一样 , 并且需要的参数也一样 , 但是两个的参数CreateIndexRequest是有区别的 
//导入这个包的时候 , 创建的CreateIndexRequest , 传入create方法中 , 使用的是那个已经过时的create方法 ,
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;

//导入这个包就可以正常运行了
import org.elasticsearch.client.indices.CreateIndexRequest;

解决 :

查看自己导入的包是哪个 , 使用这个包就可以正常运行了

//导入这个包就可以正常运行了
import org.elasticsearch.client.indices.CreateIndexRequest;

(35)双击启动Rocket的bin目录下的mqnamesrv.cmd文件闪退 :

在bin目录下启动cmd , 使用命令启动即可

start mqnamesrv.cmd

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值