Spring Boot

搜索结果

在博客中搜索相关文章

79 篇文章 7

Spring定时任务

Spring在项目中通过Spring Integration模块提供定时任务功能,核心接口为TaskExecutor(执行Runnable)和TaskScheduler(调度任务)。常用实现包括ThreadPoolTaskExecutor和ThreadPoolTaskScheduler,满足大多数需求。使用时在配置类上加@EnableScheduling,标注@Scheduled的方法会被自动调度,方法必须无参无返回。默认单线程,可通过实现SchedulingConfigurer或在配置文件中设置spring.task.scheduling.pool.size来扩展线程池。@Scheduled支持cron表达式、fixedRate、fixedDelay和initialDelay等参数,分别控制执行频率、间隔和启动延迟。

解决SpringBoot打成jar包无法加载resources下文件的问题

SpringBoot 打成 jar 后,resources 目录下的文件(如 application.yml、ip2region.db 等)位于 jar 包内部,不能直接用文件路径读取,导致运行时加载失败。解决方案是使用 Spring 提供的 `ResourcePatternResolver`(如 `PathMatchingResourcePatternResolver`)获取资源对象,再通过 `getInputStream()` 读取内容,并在需要时复制到本地文件。示例代码展示了如何读取 `ip2region.db` 并写入磁盘,所需依赖仅为 Spring Core 与 Apache Commons‑IO。这样即可在 Linux 环境下正常访问 jar 包内的资源文件。

响应式编程与Project Reactor

响应式编程以数据流和事件为核心,强调异步、非阻塞和背压控制。Project Reactor 是 Java 的实现,提供 Reactor Core(Mono、Flux)、Reactor Netty 与 Reactor Spring 等组件,支持流的转换、过滤、聚合以及线程调度。Mono 表示单值或错误,Flux 表示零到多值流。背压让消费者调节生产速率,Schedulers 控制并行执行。结合 Spring WebFlux,可用 Flux.interval 等操作轻松构建高并发、低延迟的响应式 Web 服务,实现高吞吐量和弹性伸缩。

CGLIB与JDK动态代理

CGLIB和JDK动态代理都是为了解耦而产生的代理技术。JDK代理只能为实现接口的类生成基于接口的代理,需要实现InvocationHandler并使用反射;CGLIB则利用ASM字节码框架为目标类生成子类,覆盖非final方法,可对没有接口的类进行代理。Spring默认:bean实现接口时使用JDK代理,未实现接口时使用CGLIB,亦可强制指定。性能上,JDK在JDK6+及调用次数少时更快,CGLIB在大量调用且JDK8以前可能占优,但对final类/方法无能为力。CGLIB的实现核心是Enhancer.create生成子类并通过MethodInterceptor拦截方法,适用于AOP等场景。

操作系统(三)

悲观锁在每次访问共享数据前都加锁,假设最坏情况会被修改;乐观锁不加锁,更新时通过版本号或CAS检查冲突。CAS(Compare‑And‑Swap)提供原子比较替换,常用于高并发计数。IO 多路复用让单线程监控多个描述符,select、poll 均为 O(n) 轮询,select 限制 1024 个 fd、poll 无上限但仍拷贝数组;epoll 采用红黑树和就绪队列,支持水平(LT)和边缘(ET)触发,查询为 O(1),对大规模连接效率最高。域名解析依次查浏览器缓存、系统缓存、本地域名服务器、根服务器、gTLD 服务器、权威 Name Server,最终返回 IP 并缓存。Linux 配置 IP 可用 ifconfig、setup 或编辑网卡配置文件,使用 dig 解析域名。IP 地址由网络号和主机号组成,子网掩码划分网络与主机,网关指向外部路由。

HTML获取SpringBoot从model传的值

文章介绍了在 SpringBoot 中如何通过 Model 将数据传递到前端页面,并在 HTML 中使用 Thymeleaf 语法获取这些值。示例代码展示了在 controller 方法中使用 `model.addAttribute("key", value)` 将数据加入模型,然后在页面模板里通过 `[[${key}]]`(或 `${key}`)的双大括号写法直接渲染输出。文中还附有效果图,说明了数据成功显示的效果。整体说明了 SpringBoot 与 Thymeleaf 配合的基本数据传递与展示方式。

Spring AOP底层原理

Spring AOP 通过动态代理实现横向切面:当目标对象实现接口时,Spring 使用 JDK Proxy 生成代理;若目标未实现接口,则采用 CGLIB 为其生成子类代理。代理对象与原实现类同级,但并非真实实例,能够执行原类的所有功能,从而在不修改源代码的前提下实现 AOP。