找Bug要挨个测试(测试好的部分),然后找到问题部分,对有问题的部分进行修改成最简单的测试,然后找出问题。
不能运行问题,一定要去pom里面配置,然后去maven下的jar路径下去查看,删除重新导入试试。
对于乱码问题,本质原因就一个:字节流解码为字符串时,使用了错误的字符集(和编码所用字符集不一致)!
我们来到tomcat目录的conf子目录中,找到一个名为 "logging.properties" 的文件,打开这个文本文件,找到如下配置项:
java.util.logging.ConsoleHandler.encoding = UTF-8
将 UTF-8 修改为 GBK,修改后的效果为:
java.util.logging.ConsoleHandler.encoding = GBK
保存后,重启tomcat。
原因总结:因为windows系统中,其命令行窗口在解码字节数组时,默认使用本地字符集(对于我们就是GBK),而tomcat默认输出的启动信息是通过utf8进行编码的,这就导致编码与解码所使用字符集的不一致,从而出现了乱码情况!
卸载mysql后再安装输入mysqld --install 回车后提示The service already exists!
原因:卸载的时候没有卸载干净
1)重新以管理员身份打开cmd
2)输入命令sc query mysql 查看名为mysql的服务
3)输入命令sc delete mysql,删除该mysql
4)再执行mysqld --install 就能成功了
解决方法:从project struckre中导入新的包即可;从pom.xml中右击reimport。
错误原因:第一次创建springboot工程,springboot默认会加载数据库这样的属性信息,由于没有配置数据库的相关信息所以报错,如果没有配置数据库,就在启动类上加入这句@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })在运行就可以了。
spring boot默认会加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration类,DataSourceAutoConfiguration类使用了@Configuration注解向spring注入了dataSource bean。因为工程中没有关于dataSource相关的配置信息,当spring创建dataSource bean因缺少相关的信息就会报错。
两种解决办法:
1)在Application类上加
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
2)配置数据源:
例如在application配置文件中:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://ip:端口号/数据库名称?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
从网上找了各种解决方法,最后发现是setting里build下的maven里maven又自动去了默认c盘的路径(之前本人自己设置了路径在d盘下);结果切换到d盘后,又报错了(吐辽),
解决方法,找到maven的库(本机设置的是d盘的workspace),然后找到相应的文件目录下,\org\springframework\boot\spring-boot-maven-plugin删除掉,然后从idea中右侧的
clean后重新下载,问题解决。右击该红色地区,maven-reimport,会解决很多类似的问题。
如题所示,在运行springboot程序时,遇到了无法启动内置tomcat的问题:
此处比较纳闷,新建项目后,居然成功了......
解决方法:在pom.xml中增加如下依赖
org.springframework.boot
spring-boot-configuration-processor
true
然后会出现spring-boot-configuration-processor发红,右击后点击maven-reimport即可。
经过检查,居然是author里面set方法打错了。。。
解决方案:1)查看是否是格式问题,去yml找出问题的位置检查一下。2)使用单引号‘’或者“”双引号,将响应的配置包起来。
网上也有很多错误解决方式,这里就说一下本人遇到问题的解决方式:即在Mapper层加入@Repository即可。
解决方法:进入到Project Structure
问题解决:在检查自己的mysql版本后,发现自己的版本是5.x,接下来从xml和properties文件中将驱动改为com.mysql.jdbc.Driver。然后从pom中将mysql驱动版本改为5.x,此处在idea中没有删除,作者来到存放驱动的路径下,当你鼠标指向相应的驱动,会自动显示位置。
然后将驱动删除和修改。
在修改完pom里mysql的版本后,出现了以上问题,如图:
解决方法:在相应的xml中,在数据库配置后加一行
useUnicode=true&characterEncoding=utf8&useSSL=true
去maven中conf的setting里配置相应的下载路径。
解决方法:将导入的libraries从project structure中移除,然后再重新手动导入(复制粘贴)到lib目录下,并从pom中添加依赖。这里依赖的添加小技巧,用解压软件解压,看里面的配置信息,并添加到pom中。
背景:因为需要从数据库导出并且进行AES、MD5加密和相关信息的添加等一系列操作,所以测试时需要频繁切库,就想着把之前同事写死的数据库用一个全局变量给替换出来,但是替换完成后出现了无法找到数据库的问题。当我把全局变量删除并且回复原有代码状态后,又重新运行,依然还是报此错,经过多次尝试,最终发现,因为数据库的导出,需要切换库,在导出之前的库需要就在yml里找到对应的库名进行修改,然后再切到需要导入的库(即还是在yml中将库名改回来),重新启动即可。
原表:
导出加密解密导入后:
背景:在用Java对数据库进行导出-压缩-加密-导入另一个数据操作时,出现文件大小变更问题。
解决思路:第一,设置断点并添加sysout输出语句,单步运行输出每一步处理的文件大小。对导出的文件进行大小的记录,然后在导入文件的解析前再次进行文件大小的记录,检验问题是否是在文件压缩导出-文件解压导入这个阶段,结果发现此过程没有问题,文件大小未变,那么问题就出在文件加密之前,或者是文件导入解压之后。第二,对导出的文件进行内容的查看(因为我文件已经加密,所以将加密代码注释掉,并在代码中找到rar的解压密码),查看文件内容后发现,其他类型都可以看到,但是在导出的BLOB是BYTE类型该处为密文,复制此处密文到网页找在线base64解密工具,解密后发现内容显示正常。
解决方法:因为文件是BLOG文件在导出时为BYTE类型,byte[]类型在序列化的时候,会转为json类型,会自动base64加密,如果不进行解密则会出现文件大小变更的问题;在相应的Service解析文件部分,加入base64解密代码。
if (next1.equals("admindb.act_ge_bytearray")) {
for (Map map : adminList1){
Base64.Decoder decoder = Base64.getDecoder();
String bytesStr = map.get("BYTES_").toString();
byte[] bytes = decoder.decode(bytesStr);
map.put("BYTES_", bytes);
}
}
问题背景:swagger进行调试的时候,从swagger传入参数,出现以上问题,但是又不影响程序的执行只是报此错误。
解决方法:本人这里遇到的是用户未登录错误,在swagger上登录上系统的账号即可,即从一个打开的工程前端,进入f12,找到headers中的authorization复制进去。
问题背景:从gitlab上切换分支以后,出现以上错误。
问题原因:因为切换了分支,从git上重新拉取了代码,(不知道为什么idea没有提示冲突提示),默认将我的bootstrap.yml和application-dev.yml给重新拉取了,从而我的本地设置都没有了。导致了这个错误。
解决方法:从两个配置文件中修改自己的链接信息。
问题描述:前端页面查询出现查询时,用户只能查询本级及下级(这是一个按钮)的请求,查看本级(另一个按钮)时则页面返回为空。
问题排查:首先从前端页面进入f12,查看有问题的后台调用方法,发现方法返回的response里为空。则根据Request URL,找到对应的后端接口,然后进行数据传送的查看,找到问题出现的语句。
问题解决:找到有问题的语句后,首先我们先看控制台给我们报错的内容,翻译过来就是在sql中org_cod字段模糊不清,然后我们从有问题的语句,点进它调用的方法,依次进入到mapper里面,查看sql内容。接下来,我们打开navicat,(小技巧)将提示的错误(箭头代码)复制到navicat中,并点击“美化”进行自动分行,然后点击运行。即可看到查找org_cod时报错,发现是联查时两个表中都有org_cod字段所致。找到问题后,进行修改,我们返回到service中出现问题的语句,找到它调用的entity实体,进入里面方法比较多,我们再来到相应的mapper.java页面找到调用的sql方法,然后从entity实体中搜查该方法,找到后,修改查询的org_cod的名为其它(主要是为了区分开)即可。
如图所示,在进行文件的上传时,出现以上错误。这个问题的原因就是,用户下载了文件后对文件进行了命名的更改,导致出现这个错误。
背景:如题,项目在启动过程中遇到了项目启动不起来,根据console的报错提示,是error querying database。
通过提示,可以知道是在数据库连接的过程中出现了问题,原因是由于,从git上获取的代码将本地配置代码更新了,找到自己的数据库配置代码(本人是application中)然后改成正确的URL地址即可。
解决方法:是由于程序找不到eureka的入口,找到配置eureka的配置代码(本人是bootstrap)然后进行url的修改。
问题如图所示,从网上查找,有说项目重复启动问题的,有说是submit重复提交问题的,这里记录一下自己的问题,是application配置中redis地址配错了,导致出现上述问题,修改为正确地址后即可解决。
问题如图所示,今天遇到一个问题,就记录了下来,错误就是IDEA提示让修改sysList方法为静态类型。这个原因很简单,一句话总结就是开头字母小写代表对象,大写代表类型,这里的IdenSyrvice开头字母改成小写即可。
解决方法:
Process process=new ProcessBuilder(command).start();
InputStream in=process.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(in,"gbk"));
这里BufferedReader br=new BufferedReader(new InputStreamReader(in,"gbk"));,一定要设置成GBK!