后端开发常见问题

本文在csdn不再更新,最新版请到这里:我的笔记

文章目录

  • 常见bug
    • 权限问题
    • 版本问题
    • Git
  • Redis
    • Redis-cli命令
    • Redis配置文件
    • Redis内存相关
    • SpringBoot中使用Redis
  • PostgreSQL
    • 导入导出
    • 定时备份数据库
  • Linux之坑
    • 新建用户
    • 改坏sudoers文件
    • ll命令失效
  • Ubuntu 18.04 装环境
    • RabbitMq
    • Consul
    • Postgresql
    • Java11-Open-jdk
    • Nginx
    • Docker
    • Nodejs
  • CentOS 7.3 各种安装
    • 安装支持ZIP的工具
    • 安装postgresql
    • 安装Java
    • 安装nginx
    • 安装consul
    • 安装Docker
  • Win10各种安装
    • RabbitMQ
  • CentOS 7.4 配置本地yum源
  • Windows部署Java服务
  • Spring Security
    • 关闭Spring Security的鉴权
  • IntelliJ IDEA上调用WCF服务
  • IntelliJ IDEA连接服务器上的数据库
  • Docker相关
  • Postman
    • 如何测试含有占位符的接口?
  • 常用开发组件
    • RestTemplate
    • Apache POI
  • 正则表达式
  • 上传图片到服务器指定路径
  • SpringBoot相关
    • @Valid
    • 搭建SpringBoot多模块项目
    • Spring Boot项目引入第三方jar包
    • SpringBoot配置自定义拦截器
    • 配置https证书
  • Spring相关
    • Spring中的Bean
  • MybatisPlus
  • 开发中遇到的其他问题
    • HTTPS证书配置
  • 开发规范
    • Restful风格
  • Coding注意事项

常见bug

权限问题

  • rabbitmq-service.bat start 时一定要以管理员身份进入,不然会被拒绝
  • Spring Security的AccessDenied错误,检查一下数据库有没有给用户授权并且关联角色
  • Spring Security构建 SimpleGrantedAuthority 对象的时候,角色必须以 ROLE_开头。SimpleGrantedAuthority auth = new SimpleGrantedAuthority("ROLE_"+roleMapper.findById(role.getRoleId()).getRoleCode());

版本问题

  • Java版本问题
  • 版本:commons-codec 1.12 版本能正常解密微信的消息,升级为1.13后出现了不能正常decode
  • 版本:未指定版本:Cannot resolve org.springframework.boot:spring-boot-starter-data-redis:unknown

Git

  • IDEA中的git突然失效,报git is not installed,参考https://blog.csdn.net/RosLu/article/details/112476820
  • Git账号更换后需要最好重新clone项目,之后push上去的才是自己的新账号

Redis

Redis-cli命令

  • redis cli命令详解

Redis配置文件

  • Redis配置文件详解

Redis内存相关

  • 玩转Redis-删除了两百万key,为什么内存依旧未释放?Redis内存碎片

SpringBoot中使用Redis

  • SpringBoot整合Redis,使用RedisTemplate存取List集合
  • 【SpringBoot系列】七、SpringBoot 中使用Redis缓存

PostgreSQL

导入导出

  • 参考:https://blog.csdn.net/rakish_wind/article/details/109855440

定时备份数据库

  • 参考:https://blog.51cto.com/u_13889476/2174249

Linux之坑

新建用户

  1. 新增用户:useradd -m zhangsan
  2. 设置密码:passwd zhangsan
  3. 赋予用户sudo权限:vim /etc/sudoers(需要先chmod 640 sudoers,因为该文件本来是只读的)在root ALL=(ALL) ALL 的下一行添加 : zhangsan ALL=(ALL) ALL 貌似不能在文件末尾添加,会报错
  4. 别忘了chmod 440 sudoers

改坏sudoers文件

  • 新建用户时改坏了/etc/sudoers文件,系统用不了sudo,root都切换不了了,,解决方法参考这篇:https://blog.csdn.net/caijiapeng0102/article/details/84848473

ll命令失效

  1. 运行 vi ~/.bashrc,查看该文件里是否有alias ll='ls -l' 这样的数据,如有,将数据前的 “#” 去掉,如果没有,将 alias ll='ls -l'加进去并保存,然后运行 source ~/.bashrc 命令,即可成功
  2. 如果只做完第一步,可能重新登录后ll命令还是失效,那就需要打开(如果没有的话先创建)文件: ~/.bash_profile 。 在里面加入一行:source ~/.bashrc

Ubuntu 18.04 装环境

RabbitMq

  • 参考:https://blog.csdn.net/haeasringnar/article/details/82715823

Consul

  • 参考:https://blog.csdn.net/u013536232/article/details/104137243
  • 上面的参考文章还没结束,接下来需要写一个脚本consul.sh,内容如下:
#!/bin/bash
/usr/local/bin/consul agent -dev
  • 执行命令:chmod 777 consul.sh
  • 然后在/lib/systemd/system目录下注册一个服务,配置如下:
