本文在csdn不再更新,最新版请到这里:我的笔记
常见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配置文件
Redis内存相关
SpringBoot中使用Redis
PostgreSQL
导入导出
定时备份数据库
Linux之坑
新建用户
- 新增用户:
useradd -m zhangsan
- 设置密码:
passwd zhangsan
- 赋予用户sudo权限:
vim /etc/sudoers
(需要先chmod 640 sudoers
,因为该文件本来是只读的)在root ALL=(ALL) ALL
的下一行添加 :zhangsan ALL=(ALL) ALL
(貌似不能在文件末尾添加,会报错) - 别忘了
chmod 440 sudoers
改坏sudoers文件
- 新建用户时改坏了
/etc/sudoers
文件,系统用不了sudo,root都切换不了了,,解决方法参考这篇:https://blog.csdn.net/caijiapeng0102/article/details/84848473
ll命令失效
- 运行
vi ~/.bashrc
,查看该文件里是否有alias ll='ls -l'
这样的数据,如有,将数据前的 “#” 去掉,如果没有,将alias ll='ls -l'
加进去并保存,然后运行source ~/.bashrc
命令,即可成功 - 如果只做完第一步,可能重新登录后ll命令还是失效,那就需要打开(如果没有的话先创建)文件: ~/.bash_profile 。 在里面加入一行:
source ~/.bashrc
Ubuntu 18.04 装环境
RabbitMq
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
Docker
- 执行命令:
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- 参考
Nodejs
CentOS 7.3 各种安装
安装支持ZIP的工具
安装postgresql
- 参考:https://cloud.tencent.com/developer/article/1592808
- 上文只作为参考,实际安装时发现postgresql-setup这个文件并不在
/usr
目录下,而在/usr/bin
目录下 - 初始化成功并启动服务后执行
su - postgres
,然后执行psql
,如果成功,就表示数据库安装成功了
安装Java
安装nginx
安装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源
Windows部署Java服务
- Java项目打包成jar
- 服务注册,参考:https://blog.csdn.net/LMGD_/article/details/106144786
- 注册成功后,在jar所在目录执行:
net start 服务名
(可能需要以管理员权限执行) - 运行services.msc,确认服务是否已启动
我的xml配置
<service>
<id>rkeService</id>
<name>rke Service</name>
<description>a service</description>
<executable>java</executable>
<arguments>-jar rkeService.jar</arguments>
<startmode>Automatic</startmode>
<logmode>reset</logmode>
<logpath>C:\Users\Lenovo\Desktop\server\logs</logpath>
</service>
其他参考:https://blog.csdn.net/bighuan/article/details/83416390如果已经成功就不用看了
Spring Security
关闭Spring Security的鉴权
适用于基于spring boot+spring security+jwt的项目
- 在springsecurity配置类上去掉
@EnableGlobalMethodSecurity
注解 - 在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服务
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前加
冒号
):
常用开发组件
RestTemplate
Apache POI
参考:
正则表达式
- 参考:正则表达式终结者
上传图片到服务器指定路径
- 上传图片的接口采用
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多模块项目
Spring Boot项目引入第三方jar包
- https://www.hangge.com/blog/cache/detail_2712.html
- https://blog.csdn.net/ththcc/article/details/88748161
SpringBoot配置自定义拦截器
配置https证书
Spring相关
Spring中的Bean
MybatisPlus
开发中遇到的其他问题
- 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风格
Coding注意事项
Reject perfectionism
拒绝完美主义Quick debug
(need experience and patience)Pursue simplicity
追求简洁