
Spring
Yanbin_Q
真没什么要交待的,保持沉默
展开
-
升级到 Spring Boot 3 后 javax.inject.Named 不可用
Spring 6 要求用 JDK 17+, Spring Boot 3 自然也要上 JDK 17+ 才能使用,对于一直死死抱住 JDK 8 不放的要升级到 Spring Boot 3 就是个比较大的挑战。Spring Boot 1 的项目还得老老实实的先升级到 Spring Boot 2,如果是早期的 Spring Boot 2,第一步是升级到 Spring Boot 2.7.x, 一步步来,免得步子大了扯到X。从 Spring Boot 2.x 升级到 Spring Boot 3 的指南请阅官方的文档。原创 2023-01-18 13:30:18 · 247 阅读 · 0 评论 -
Spring Boot Web 输出 Tomcat 的访问日志到控制台
属性文件中的配置针对的是如何输出访问日志到文件,而我们有时候需要输出访问日志到控制台而不非文件,比如 AWS 上的 ECS 应用,控制台的输出可直接发送到 CloudWatch,这样便于分析日志。在 Spring Web 中可以用 Interceptor 或 Filter 来记录访问日志,但在请求出错时无法准确显示出响应时间和状态码,毕竟 Tomcat 的访问日志在代码的外层,进出 Controller 方法的输入输出信息也就掌握的更清楚。原创 2022-12-31 00:04:29 · 1174 阅读 · 0 评论 -
SpringBoot 启用 GZIP 对响应进行压缩
SpringBoot Web 应用默认是不启用响应数据的压缩,对大的文本类型的响应数据进行压缩是十分必要的,如 JSON, XML 等应用数据,甚至是 JS, CSS 等。(或 application.yml) 配置就行。于是查阅 SpringBoot 2.7.x 的帮助文档。在使用了 SpringBoot 之后,在碰到有压缩响应的需求的时候,第一件事情应该要想到是否能通过在。早先的 Web 应用基本是要配置一个叫做。之类的东西,然后判断请求的。响应类型的数据进行压缩。, 介绍了三个配置项。原创 2022-10-10 23:58:20 · 578 阅读 · 0 评论 -
Spring Boot 如何选择 Cache 实现的
来选择自己的 Cache 实例,但对 Spring 是如何确定具体 Cache 实现未作展开。本文将介绍选择 Cache 实现的几种方式。一文的补充,该文中提到了自定 CacheManager 及配置。原创 2022-08-16 11:09:33 · 300 阅读 · 0 评论 -
Spring 使用 Cache 解析及使用不同类型的 Cache
要在一个Spring应用中开启缓存方法返回结果的功能很简单,不需要额外的依赖,相关的的注解@Cacheable,@CacheConfig,@CachePut,@CacheEvict,@EnableCache等来自spring-context包。实际进行数据缓存时会有更复杂的策略,如元素个数,占用内存,过期时间,何时使用磁盘等,而且不同的数据类型应有不同的缓存策略。因此,除了使用默认的ConcurrentMap作为缓存外,还可通过配置属性。...原创 2022-07-15 13:45:01 · 1204 阅读 · 0 评论 -
自定义 Spring Web Controller 方法的参数
在 Spring Web Controller 方法中的参数可用 org.springframework.web.bind.annotation 下的各种注解来说明参数值从哪儿获得,比如我们熟知的 @PathVariable, @RequestParam, @RequestHeader, @RequestBody, 还有较少使用的 @ReqeustAttribute, @SessionAttribute, @RequestPart, @MatrixVariable, @ModelAttribute, @Au原创 2022-07-09 01:33:27 · 237 阅读 · 0 评论 -
深度理解 Spring Boot Security + JWT Token 的简单应用
项目中有用到 Spring Security 来控制 API 的访问权限,但对于配置应用它基本上是照葫芦画瓢。至于为什么要调用方法并且能从 HttpServletRequest 中得到 Authentication。还有,只要在 Controller 的方法中添加一个带 @AuthenticationPrincipal 注解的参数之后,decodedJWT 便自动有了值,诸如此类的,此前一概模糊不清。早先配置 spring-security-config 是通过继承 WebSecurityConfigure原创 2022-07-05 13:33:36 · 388 阅读 · 0 评论 -
SpringBoot2 应用 Axis 1.4 开发 WebService
有了前一篇应用 Axis 1.4 开发 WebService的对 Axis 1 较为深刻的理解后,现在正式给古老的 Axis 1.4 拉个伴,那就是 SpringBoot2。SpringBoot2 + Axis 1 的主要工作就是把 Axis 的web.xml用 SpringBoot2 的方式进行转述。在 SpringBoot 中用 Axis 1 后,有两个特性不再支持不再支持 jws 即时发布 Web Service,不能直接搬用 url-pattern *.jws,没继续深究,实际中希...原创 2021-12-22 06:24:58 · 732 阅读 · 0 评论 -
运行时动态创建 Spring Bean
通常我们注册 Spring Bean 是通过像 @Named, @Bean, @Component, @Service 这样的注解来注册的,或者用更为古老的 XML 配置文件的方式。难免有时候要根据实际业务需求在 Spring 运行期间动态注册 Spring Bean, 比如基本某种形式的配置文件或系统属性来注册相应的 Bean, 这好像又回到了 XML 文件注册方式,也不尽然。那为什么在运...原创 2020-03-21 11:14:32 · 1995 阅读 · 0 评论 -
Java 元注解及 Spring 组合注解应用
Java 1.5(Tiger) 个人认为最为激动人心的两个特性是泛型与注解(Java Versions, Features and History)。泛型自然是不必说了,注解对 Java 世界的改变比泛型伟大的多(现在框架的注解配置),在 Java 1.5 之前我们只能在 Javadoc 注释中做文章,于是只能用 XDoclet 那样不伦不类的东西。Java 的注解发展到现在几乎可以使用在书写代码...原创 2019-07-22 08:56:18 · 175 阅读 · 0 评论 -
Spring ServiceLocator 介绍及应用
在 Spring 中应用 ServiceLocator 方式来获取 Spring Bean 的介绍参考了那么多,其实还是数官方的ServiceLocatorFactoryBeanJavaDoc 文档最言简意该了。Spring 的 ServiceLocator 仿佛用处不大,说到底就是类似于下方找寻某个 Spring Bean 一样:ApplicationContext context = ...原创 2019-07-22 08:47:36 · 1115 阅读 · 0 评论 -
Spring 中 FactoryBean 的使用
许久没记录笔记了,这回来重新熟悉一下 Spring 中 FactoryBean 的使用,顾名思义,它是用来获得相应 Bean 的工厂的。它与另一个 Spring 中的接口 BeanFactory 的作用不一样的,不能多说了。FactoryBean 和 BeanFactory 都是在org.springframework.beans.factory包中,谁能一看类名搞清楚它们的差别?Fact...原创 2019-07-22 08:46:28 · 329 阅读 · 0 评论 -
Spring Boot 与 Logback 日志配置
本文记录 Spring Boot 与 Logback 是如何工作的,即记录 Spring Boot 中 Logback 是怎么一步一步初始化的。用以测试的 Spring Boot 版本是 1.5.16, 而非最新的 Spring Boot 2。关于 Spring Boot 日志的官方文档在 Logging, 但不太详细或透彻。本文不承诺说理解得更有深度,只是为官方文档提供更多方面的参考。S...原创 2018-10-08 14:51:41 · 192 阅读 · 0 评论 -
Springfox 解决在单一资源操作多个方法实现时生成 Swagger 文档的问题
在命名本文的标题都敲打了几分钟时间,问题很简单,然而用简短的一个标题完全描述出来却有点费事。在 Spring MVC 项目结合 Springfox 来生成 Swagger API 文档时,如果一个资源操作因为请求参数的不同而映射到多个 controller 方法,那么 Swagger 可能只能生成某一个 API 条目,其余都被忽略。至于为什么说是 "可能", 可能正好未遵循命名规范而躲过了这一劫。...原创 2018-05-08 03:36:49 · 651 阅读 · 0 评论 -
Spring MVC 项目中用 SpringFox 生成 Swagger2 API 文档
前面写过一篇如何建立 一个最基础的 Spring 4 MVC Maven 项目,现在是要在此基础上使用 SpringFox 来生成 Swagger 文档以及 SwaggerUI。Swagger 2 是基于 OpenAPI3.0 的实现,SpringFox 是用于在 Spring 项目中生成 Swagger 文档及 UI, 主要包括两个组件 springfox-swagger2 和 springf...原创 2018-05-08 03:36:17 · 710 阅读 · 0 评论 -
一个最基础的 Spring 4 MVC Maven 项目
这是一个最基本的 Spring 4 MVC 的 Maven 项目,非 SpringBoot 的,SpringBoot 由于有许多自动化配置特性,会更简单些。本例全部用 Java 代码作为配置,免除了创建 web.xml 和如 dispatcher-servlet.xml 这样的文件。本人更倾向于 Java 配置,它的优势在于能进行编译期检查,逻辑性也强,配置文件只是改动无需重新编译,都是要重启服务...原创 2018-05-08 03:35:25 · 318 阅读 · 0 评论 -
用 Spring MVC 来处理向导式复杂表单
引子 我们在网上经常会碰到一些向导式的表单页面,比如 第一步 >> 第二步 >> 第三步…、基本信息 >> 联系方式 >> 兴趣爱好…。它们都是按类型分到多个有序的页面要你来完成填写的。当然,你也可以把它们全部罗列在一个页面里,那样用户就会感觉茫茫然,分不清主次,可能不会很好的予以配合。然而像 Struts、WebWork 那样的 MVC 框架未提供类似的实现,都需自己采用某种方式来实现向导,可以原创 2008-10-12 09:34:00 · 8399 阅读 · 6 评论 -
小试 Spring Boot - Spring MVC
前阵想试下 Spring MVC 4 有了些什么新特性, 可真正用 Maven 在 IDE 中建立一个项目并不那么容易. Spring 当初在笑 EJB 的笨重时如今把自己也搞大了, 继而出台了一个 Spring Boot 来响应微服务的号召.Spring Boot 的出世可以大大提升使用 Spring 框架时的开发效率. Spring 尽量简化 Spring 项目的配置, 一个 mv原创 2017-01-17 23:29:57 · 319 阅读 · 0 评论 -
如何定制 Spring Boot 的 Banner
当我们启动一个 Spring Boot 的 Hello World 程序, 可以看到 Spring 会在控制台下输出一段 ASCII 字符组成的 Spring 字样, 像这个图中的样子, 并且 ":: Spring Boot ::" 是绿色显示, 版本号灰色. 如果每个 Spring Boot 做的应用都用默认的 Banner 就不好玩了, 无外乎只在声明我正在用 Spring Boot. 好原创 2017-01-17 23:31:25 · 1228 阅读 · 0 评论 -
Spring 项目中把 SQL 语句写在 .sql 文件中
我们在使用 JDBC 时, 如果把所有的 SQL 语句全写在 Java 文件中, 由于 Java 不支持 Here Document, 多行字符串要么用加号, 要么用 Java 8 的 String.join() 方法来连接, 同时不能对 SQL 语句进行语法加亮, 所以这样的 SQL 字符串阅读性很差. 别说为何不用 Hibernate 之类的而不直接写原始的 SQL 语句, 在操作复杂的系原创 2017-02-02 14:24:01 · 3471 阅读 · 0 评论 -
Spring 如何初始化泛型类实例
在 Java 中对于泛型类型,比如这样简单的类定义class Processor {}如果直接初始化时要指定具体类型的话,我们可以这么写Processor processor = new ProcessorSpring 对基本泛型的初始化如果我们要用 Spring 容器来初始化这个类,比如给上面那个类加个 @Named 注解@Na原创 2017-02-02 14:24:58 · 4083 阅读 · 0 评论 -
JdbcTemplate 易被 Java 8 Lambda 带入的坑
Spring 的 JdbcTemplate 为我们操作数据库提供非常大的便利,不需要显式的管理资源和处理异常。在我们进入到了 Java 8 后,JdbcTemplate 方法中的回调函数可以用 Lambda 表达式进行简化,而本文要说的正是这种 Lambda 简化容易给我们带来的一个 Bug, 这是我在一个实际项目中写的单元测试发现的。下面就是我们的一个错的样板代码,在我们的 UserRe原创 2017-04-14 23:39:35 · 1137 阅读 · 0 评论 -
Java 的参数检查与断言 - Spring Assert
之前有一篇 Java 的参数检查与断言 介绍了在 Java 中如何应用 Guava 的 Preconditions 来进行参数检查与状态断言,原本是可以心无旁骛,专心的用它就行了,可是刚刚因琢磨我们使用 JdbcTemplate 存在的一大 Bug,阅读 Spring 的源代码时发现 spring-util 也提供了一个类似于 Gruva Preconditions 的工具类 -- Asser原创 2017-04-22 14:04:27 · 2596 阅读 · 0 评论 -
Spring 项目中把属性或 SQL 语句写在 .xml 文件中
Spring 项目中把大量的 SQL 分散在 Java 代码中,无 Here Doc 的情况下用加号来连接写着实在是不爽,于是之前思考这个 Spring 项目中把 SQL 语句写在 .sql 文件中 -- 把它们写在 *.sql 文件中,但是这个 *.sql 需要特定的格式来标识属性 Key--!select.userselect id, firstname, lastnam原创 2017-05-06 07:27:24 · 6545 阅读 · 0 评论 -
Spring 定时任务(Schedule) 和线程
Spring 定时任务实例Spring 中使用定时任务很简单,只需要 @EnableScheudling 注解启用即可,并不要求是一个 Spring Mvc 的项目。对于一个 Spring Boot 项目,使用定时任务的简单方式如下:pom.xml 中 org.springframework.boot spring-boot-starter-par原创 2017-06-09 15:10:49 · 3641 阅读 · 0 评论 -
理解 Spring 定时任务的 fixedRate 和 fixedDelay 的区别
用过 Spring 的 @EnableScheduling 的都知道,我们用三种形式来部署计划任务,即 @Scheduled 注解的 fixedRate(fixedRateString), fixedDelay(fixedDelayString), 以及 cron. cron 不在这里讨论的范畴。我们着重在如何理解 fixedRate 和 fixedDelay 的区别。在 Spring原创 2017-09-07 16:08:12 · 41335 阅读 · 0 评论 -
Spring 下基于自定义注解拦截方法调用
其实很多年前就做过如此的实验,一翻开自己的日志有关于 aspectj site:unmi.cc, 可以找到 2008 年写的日志。真是流光容易把人抛,红了樱桃,绿了巴蕉。只是那时候 Spring 刚步入 2.0, 才翻开强大 AOP 的篇章,还记得彼时只要是直接使用 AspectJ 就要写 *.aj 文件。而如今 Spring 都到 5.0 了,也就是一年前才重拾起 Spring, 这期间原创 2017-09-30 23:18:49 · 1648 阅读 · 0 评论 -
记录一下 Spring 如何扫描注解的 Bean 与资源
Spring 相关代码分析本文通过对 Spring 的源代码来理解它是如何扫描 Bean 与资源的,因为自己有一个类似的需求,想把一堆的配置文件丢到 resources 下某个目录中,在程序启动的时候能加载它们。因为文件名是不一定的,所以不能直接指定文件名来加载,通过对 Spring 扫描资源的理解后,可以在自己的代码中手工扫描那些配置文件,以后有任何新的配置文件只需要扔到相应的配置目录即原创 2017-11-13 10:38:00 · 2040 阅读 · 0 评论 -
Spring MVC 中的 MultiActionController 用法详解
Spring MVC 中 Controller 的层次实在是多,有些眼花缭乱了。在单个的基础上,再新加两三个叫做丰富,再多就未必是好事,反而会令人缩手新闻片脚,无从定夺。多数 Controller 都是只完成一个任务,不过也有一个像 Struts 的 DispatchAction 的那样的 Conntroller,org.springframework.web.servlet.mvc.multia原创 2008-10-21 13:07:00 · 10574 阅读 · 7 评论