AOP,全称是Aspect Oriented Programming,即面向切面编程。AOP的目的是将那些与业务无关,但是业务模块都需要的功能,如日志统计、安全控制、事务处理等,封装成可重用的组件,从而将它们从业务逻辑代码中划分出来,编写成独立的切面。这样做,既可以保持业务逻辑的纯净和高内聚性,又可以使得系统的多个模块都可以共享这些公共的功能。 Spring框架提供了对AOP的支持,Spring Boot自然也不例外。使用Spring Boot的AOP功能,我们可以在运行时动态地将代码横向切入到各个关注点(方法或者类)中。这种横向切面的方式,比传统的纵向切面(继承)更加灵活。
xml
java<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>
redis是我们经常使用的一个中间件,他是内存数据库,使用中经常会存一些list或者其他数据结构,内容很多的话,就会产生大key
google snappy:无损压缩,追求压缩速度而不是压缩率(Compression rate) message pack:无损压缩,仅适用于 json 字符串的压缩,可以得到一个更小的 JSON,官网是:msgpack.org
分割 适用于 list,set,hash 等容器类型的 redis key。规范要求容器的元素数量 < 5000,我们可以在写 redis 的时候做个逻辑,如果超过了 5000 的容器就做切片。
抛弃 redis不存储过大的,可以直接查询数据库,或者是将不太重要的数据存储再Mongodb中,直接从mongodb查询
在项目中有很多情况下需要使用多线程的方式执行任务,那么有什么比较好的方法来判断多线程任务执行完毕,我们再进行下一步的操作,之前的话我会设置等待时间来等待
javaexecutor.awaitTermination(30, TimeUnit.MINUTES);
在使用mongodb排序的时候需要构建一个sort对象,传入query.with()方法中,实现排序功能,但是直接new对象会提示
'Sort(org.springframework.data.domain.Sort.Direction, java.util.List<java.lang.String>)' has private access in 'org.springframework.data.domain.Sort'
因为springboot2.2.1(含)以上的版本Sort已经不能再实例化了,构造方法已经是私有的了!
可以改用Sort.by获得Sort对象。
使用Sort s=Sort.by()方法创建对象by方法的底层:
java
public static Sort by(List<Sort.Order> orders) {
Assert.notNull(orders, "Orders must not be null!");
return orders.isEmpty() ? unsorted() : new Sort(orders);
}
xml <!-- 验证码 -->
<dependency>
<groupId>pro.fessional</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.3</version>
</dependency>
这是个方法是在项目初始化执行的,在ruoyi-system模块下的SysConfigServiceImpl中,作者给方法加上了@PostConstruct注解,这个注解的目的是在这个类初始化完成后就会执行这个方法,方法的内容是从sys_confg表中找到基础配置信息,循环的存在redis中