spring boot
文章平均质量分 65
qq_duhai
好记性不如烂笔头...
展开
-
ThreadPoolTaskExecutor使用
当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。Executors为线程池工具类,相当于一个工厂类,用来创建合适的线程池,返回ExecutorService类型的线程池。线程池中只有一个线程。转载 2023-07-25 11:39:39 · 3025 阅读 · 0 评论 -
redis 实现发布订阅功能具体实现
在controller里面添加一个类:Receiver,转载 2023-07-12 10:17:49 · 610 阅读 · 0 评论 -
DeferredResult
当一个请求到达API接口,如果该API接口的return返回值是DeferredResult,在没有超时或者DeferredResult对象设置setResult时,接口不会返回,但是Servlet容器线程会结束,DeferredResult另起线程来进行结果处理(即这种操作提升了),并setResult,如此以来这个请求不会占用服务连接池太久,如果超时或设置setResult,接口会立即返回。给人一种异步处理业务,但是却同步返回的感觉。转载 2023-07-10 15:43:30 · 178 阅读 · 0 评论 -
ThreadPoolTaskScheduler轻量级多线程定时任务框架
ThreadPoolTaskScheduler 内部方法非常丰富,本文实现的是一种corn表达式,周期执行schedule(Runnable task, Trigger trigger) corn表达式,周期执行schedule(Runnable task, Date startTime) 定时执行定时周期间隔时间执行。间隔时间单位 TimeUnit.MILLISECONDSscheduleAtFixedRate(Runnable task, long period) 间隔时间执行。单位毫秒。转载 2023-07-05 15:39:22 · 846 阅读 · 0 评论 -
ApplicationListener和@EventListener
/事件和发布还是使用上边的@ComponentSystem.out.println("注解监听器1:" + event.getMsg());事件触发:com.njit.personal.unannotation.MyTestEvent注解监听器1:我来了!非注解监听器:我来了!转载 2023-07-05 10:33:10 · 203 阅读 · 0 评论 -
SpringBoot多环境开发该如何配置
SpringBoot多环境开发该如何配置 - 爱码帮™分享编程知识和开发经验原创 2022-11-23 08:46:41 · 143 阅读 · 0 评论 -
springboot中spring.profiles.include的妙用
启动命令spring.profiles.active指定文件中的值 > 文件中spring.profiles.active指定的文件列表中最后一次出现的值 > 文件中spring.profiles.include指定的文件列表中最后一次出现的值。我们有这样的一个springboot项目。此情况,已命令指定的配置文件中的值为准,其他文件中再配置spring.profiles.active也不会生效,如果不存在值,那么会以pring.profiles.include指定的最后一个文件中的值为准。转载 2022-11-21 15:04:56 · 4130 阅读 · 0 评论 -
Spring个性化加载配置@ConditionalOn...
@ConditionalOnBean详解_你就像甜甜的益达的博客-CSDN博客_conditionalonbean@ConditionalOnProperty的作用和用法_黑白格tt的博客-CSDN博客_conditionalonproperty转载 2022-07-25 09:20:13 · 520 阅读 · 0 评论 -
Spring Boot 启动时自动执行代码的几种方式
目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用注解实现。当然也可以去实现Spring的与接口去实现启动后运行的功能。在这里整理一下,在这些位置执行的区别以及加载顺序。static代码块static静态代码块,在类加载的时候即自动执行。构造方法在对象初始化时执行。执行顺序在static静态代码块之后。@PostConstruct注解PostConst转载 2022-07-05 13:56:01 · 482 阅读 · 0 评论 -
application.xml参数配置两次问题
application.xml中一个参数配置两次,是获取上面的还是下面的?原创 2022-06-28 11:05:12 · 184 阅读 · 0 评论 -
Springboot(二十)启动时数据库初始化spring.datasource/spring.jpa
spring.datasource下有两个属性 schme、data,其中schema为表初始化语句,data为数据初始化,默认加载schema.sql与data.sql。脚本位置可以通过spring.datasource.schema 与spring.datasource.data 来改变,源码如下:看getScripts源码,它还会加载schema-${platform}.sql文件,或者data-${platform}.sql文件,其中platform就是spring.datasource.转载 2022-06-01 16:40:56 · 3180 阅读 · 0 评论 -
spring.jpa.hibernate.naming.physical-strategy
spring.jpa.hibernate.naming.physical-strategy原创 2022-06-01 14:28:21 · 4304 阅读 · 0 评论 -
Spring Boot 如何热加载jar实现动态插件?
一、背景动态插件化编程是一件很酷的事情,能实现业务功能的 「解耦」 便于维护,另外也可以提升 「可扩展性」 随时可以在不停服务器的情况下扩展功能,也具有非常好的 「开放性」 除了自己的研发人员可以开发功能之外,也能接纳第三方开发商按照规范开发的插件。常见的动态插件的实现方式有 SPI、OSGI 等方案,由于脱离了 Spring IOC 的管理在插件中无法注入主程序的 Bean 对象,例如主程序中已经集成了 Redis 但是在插件中无法使用。本文主要介绍在 Spring Boot 工程中热加载 j转载 2021-12-29 13:55:37 · 2121 阅读 · 2 评论 -
springboot2、HikariCP连接池的JdbcTemplate的clickhouse连接
pom.xml<!-- clickhouse --> <dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.2.4</version> </dependency> <dependency>原创 2021-12-03 15:01:38 · 5331 阅读 · 1 评论 -
Spring Framework中基于注解的Bean装配原理
注解的使用大大简化了配置的过程,也更能表现代码与配置之间的直接关系,但同时也失去了部分配置统一管理的能力,对代码也有一定的侵入性这似乎并不影响开发者对注解使用的高涨热情,使用注解还是XML进行配置开发并没有统一的定论,以何种方式进行开发还是需要看具体的项目适合什么Spring Framework提供了众多配置类注解,但不知道各位在使用过程中是否有类似于如下的疑问 @Service、@Repository等注解本身还被@Component修饰,为什么要这样?有什么作用? // Servic转载 2021-09-09 15:41:56 · 408 阅读 · 0 评论 -
SpringBoot深入理解 -- @AliasFor注解的作用
本文解析SpringBoot中重要注解@AliasFor注解的作用,对于理解SpringBoot和后面阅读SpringBoot源码都很有帮助。我们都知道@SpringBootApplication注解,等于@EnableAutoConfiguration,@ComponentScan,@SpringBootConfiguration三个注解的组合。Spring是怎样将三个注解的整合到一个注解的呢?这就要说到@AliasFor了AliasFor可以定义一个注解中的两个属性互为别名。如pub转载 2021-09-09 15:16:59 · 969 阅读 · 0 评论 -
spring容器启动完成执行之SmartLifecycle
前言有时候我们业务需要在spring容器bean全部加载完成后执行,如分布式服务注册eureka、nacos等框架在服务启动后希望通知注册中心当前服务已启动,在服务停止时停止下线,这个时候就可以使用spring提供的SmartLifecycle使用直接上代码@Componentpublic class StartSmartLifecycle implements SmartLifecycle { private boolean running = false; @Ove转载 2021-04-09 14:47:21 · 368 阅读 · 0 评论 -
spring生命周期回调(加载之后和注销之前做一些操作)
有关Spring的生命周期回调在官网https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle有详细讲解。spring的生命周期回调分为Bean的生命周期回调和容器的生命周期回调。1 Bean的生命周期回调1.1 Bean的生命周期初始化回调1.1.1 @PostConstruct注解@Component@Scope(Co转载 2021-04-09 11:44:14 · 374 阅读 · 0 评论 -
spring注解之@PreDestroy的实现原理(spring优雅的退出)
一、引言在开发中我们如果要在关闭spring容器后释放一些资源,通常的做法有如下几种:1.在方法上加上@PreDestroy注解2.实现DisposableBean接口,实现其destroy方法比较常用的是第一种实现,因为其足够简便。下面就来分析一下它的实现原理,看它是在哪一个环节被触发的。二、开始分析我们先移步到CommonAnnotationBeanPostProcessor这个类中,看如下一段代码: public CommonAnnotationBeanPostProcess转载 2021-04-08 17:24:32 · 3103 阅读 · 0 评论 -
SpringBoot之退出服务时调用自定义的销毁方法
我们在工作中有时候可能会遇到这样场景,需要在退出容器的时候执行某些操作。SpringBoot中有两种方法可以供我们来选择(其实就是spring中我们常用的方式。只是destory-method是在XML中配置的,SpringBoot是去配置化。所以这里就不提这种方式了),一种是实现DisposableBean接口,一种是使用@PreDestroy注解。OK,下面我写两个例子看一下:DisposableBean接口我们可以通过实现这个接口来在容器退出的时候执行某些操作。例子如下: pack.转载 2021-04-08 17:17:33 · 2055 阅读 · 0 评论 -
spring-boot接口统一响应体
前言 如今web项目的接口大都是 RESTful 的,响应体中包含了一些接口执行的信息,比如返回的数据(data)、响应码(code)、是否成功(success)和响应描述(message)。每个接口都需要封装成这种格式,这样每次都需要留意。 下面来介绍一种方法,是 Spring 的 web 模块提供的功能。统一响应体pom依赖了web模块和lombok<dependency> <groupId>org.springframework.boot<转载 2020-09-11 17:15:47 · 342 阅读 · 0 评论 -
Spring Boot 快速入门 (1)
今天给大家介绍一下spring Boot MVC,让我们学习一下如何利用Spring Boot快速的搭建一个简单的web应用。环境准备一个称手的文本编辑器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)Java环境(JDK 1.7或以上版本)Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用ID转载 2016-12-22 11:54:55 · 298 阅读 · 0 评论 -
50. spring Boot日志升级篇—log4j【从零开始学Spring Boot】
Log4j是每个开发者比较熟悉的日志框架,所以咱们升级篇中优先介绍这个。那么如何操作呢?我们一起来看看使用过程吧。引入log4j依赖在创建spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-starter-logging,该依赖内容就是Spring Boot默认的日志框架Logback,所以我们在引入log4j之前,需要转载 2017-01-03 09:13:41 · 824 阅读 · 0 评论 -
51. spring boot属性文件之多环境配置【从零开始学Spring Boot】
原本这个章节是要介绍《log4j多环境不同日志级别的控制的》但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也会提到属性文件基本的一些知识,然后慢慢在升华到多环境配置。 相信很多人选择SpringBoot主要是考虑到它既能兼顾Spring的强大功能,还能实现快速开发的便捷。我们在Spring Bo转载 2017-01-03 09:43:12 · 251 阅读 · 0 评论 -
52. spring boot日志升级篇—log4j多环境不同日志级别的控制【从零开始学Spring Boot】
在上一章节中我们介绍了,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我们要自己手工编辑log4j.properties文件来调整日志级别,不论在版本库中默认保存哪个环境的级别设定,都会增加其他环境使用人转载 2017-01-03 09:54:43 · 221 阅读 · 0 评论 -
54. spring boot日志升级篇—logback【从零开始学Spring Boot】
在《44.spring Boot日志记录SLF4J》章节中有关相关的介绍,这里我们在深入的了解下logback框架。 为什么要使用logback ? ——在开发中不建议使用System.out因为大量的使用会增加资源的消耗。因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序。而使用Log工具不但可以控制日志是否输出,怎么输出转载 2017-01-03 09:56:41 · 743 阅读 · 0 评论 -
55. spring boot 服务配置和部署【从零开始学Spring Boot】
spring Boot其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。 一、内嵌Server配置 Server的几个常用的配置转载 2017-01-03 10:04:40 · 323 阅读 · 0 评论 -
56. spring boot中使用@Async实现异步调用
什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。 同步调用下面通过一个简单示例来直观的理解什么是同步调用: 定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(转载 2017-01-03 10:15:45 · 187 阅读 · 0 评论 -
57. Spring 自定义properties升级篇
之前在两篇文章中都有简单介绍或者提到过 自定义属性的用法: 25.spring Boot使用自定义的properties【从零开始学Spring Boot】 51.spring boot属性文件之多环境配置【从零开始学SpringBoot】 但是在实际开发过程中有更复杂的需求,我们在对properties进一步的升华。在本篇博客中您将会学到如下知识(这节中有对之前的转载 2017-01-03 10:19:22 · 309 阅读 · 0 评论 -
58. Spring Boot国际化(i18n)
国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。 那么当我们使用spring Boot如何进行国际化呢?那么当你读完这篇文章你会学到如下知识:转载 2017-01-03 13:54:04 · 401 阅读 · 0 评论 -
59. Spring Boot Validator校验
大纲:(1) 入门例子;(2) 国际化;(3) 在代码中添加错误信息; (1) 入门例子; Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。那么在spring boot怎么使用这么强大的校验框架呢。在这里我们主要是使用注解进行学习。我们先说说我们的需求:我们有一个demo.html,在转载 2017-01-03 14:19:17 · 347 阅读 · 0 评论 -
61.mybatic insert异常:BindingException: Parameter 'name' not found
【从零开始学习SpirngBoot—常见异常汇总】 异常信息如下:nested exception isorg.apache.ibatis.binding.BindingException: Parameter 'name' not found. Availableparameters are [0, 1, param1, param2] 出现这个异常的原因是因转载 2017-01-03 14:35:11 · 580 阅读 · 0 评论 -
62. mybatis 使用PageHelper不生效
【从零开始学习SpirngBoot—常见异常汇总】在Spirng Boot中集成了PageHelper,然后也在需要使用分页的地方加入了如下代码: PageHelper.startPage(1,1);但是就是不生效呢,数据库的所有数据都查询出来了这是咋回事呢?这个可能你使用错了版本号,主要是pom.xml文件中的版本的引入,错误的版本引入:dependency>转载 2017-01-03 14:36:51 · 2099 阅读 · 0 评论 -
63. JPA/Hibernate/Spring Data概念
【从零开始学习SpirngBoot—常见异常汇总】 事情的起源,无意当中在一个群里看到这么一句描述:”有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa”?然后大家就进行各种回答,但是没有有质疑这句话描述的合理性,个人觉得需要清楚概念的,在这里mybatis大家肯定是没有什么疑问,我们把上面那句话更改下,方便我们抛出一些点出来,去掉mybatis修改为:转载 2017-01-03 14:42:20 · 270 阅读 · 0 评论 -
64. JPA命名策略
这一章节中有人碰到这样一个问题“导入的数据和我自己生成的表不对应 自己生成的表名有下滑杠连接符”。这个问题主要是JPA的命名策略不一致导致的。我们有这么一个配置:spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.DefaultNamingStrategy这里的值有两个可选的配置:[j转载 2017-01-03 14:55:42 · 311 阅读 · 0 评论 -
66. No EntityManager with actual transaction available for current thread
【从零开始学习SpirngBoot—常见异常汇总】具体异常信息:org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transactionavailable for current thread - cannot reliably转载 2017-01-03 15:42:18 · 1038 阅读 · 0 评论 -
67. @Transactional的类注入失败
【从零开始学习SpirngBoot—常见异常汇总】 spring的代理模式有两种:Java自带的动态代理模式和cglib代理模式,cglib代码模式适用于没有接口的类,而java自带适用于接口类,默认情况下spring boot或者spring 采用接口类的代理模式,如果我们是基于接口编程的,是不会发生问题的,但是如果我们定义了一个class类继承Base类的时候就会出问题转载 2017-01-03 15:43:56 · 767 阅读 · 0 评论 -
68. 使用thymeleaf报异常:Not Found, status=404
【从零开始学习SpirngBoot—常见异常汇总】 我们按照正常的流程编码好了 controller访问访问方法/hello,对应的是/templates/hello.html文件,但是在页面中还是抛出了错误信息:Whitelabel Error PageThis application has no explicit mapping for /error, so you转载 2017-01-03 15:48:15 · 1472 阅读 · 0 评论 -
69. JPA实体Bean的生命周期
【从零开始学习SpirngBoot—常见异常汇总】 在使用JPA的时候,如果对bean的生命周期不了解的话,难免会碰到一些问题,比如:InvalidDataAccessApiUsageException:Removing a detached instance。 那么这一小节说说实体Bean的生命周期。1、实体Bean生命周期的4种状态实体分为被容器管理和不转载 2017-01-03 15:49:58 · 333 阅读 · 0 评论 -
70. 打印所有Spring boot载入的bean
【从零开始学习SpirngBoot—常见异常汇总】问题的提出: 我们在开发过程当中,我们可能会碰到这样的问题:No qualifying bean 就是我们定义的bean无法进行注入,那到底是什么原因呢,有时候挺难定位的,当然这个也需要养成良好的编码习惯,这样也会降低出错的几率。那么一般说是No quanlifying bean很有可能就是我们没有使用注解或者xml注入我们转载 2017-01-03 15:50:36 · 529 阅读 · 0 评论