- 博客(38)
- 收藏
- 关注
原创 【无标题】自定义健康端点
1.扩展健康端点:编写一个类继承AbstarctHealthIndicator,重写其中的doHealthcheck方法,主要代码如下:2.完全自定义健康端点:访问:localhost:端口号:/autuator/myEndpoint
2022-08-07 16:35:30
262
原创 spring boot项目读取配置文件的三种方式
3.通过@ConfigurationProperties配置类,再通过自动注入,去调用配置类的相关get方法获取参数。(2)自动装配调用相关API。
2022-08-07 16:24:29
576
原创 idea创建springboot 项目的两种方式
2)在主启动类上加入以下的注解:@SpringBootApplication。2.使用ideal自带的springinit,根据项目的需要添加相关的依赖。1.创建一个maven工程或者java工程.
2022-08-07 16:15:14
171
原创 Java集合
定义:用于存放对象的引用的容器。 分类:Set(列),List(集),Map(映射)。 与数组的区别:(1)数组在定义的时候需声明长度,集合的长度可动态增长;(2)数组只能存放基本数据类型,也可存放引用数据类型,集合只能存放引用数据类型;(3)数组存放的元素必须为同一数据类型,集合存放的对象可不为同一数据类型。 Collection接口:Set接口(HashSet(数组+链表(红黑树),线程安全),LinkedHashSet(Hash表+链表),TreeSet(红黑树)..)和List接口(Array
2021-10-17 22:05:51
69
原创 thymeleaf
基本语法表达式 语法 用途 变量取值 ${} 获取请求域值 选择变量 *{} 获取上下文对象值 片段选取 ~{} 类似于jsp:include 消息 #{} 获取国际消息等 链接 @{} 生产链接 2、字面量 文本值: 'one text' , 'Another one!' ,…数字: 0 , 34 , 3.0 , 12.3 ,…布尔值: true , false 空值: n...
2021-10-16 21:37:39
161
原创 mybatis编写自定义类型转化器
1.导入相关的jar包坐标 <dependencies> <!--mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version>
2021-09-15 09:33:31
308
原创 mybatis快速入门
1.导入相关的jar包坐标<dependencies> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version>
2021-09-14 23:05:51
56
原创 spring事务声明基于注解
1.导入相关jar坐标 <dependencies> <!--spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.
2021-09-14 17:48:57
70
原创 spring基于事务配置(xml配置)
1.导入相关的jar坐标<dependencies> <!--spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.
2021-09-14 17:26:56
287
原创 spring-aop快速开发(基于注解)
1.导入相关jar包坐标 <dependencies> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>
2021-09-14 11:15:52
76
原创 spring-aop快速入门(xml配置)
1导入相关jar包的坐标 <dependencies> <!--spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5
2021-09-14 10:46:02
110
原创 spring注解开发快速入门
1.编写配置类//SpringConifg@Configuration //表名配置类,在容器创建时加载@ComponentScan("com") //扫描com包下所有组件@Import(DataSourceConfig.class) //导入其他配置类public class SpringConfig {}//DataSourceConfig.class@Configuration@PropertySource("classpath:jdbc.properties"
2021-09-12 15:05:56
96
原创 spring配置数据源步骤
1.先导入数据源的相关包坐标和驱动库包坐标 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-
2021-09-12 13:41:38
111
原创 SpringBean对象配置的三种方法
1.构造方法<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://w
2021-09-12 13:05:25
76
原创 Spring快速入门
1.开发步骤(1)导入spring开发的基础jar包beans,context,core和SpEL(expression)//默认导入核心包的一个,其他会联动导入 <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>
2021-09-11 21:41:19
66
原创 CountDownLatch应用之实现多线程等待
public class countdownlatchApplication { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch=new CountDownLatch(10); ExecutorService pool= Executors.newFixedThreadPool(10); String .
2021-09-09 22:14:06
82
原创 Semaphore(信号量)
1作用:用于限制能同时访问共享资源的线程数量,无法限制资源的数量。2.示例public class TestSemaphore { public static void main(String[] args) { Semaphore semaphore=new Semaphore(3); for (int i = 0; i <10 ; i++) { int temp=i; new Thread(()-&g
2021-09-09 21:34:33
56
原创 Stamped读写锁
在加读锁之前,先尝试进行乐观读,根据获取的戳进行校验,若通过,则数据合法安全,否则升级锁为读锁,再进行相关操作。相关代码如下:public class TestLock { public static void main(String[] args) { DataContainer<Long>dataContainer=new DataContainer<>(1000L); new Thread(()->{
2021-09-09 20:49:00
92
原创 读写锁实现缓存应用
1.pom配置<dependencies> <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java --> <dependency> <groupId>com.mchange</groupId> <artifactId>mchange-commons-java&l
2021-09-09 16:52:51
68
原创 AQS之读写锁
public class ReaderWriterLock { public static void main(String[] args) { DataContainer<String> dataContainer=new DataContainer<>(); new Thread(()->{ try { Thread.sleep(1000); } catch (I.
2021-09-08 22:42:59
200
原创 自定义不可重入锁代码
public class TestAQS { public static void main(String[] args) { MyLock myLock=new MyLock(); new Thread(()->{ myLock.lock(); try{ System.out.println("locking..."); }finally { .
2021-09-08 20:58:53
118
原创 线程池fork/join使用
1求1+到n的结果用fork/join线程池实现(未优化版)public class TestFortJoin { public static void main(String[] args) { ForkJoinPool forkJoinPool=new ForkJoinPool(4); System.out.println(forkJoinPool.invoke(new Task(5))); //根据需要修改5的值 }}class Task e
2021-09-08 16:37:29
187
原创 线程池应用之定时任务
public class Test { @org.junit.Test public void timing(){ //获取当前时间 LocalDateTime dateTime=LocalDateTime.now(); System.out.println(dateTime); //获取下周四9点时间 LocalDateTime will=dateTime.withHour(9).withMinute(0)..
2021-09-08 15:24:43
87
原创 自定义线程池代码
public class TestPool { public static void main(String[] args) { Pools pools=new Pools(2,1000,TimeUnit.MILLISECONDS,2, ((queue, task) -> { //死等 // queue.put(task); //.
2021-09-08 15:24:09
113
原创 定时之Timer的缺点
1.由于只有一个线程进行任务的调度,给个任务之间是串行的,所以在执行是有所延迟,相关例子如下//延时 public static void main(String[] args) { TimerTask Task1=new TimerTask(){ @SneakyThrows @Override public void run() { System.out.println(.
2021-09-08 15:19:12
253
原创 Unsafe对象的相关操作
public class get_unsafe { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { //利用反射获取对象theUnSafe Field theUnsafe= Unsafe.class.getDeclaredField("theUnsafe"); //设置允许通过反射获取对象unsafe the.
2021-09-07 08:11:23
98
原创 JUC之原子数组
public class updater { public static void main(String[] args) { Student stu=new Student(); AtomicIntegerFieldUpdater fieldUpdater=AtomicIntegerFieldUpdater.newUpdater(Student.class,"age"); AtomicReferenceFieldUpdater referenceF.
2021-09-06 22:30:12
80
原创 线程之原子数组(AtomicIntegerArray)
/*函数式接口:Supplier:()->返回值 function: (参数)->返回值 Bifunction: (参数1 ,参数2)->返回值 BiConsumer: (参数1,参数2)->void Consumer: (参数1)->void*/public class test { private static <T> void demon( Supplier<T> arraySupplier, .
2021-09-06 22:03:33
106
原创 原子引用(AtomicReference)
1.AtomicReference:原子引用,可以用于乐观锁,避免线程上下文的切换,提升系统的运行效率。相关的“ABA”问题的代码如下:static AtomicReference<String>ref=new AtomicReference<>("A"); public static void main(String[] args) throws InterruptedException { System.out.println("start..")
2021-09-06 21:27:00
1032
原创 线程设计模式
1.固定运行顺序(1)wait-notifypublic class Asyn { //1,2 static Object obj=new Object(); static int flag=0; public static void main(String[] args) throws InterruptedException { Thread t1= new Thread(()->{ synchronized (obj
2021-09-06 15:54:34
128
原创 单例模式的编写
1.饿汉式模式public final class hungry implements Serializable { private static hungry single=new hungry(); public hungry() { } public static hungry getSingle(){ return single; } //实现了Serializable接口,防止序列化破话单例 public Object
2021-09-06 15:45:50
35
原创 JUC设计模式之保护性暂停(代码)
package com.mode;import java.util.Hashtable;import java.util.Map;import java.util.Set;public class suspension { public static void main(String[] args) throws InterruptedException { for (int i = 0; i <3 ; i++) { reciver t =n.
2021-09-02 16:52:36
149
原创 线程并发(三)
1.两阶段终止模式正确思想:sleep+interruptpublic class twoPhaseTermitation { public static void main(String[] args) throws InterruptedException { twoPhaseTermination tpt = new twoPhaseTermination(); tpt.start(); Thread.sleep(3500); .
2021-09-02 15:36:07
54
原创 解释器和JIT编译器
解释器1.初衷:单纯的实现Java程序的跨平台,避免采用静态编译将其转化为机器指令,运行时采用逐行解释字节码并执行程序。2.工作机制(1)担任翻译者,将字节码文件中的内容翻译为机器指令并执行(2) 每执行完一条指令后,便根据pc程序计数器执行下一条指令3.分类两套解释执行器为古老的字节码解释器和模板解释器。字节码解释器:执行时通过纯软件代码模拟字节码的执行,效率低下模板解释器:执行时将每一条字节码和一个模板函数相关联,模板函数直接产生这条字节码的机器指令,提高解释器的性能。
2021-07-28 10:11:58
359
原创 机器码,指令,汇编语言
指令1.机器码由0和1组成的二进制序列,其可读性差,但运行速度快,为方便阅读,人们发明了指令。2.指令就是把机器码中特定的0和1序列简化为对应的指令,一般为英文缩写。如jmp,add,mov等。3.不同平台对应的同一操作的机器码可能不同。指令集1.不同平台所支持的指令有所差异,把每个平台所支持的指令,称为该平台对应的指令集2常见的指令集x86指令集,对应的是x86框架的平台ARM指令集,······汇编语言1.在提高指令阅读性的基础上,又发明了汇编语言2....
2021-07-28 09:29:16
779
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人