[Unit]
Description=consul service
After=network.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
User=root
Type=simple
WorkingDirectory=/root     #这个就是脚本所在的目录(实际配置时请删掉注释)
ExecStart=/root/consul.sh  #这个就是脚本(实际配置时请删掉注释)
TimeoutSec=30
Restart=on-failure
StartLimitInterval=350
StartLimitBurst=10

[Install]
WantedBy=multi-user.target
  • 如报错:listen tcp 39.108.107.163:8600: bind: cannot assign requested address,参考解决办法:https://blog.csdn.net/qq_34707456/article/details/101346509

Postgresql

  • 一句搞定:apt install postgresql,postgresql服务会自动启动
  • 参考:https://blog.csdn.net/weixin_30498921/article/details/98956013

Java11-Open-jdk

  • 一句搞定:apt-get install openjdk-11-jdk

Nginx

  • 参考:https://blog.csdn.net/m0_38025747/article/details/80602651

Docker

  • 执行命令:sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • 参考

Nodejs

  • 参考

CentOS 7.3 各种安装

安装支持ZIP的工具

  • 参考:https://www.cnblogs.com/ourlang/p/12230972.html

安装postgresql

  • 参考:https://cloud.tencent.com/developer/article/1592808
  • 上文只作为参考,实际安装时发现postgresql-setup这个文件并不在/usr目录下,而在/usr/bin目录下
  • 初始化成功并启动服务后执行su - postgres,然后执行psql,如果成功,就表示数据库安装成功了

安装Java

  • 参考:https://wxnacy.com/2018/12/27/centos7-install-java11/

安装nginx

  • 参考:https://my.oschina.net/yueshengwujie/blog/3099219

安装consul

  • 和上文Ubuntu安装consul步骤一样

安装Docker

  • 参考

Win10各种安装

RabbitMQ

  • win10安装RabbitMQ教程,关于RabbitMQ-报错Error: unable to perform an operation on node ‘rabbit@xxx,使用此文中的方法解决亲测有效
  • Windows如何完全卸载RabbitMQ和Erlang,卸载rabbitmq时,一定要按照此文的步骤全部执行

CentOS 7.4 配置本地yum源

  • https://blog.csdn.net/rakish_wind/article/details/117297897

Windows部署Java服务

  1. Java项目打包成jar
  2. 服务注册,参考:https://blog.csdn.net/LMGD_/article/details/106144786
  3. 注册成功后,在jar所在目录执行:net start 服务名(可能需要以管理员权限执行)
  4. 运行services.msc,确认服务是否已启动

我的xml配置

<service>
    <id>rkeServiceid>
    <name>rke Servicename>
	<description>a servicedescription>
    <executable>javaexecutable>
    <arguments>-jar rkeService.jararguments>
	<startmode>Automaticstartmode>
    <logmode>resetlogmode>
	<logpath>C:\Users\Lenovo\Desktop\server\logslogpath>
service>

其他参考:https://blog.csdn.net/bighuan/article/details/83416390如果已经成功就不用看了

Spring Security

关闭Spring Security的鉴权

适用于基于spring boot+spring security+jwt的项目

  1. 在springsecurity配置类上去掉@EnableGlobalMethodSecurity注解
  2. 在springsecurity配置类的如下方法中,添加.anyRequest().permitAll();
	@Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
            .cors()//跨域资源请求开启
            .and()
            .csrf().disable() //不开启跨站请求伪造
            .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
                .accessDeniedHandler(new CustomAccessDeineHandler())
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()//拦截请求,创建FilterSecurityInterceptor,该方法用于配置权限
            .antMatchers("/swagger-ui.html").permitAll()
            .antMatchers("/teacher/login").permitAll()
            .antMatchers("/visitor/login").permitAll()
//            .anyRequest().authenticated();
            .anyRequest().permitAll();
        httpSecurity.addFilterBefore(jwtAuthorizationTokenFilter, UsernamePasswordAuthenticationFilter.class);
    }

IntelliJ IDEA上调用WCF服务

  • 参考:https://blog.csdn.net/zxy13826134783/article/details/113866754

IntelliJ IDEA连接服务器上的数据库

  • IDEA上的操作参考:https://www.iiiff.com/article/239580
  • 如果连不上,参考:https://blog.csdn.net/u012948976/article/details/51763565,
  • 修改完配置文件后,最好重启一下postgresql的服务。

Docker相关

  • 参考笔记
  • docker配置下载镜像加速,参考
  • 安装Docker后内网ip不通?Docker修改Docker0网桥默认ip的方法
  • Docker安装rabbitmq:参考

Postman

如何测试含有占位符的接口?

  • 接口:@DeleteMapping(“/optionalcourse/{id}”)
  • 测试方法如下(id前加冒号):
    后端开发常见问题_第1张图片

常用开发组件

RestTemplate

  • https://blog.csdn.net/rakish_wind/article/details/112560995

Apache POI

参考:

  • Apache POI使用详解
  • POI读取Excel表格数据类型判断与取值

正则表达式

  • 参考:正则表达式终结者

上传图片到服务器指定路径

  • 上传图片的接口采用MultipartFile接收,如果还有其他基本数据类型的参数,建议使用url占位符配合@PathVariable注解
  • MultipartFile默认是有限制的,参考:https://kangkang.blog.csdn.net/article/details/54381705

接收图片的代码参考:

public String uploadFile(MultipartFile file, String path) {
        if (file.isEmpty()){
            log.error("file is empty");
            return null;
        }
        String fileName = file.getOriginalFilename();
        if (fileName == null || "".equals(fileName.trim())) return null;
        log.debug("filename: " + fileName);
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        log.debug("suffix: " + suffix);
        fileName = DateUtil.getTimeStamp() + "_" + fileName;
        log.debug("filename with timestamp: " + fileName);
        File imgFile = new File(path + fileName);
        if (!imgFile.getParentFile().exists()) {
            if (!imgFile.getParentFile().mkdirs()) { //注意mkdir()和mkdirs()区别
                log.error("mkdirs: " + imgFile.getParentFile() + "failed");
                return null;
            }
        }
        try {
            file.transferTo(imgFile);// 文件写入,必须使用绝对路径加文件名,且路径存在
        } catch (IOException e) {
            log.error(e.getMessage());
            return null;
        }
        return fileName;
    }

SpringBoot相关

@Valid

  • @Valid加在方法参数上的前提是必须在类上加@Validate才生效

参考文章:

  • @Valid是什么
  • @Valid注解 基本使用方法
  • @Valid注解用法详解
  • Spring Boot 数据校验@Valid+统一异常处理
  • get请求加@NotNull验证不生效
  • 嵌套验证解决方案
  • 解决@Valid List 无法校验的问题

搭建SpringBoot多模块项目

  • https://blog.csdn.net/lhw_csd/article/details/82183008

Spring Boot项目引入第三方jar包

  • https://www.hangge.com/blog/cache/detail_2712.html
  • https://blog.csdn.net/ththcc/article/details/88748161

SpringBoot配置自定义拦截器

  • https://blog.csdn.net/qq_30745307/article/details/80974407

配置https证书

  • acme获取https证书并配置到spingboot项目(standalone模式)

Spring相关

Spring中的Bean

  • @Scope(“prototype”)的正确用法——解决Bean的多例问题

MybatisPlus

  • https://blog.csdn.net/modelsetget/article/details/89972714
    后端开发常见问题_第2张图片

开发中遇到的其他问题

  • java double转string去除科学计数法
  • post请求接口,参数封装到对象,但参数包含普通类型和MultiPartFile类型遇到的问题解决方案:去掉@RequestBody注解,参考:org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-url

HTTPS证书配置

  • Nginx+SpringBoot 部署前后端分离项目(http配置、https配置)
  • 腾讯云免费ssl证书+springboot配置ssl+nginx配置ssl
  • 图文详解:阿里云域名配置免费https/SSL证书
  • acme获取https证书并配置到spingboot项目(standalone模式) (此方式有效期只有3个月)

开发规范

Restful风格

  • RESTful API 最佳实践
  • https://www.shuzhiduo.com/A/n2d9epPYdD/

Coding注意事项

  1. Reject perfectionism 拒绝完美主义
  2. Quick debug(need experience and patience)
  3. Pursue simplicity 追求简洁

文章目录

  • 常见bug
    • 权限问题
    • 版本问题
    • Git
  • Redis
    • Redis-cli命令
    • Redis配置文件
    • Redis内存相关
    • SpringBoot中使用Redis
  • PostgreSQL
    • 导入导出
    • 定时备份数据库
  • Linux之坑
    • 新建用户
    • 改坏sudoers文件
    • ll命令失效
  • Ubuntu 18.04 装环境
    • RabbitMq
    • Consul
    • Postgresql
    • Java11-Open-jdk
    • Nginx
    • Docker
    • Nodejs
  • CentOS 7.3 各种安装
    • 安装支持ZIP的工具
    • 安装postgresql
    • 安装Java
    • 安装nginx
    • 安装consul
    • 安装Docker
  • Win10各种安装
    • RabbitMQ
  • CentOS 7.4 配置本地yum源
  • Windows部署Java服务
  • Spring Security
    • 关闭Spring Security的鉴权
  • IntelliJ IDEA上调用WCF服务
  • IntelliJ IDEA连接服务器上的数据库
  • Docker相关
  • Postman
    • 如何测试含有占位符的接口?
  • 常用开发组件
    • RestTemplate
    • Apache POI
  • 正则表达式
  • 上传图片到服务器指定路径
  • SpringBoot相关
    • @Valid
    • 搭建SpringBoot多模块项目
    • Spring Boot项目引入第三方jar包
    • SpringBoot配置自定义拦截器
    • 配置https证书
  • Spring相关
    • Spring中的Bean
  • MybatisPlus
  • 开发中遇到的其他问题
    • HTTPS证书配置
  • 开发规范
    • Restful风格
  • Coding注意事项

你可能感兴趣的:(Manual,开发指南)