使用注解的方式注册 Quartz 的 Job
Java 程序员最喜欢的就是造轮子了,后端开发中时常要自己造一些轮子,一个工具包、封装一些开源组件、功能定制化等等,太常见了。
在 Spring 的自造轮子最常见的莫过于设计个注解,然后扫描到后在 BeanPostProcessor
中处理该注解对象,并根据注解组装一个新的对象然后注册到 Spring 中。
场景如《Quartz 动态调度 Job》所述那样,现在对文中 @ScheduledJob
注解的实现做详细说明。
Java 程序员最喜欢的就是造轮子了,后端开发中时常要自己造一些轮子,一个工具包、封装一些开源组件、功能定制化等等,太常见了。
在 Spring 的自造轮子最常见的莫过于设计个注解,然后扫描到后在 BeanPostProcessor
中处理该注解对象,并根据注解组装一个新的对象然后注册到 Spring 中。
场景如《Quartz 动态调度 Job》所述那样,现在对文中 @ScheduledJob
注解的实现做详细说明。
如果需要要启动后向 Spring 容器个注册一个动态创建的对象,可以通过以下几个方式实现:
Spring 中常用 @PropertySource
注解来加载指定配置文件,但是 @PropertySource
注解也有一些限制,如:
本文将通过扩展的方式解决以上的需求。
最近在开发 Quartz Job 任务时有一种很迫切的需求,希望能动态调整生产的 Job 的运行,开启或停止 Job、调整 Job 的运行频率。翻了一下源码,基于 Quartz 的 Scheduler 扩展一个。
在开发集成了 Quartz 的应用时,由于 Quartz 在开发环境一般也会自动启动。这样会给人造成不少烦恼,一个是启动 Job 会影响本地的运行效率,同时如果是分布
式模式的 Quartz 会出现本地抢任务运行,又由于本地和测试环境的各种不一致,会出现很多奇怪问题。
GenericJackson2JsonRedisSerializer
是 Spring Data Redis 包提供的一个类,用于将 Java 对象与 JSON 字符串进行转换,存储于 Redis 时是 JSON,取出来时转换为 Java 对象。
该类是用于设置 RedisTemplate 的序列化器时一般这样配置:
1 | private RedisTemplate<Object, Object> createGenericRedisTemplate(RedisConnectionFactory redisConnectionFactory) { |
这个配置一般用起来是没问题的,但很快你会发现一些理所当然的配置会不生效。
@EnableWebMvc
注解并不是像一般理解的那样在 Spring Boot 中使用 Spring MVC 必需要有的配置,而且并不是像字面意思那样启用 Spring MVC 的
功能。
@EnableWebMvc
的作用是引入 DelegatingWebMvcConfiguration
类来支持通过 WebMvcConfigurer
来对 WebMvc 进行配置。但其引入 DelegatingWebMvcConfiguration
的结果是导致 Spring MVC 相关的自动配置功能失效。
得益于 Spring Boot 约定大于配置的特性,集成 Websocket 非常简单,只需在依赖中加入对应的 starter 就可完成引入。
1 | <dependency> |
加入 starter 后,websocket 已经完成引入,这时可以使用 @Configuration 类来配置,然后使用 @EnableWebSocketMessageBroker
来启用 WS。
在 Java 后端的数据校验常用 @NotNull
、@NotEmpty
或 @Size
等注解进行校验,但标应准的验证注解是很局限的,在一些特殊要求的验证中并不能满足需求。
要想实现业务用特定需求的验证只用定义一个注解和对应的校验类既可,下面实现一个非空字符串验证注解。
前段时间将 Shiro 作为权限模块整合到 Spring 中使用,也发了篇整合相关的文章《Shiro 方法上有权限注解的时候才鉴权》,讲如何实现在有打注解时才校验权限。
在集成后的项目中开发时出现有个 Service 的事务是无效的,@Transactional
注解无任何作用。检查后发现这个 Service 是在 Shiro 的 Realm 类中使用 @Autowired
注入的。