Spring Boot开发知识点积累
这里积累工作和学习中遇到的一些Spring boot开发知识点,用于自己查阅,免得时间久了就忘了。(慢慢填坑)
目录- final关键字
- PooledObjectFactory
- ThreadPoolExecutor
- Mybatis @options注解
- 开发中PO DTO VO DO的意义
- 一个springboot项目多个模块的使用(多模块springboot项目的创建)
- idea中directory和package
- 启动类的位置可以移动吗
final关键字
final关键词可以修饰类、方法、类的成员变量、局部变量。
- 修饰类:被final修饰类的类不能被继承,不能有子类了。
- 修饰方法:方法不能被重写。
- 修饰类的成员变量:该变量必须被初始化(通过初始赋值或者构造方法里赋值,二者只能选一个),变量初始赋值后就不能修改了。
- 修饰局部变量:可以不初始化,可以后续被赋值,但是第一次赋完值之后就不能修改了。
如图,代码 b=d; 会报错。
PooledObjectFactory
ThreadPoolExecutor
通过ThreadPoolExecutor来创建线程池,先来一个简单的例子:
public class ThreadPoolExcutorExample {
private ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, //核心线程池个数
3, //最大线程池个数
3, //线程空闲多久会被释放
TimeUnit.SECONDS, //keepAliveTime的时间单位
new SynchronousQueue(), //任务队列
Executors.defaultThreadFactory(), //线程工厂,用于创建线程,默认的就行
new ThreadPoolExecutor.AbortPolicy()); //当线程太多时的拒绝策略
public void test() {
List datas = new ArrayList<>(Arrays.asList("第一个线程", "第二个线程", "第三个线程","第四个线程"));
for(int i=0; i
ThreadPoolExecutor变量的声明地方,可以是方法内部,类的变量(直接初始化,或者使用类的构造函数初始化),或者多个不同的线程池集中放在一个类里(通过依赖注入在使用的地方取用)
ThreadPoolExecutor的构造函数有7个参数,这里详细纪录一下任务队列和拒绝策略。
任务队列:
- SynchronousQueue:不会在任务队列中保持任务,会直接执行创建线程,直到达到maximumPoolSize。
- ArrayBlockingQueue:先创建线程直到达到corePoolSize大小,然后新任务会进入ArrayBlockingQueue队列,当队列长度超过ArrayBlockingQueue的大小,新的任务进来会创建新的线程直到达到maximumPoolSize,再之后就会执行拒绝策略。
- LinkedBlockingQueue:可以无限的添加任务,maximumPoolSize参数就会失效。
- PriorityBlockingQueue:可以设置任务的优先级。
拒绝策略:
- AbortPolicy:直接抛出异常。
- DiscardPolicy:丢弃提交的任务。
- DiscardOldestPolicy:丢弃队列中最早加入的任务。
- CallerRunsPolicy:提交任务的线程自己负责执行这个任务。
提交方法:
execute提交:
submit提交:
Mybatis @options注解
@Insert("xxxxxxx")
@Options(useGeneratedKeys = true, keyProperty = "userId", keyColumn = user_id")
int addInstance(User user);
@Options可以在插入数据时返回数据的主键,keyProperty是接收id的对象的属性名,keyColumn是数据库表的主键名。
开发中PO DTO VO DO的意义
- PO(Persistent Object)持久层对象:就是和数据库对于的Java对象,有些项目中也叫entity。
- DTO(Data Transfer Object)数据传输对象:前端传过来的数据可以用一个DTO对象来接收。
- VO(View Object)页面对象:给前端的数据,通过一个VO封装到一起返回。
- DO(Domain Object)领域对象: 从现实世界中抽象出来的有形或无形的业务实体。
一个springboot项目多个模块的使用(多模块springboot项目的创建)
参考这个:
idea中directory和package
如下两图,在springboot项目中,创建文件夹,有时是directory有时是package。
如图,package目录可以使用点“.”来作为名字,实际在电脑上创建文件夹是aaa文件夹,里面有bbb文件夹,bbb里面有个ccc文件夹,ccc里面才是代码文件。package类型的目录不能用短横线-作为目录名字,因为Java的包路径不能使用短横线-。如果在创建时用短横线则目录会变成directory类型,而不是package类型。
如图,directory目录则只会在电脑上创建名为xxx.yyy.zzz的文件夹。
启动类的位置可以移动吗
参考文献: