跳至主要内容

博文

目前显示的是 2022的博文

在Spring Boot的schedule中使用shedlock

java-reflection-method-handle.md 简介 Spring Boot中使用内置的schedule时,在多个实例部署的情况下,如果只想让其中一个实例执行,可以自己用redis、zookeeper等实现,也可以直接用第三方实现。下面介绍其中一种实现:shedlock。 Shedlock shedlock的集成比较简单,首先在start.spring.io生成Spring Boot的demo包,再引入shedlock相关的依赖: < dependency > < groupId > net.javacrumbs.shedlock </ groupId > < artifactId > shedlock-provider-redis-spring </ artifactId > < version > 4.41.0 </ version > </ dependency > < dependency > < groupId > net.javacrumbs.shedlock </ groupId > < artifactId > shedlock-spring </ artifactId > < version > 4.41.0 </ version > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-data-redis </ artifactId > </ dependency > 由于是使用redis来实现锁,所以需要增加spring data redis相关依赖。 然后在启动类加上开启定时任务的注解: @EnableScheduling @SpringBootApplication

Java中使用MethodHandle的API反射

java-reflection-method-handle.md 简介 Java的反射API从1.0就开始提供,虽然反射的性能在逐步提高,而且对现在大部分应用来说,反射的开销都不太会影响性能。但是如果反射使用特别频繁或需要更进一步提高性能,可以使用从Java1.7开始提供的MethodHandle相关的API。 Method Handle method handle 的API有以下几个主要对象: Lookup 用于实例化各类method handle对象,是使用method handle的入口对象 MethodType 用于表示反射方法的参数对象 MethodHandle用于实际操作被反射的字段、方法等 下面使用一个简单的Person类来作为例子: public class Person { public String job ; private String name ; private String location ; public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } public String getLocation ( ) { return location ; } public void setLocation ( String location ) { this . location = location ; } public void print ( ) { System . out . println ( "Person job is " + job ) ; } } 获得Class对象 获得class对象,之前常用的有Class.forName(),getClass(),这些方法也可以用。methodHandle

使用sysbench对MySQL进行基准测试

Welcome file 简介 对当前硬件的MySQL进行基准测试,能够对MySQL在当前硬件下的表现有一定的了解。本文简单介绍一下如何使用sysbench对MySQL进行基准测试。 环境准备 MySQL 8.0.28 Debian 11 安装sysbench Debian/Ubuntu curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash sudo apt -y install sysbench 其他系统的安装方法可以在sysbench( https://github.com/akopytov/sysbench )的github项目主页中查看。 测试前准备 测试前,主要需要建立好对应的库和需要测试的数据 建立名为sysbench_test的库 create database sysbench_test 准备数据 sysbench oltp_read_write --table-size=10000000 --mysql-host=127.0.0.1 --db-driver=mysql --mysql-db=sysbench_test --mysql-user=root --mysql-password=root prepare table-size 表示需要准备的表的大小 后面的参数都是一些MySQL对应连接的参数 最后的prepare命令表示准备数据 开始测试 准备好数据之后,就可以开始进行基准测试了。 sysbench oltp_read_write --mysql-host=127.0.0.1 --db-driver=mysql --mysql-db=sysbench_test --mysql-user=root --mysql-password=root --table-size=10000000 --time=300 --threads=3 run time表示测试时间,单位是秒 threads表示测试的线程 测试完之后,会输出类似如下的结果(结果解释通过注释方式表示): sysbench 1.0.20 (using s

在Spring Boot中使用分布式锁

Welcome file 简介 在使用分布式锁时,经常会看到各种复制粘贴的实现,也会有很多需要注意的地方,一不小心就会出一些难以察觉的问题。还好Spring对分布式锁提供了几种方便的实现,本文简单介绍一下Redis锁的实现如何使用。 使用Redis实现分布式锁 POM文件 pom文件需要引入如下包: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-integration </ artifactId > </ dependency > <!-- Redis --> < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-data-redis </ artifactId > </ dependency > < dependency > < groupId > org.springframework.integration </ groupId > <