SpringBoot使用虚拟线程
并发编程的演化线程总所周知,线程(Thread)是计算机中的最小执行单元,由操作系统直接进行调度,每个线程都有自己的执行路径和执行状态,可以独立地运行和并发执行多个任务。 线程是一种重量级的资源,线程的创建、销毁以及在多个线程之间切换都需要耗费 CPU 时间,一个系统可以同时创建、调度的线程数量有限。所以,现在应用基本上都会使用 线程池 来解决这个问题,通过池化线程,可以减少线程频繁 创建 和 销毁 的成本。 例如,Servlet 容器(Tomcat、Undertow、Jetty)的并发模型就是通过线程池,为每一个请求分配一个线程池中的线程进行处理。但是,一旦涉及到阻塞操作(IO、网络请求),当前线程就会被挂起进入等待状态,这个线程就不能去执行其他任务。这就导致了,使用传统线程池并发模型的服务器能同时处理的请求有限。 而,当代 Web 应用基本上都是 IO 密集形应用,请求中执行的业务往往涉及到与数据库进行交互、调用远程服务(Socket IO),本地磁盘文件读写等等,因此使用阻塞式线程是非常低效的。 异步非阻塞编程为了解决传统线程在执行 IO...
SpringBoot参数校验及全局捕获处理
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。 注意:JSR-303实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。 Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。 @Valid注解使用使用步骤在Controller中使用 @Valid+BindingResult做参数校验非常好用。一般步骤如下: (1)引入pom依赖 123456789 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency><!--...
SpringBoot集成JPA详细教程
SpringBoot集成SpringData JPA依赖引入SpringBoot项目工程,在pom.xml中引入相关依赖包即可: 12345678910<!-- 数据库相关操作 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency> 入口注解SpringData...
SpringBoot整合Redis多数据源
基于配置文件 实现 redis 动态数据源和动态数据库的切换 MultiRedisConnectionFactory123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.dao.DataAccessException;import...
Springboot获取resources目录资源文件的9种方法
参考:https://developer.aliyun.com/article/1346532 Springboot 获取 /resources 目录资源文件的 9 种方法 测试方法 - 根据文件路径按行读取文件内容12345678910111213141516171819202122/** * 根据文件路径按行读取文件内容 * * @param fileInPath * @throws IOException */public static void getFileContent(Object fileInPath) throws IOException { BufferedReader br = null; if (fileInPath == null) { return; } if (fileInPath instanceof String) { br = new BufferedReader(new FileReader(new File((String)...
SpringBoot配置全局日期格式转换
SpringBoot 设置后台向前台传递 Date 日期格式在 SpringBoot应用中,@RestController 注解的 json 默认序列化中,日期格式默认为:2020-12-03T15:12:26.000+00:00 类型的显示 在实际显示中,我们需要对其转换成我们需要的显示格式 方式一:配置文件修改配置文件配置 application.yml 12345spring: # 配置日期格式化 jackson: date-format: yyyy-MM-dd HH:mm:ss #时间戳统一转换为指定格式 time-zone: GMT+8 # 时区修改为东8区 application.properties 配置方式 12spring.jackson.date-format=yyyy-MM-dd HH:mm:ss #时间戳统一转换为指定格式spring.jackson.time-zone=GMT+8 # 时区修改为东8区 这里需要修改时区 time-zone:数据库默认时区是格林尼治的时间,如果不设置,会比实际时间少 8...
GraalVM在windows上的环境搭建
前言 GraalVM是一个高性能、云原生、支持多种语言的虚拟机。 GraalVM环境搭建分为两步: 1、下载配置GraalVM和下载native-image。 2,下载配置windows sdk和msvc。 GraalVM下载配置GraalVM 进入到 GitHub 上的 GraalVM 发布存储库。选择适用于 Windows 的基于 Java 11、17 或 19 的发行版,然后下载。我选择的是java17-22.3.0的。 将目录更改为要安装 GraalVM 的位置,然后将.zip存档文件移动到该目录。我这里是放在D:\JDK 将存档解压缩到文件系统。例如D:\JDK 配置环境变量12GRAALVM_HOME=D:\JDK\graalvm-ce-java17-22.3.0JAVA_HOME=D:\JDK\graalvm-ce-java17-22.3.0 验证1234D:\testNative>java -versionopenjdk version "17.0.5" 2022-10-18OpenJDK Runtime Environment...
使用SpringBoot创建DockerImage(layers分层的使用)
简介在Spring Boot 2.3以前,我们创建Spring Boot - docker image最通用的办法就是将Spring boot的应用程序打包成一个fat jar,然后写一个Dockerfile,将这个fat jar制作成为一个docker image然后运行。 在Spring Boot 2.3发布后,附带了快速创建docker image的功能 传统做法和它的缺点首先创建一个非常简单的Spring Boot程序: 12345678910111213@SpringBootApplication@RestControllerpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @GetMapping("/getInfo") public String getInfo() { ...