spring
文章平均质量分 74
spring相关
shuxiaohua
这个作者很懒,什么都没留下…
展开
-
logback日志级别设置无效
项目同事在定位定时任务没执行时发现,定时任务中的日志没有打印(INFO级别),改成WARN后能够正常打印,检查logback.xml中发现对应的日志级别为INFO级别,后面翻阅资料发现,logging.level.xx配置的日志级别,能够覆盖logback.xml中配置的日志级别。以下是源码分析。原创 2023-05-22 20:59:35 · 2052 阅读 · 0 评论 -
redis集群模式下key过期事件监听
项目组准备将自建的redis切到公司云平台的redis服务;自建的redis用的是哨兵模式,而云平台的提供的redis服务用的是集群模式。切换前先分析redis用到了那些功能,redis集群模式下是否兼容。分析代码时发现,用到了RedisMessageListenerContainer,该类用于监听redis发出的消息(redis的发布订阅功能)。我们使用到了redis键过期通知的特性,来实现超时处理异步任务的。原创 2022-09-19 17:52:54 · 2824 阅读 · 5 评论 -
ES报错处理-mapper [xx.xx] of different type, current_type [text], merged_type [keyword]
我司有一套开源使用规范,衰退期的软件或版本需要升级到GA版本。我们ES服务端是6.8.x的,根据ES官方推荐版本,springdataelasticsearch使用的是3.2.x,配套的springboot版本为2.2.x.我们当前使用的版本已经比较老了,我们需要将springboot升级到2.6.x,并将springdataelasticsearch升级到4.3.x。........................原创 2022-07-19 20:09:21 · 4254 阅读 · 0 评论 -
spring日志配置文件路径规则
背景项目之前是通过命令行参数-Dlogging.config指定日志配置文件的路径的,后面应用docker化时,需要将这个配置文件打到应用包中,因此翻了下spring boot源码,看都支持哪些路径。spring boot初始化入口如之前文章的分析,spring boot是通过LoggingApplicationListener监听到ApplicationEnvironmentPreparedEvent后开始初始化日志系统的。从源码可以看到,spring boot有三种方式去获取日志配置,优先级如下:原创 2022-05-19 18:05:21 · 1577 阅读 · 0 评论 -
request.getRequestDispatcher().forward()的妙用以及DispatcherType 对Filter配置的影响
背景我们应用如上图所示,Nignx做负债均衡,微服务间使用feign进行调用。为了方便鉴权Filter配置拦截的url以及nginx配置对外暴露的url,我们为所有服务设计了统一的url规范类型用途v1/xx给前端用的urlv5/xx内部接口,服务间调用因此所有服务都未配置server.servlet.context-path那么问题来了,现在我们要把服务从虚拟机迁移到docker中。使用公司的docker需要有用于分发的文根,因为docker服务提供了公共域名原创 2022-04-22 20:32:35 · 3204 阅读 · 0 评论 -
log4j-slf4j-impl cannot be present with log4j-to-slf4j
背景项目使用@slf4j注解,注入日志组件进行日志打印。POM中引入了spring-boot-starter-logging、spring-boot-starter-log4j2、log4j2、slf4j、logback等多种日志组件。某次修改业务代码后,系统无法启动,并报错log4j-slf4j-impl cannot be present with log4j-to-slf4j。SLF4J: Class path contains multiple SLF4J bindings.SLF4J: F原创 2022-01-26 20:00:31 · 5683 阅读 · 0 评论 -
spring扩展-EnvironmentPostProcessor
EnvironmentPostProcessor原创 2021-10-11 15:29:09 · 377 阅读 · 0 评论 -
spring framework-IOC
概述备注:图片引用至http://www.51gjie.com/javaweb/981.html。spring framework架构的图片很多,上图比较贴合我个人通过阅读源码认识到的各个模块的关系。通过架构图实际上看不出spring framework里面的细节,引入该结构图主要是让读者对spring framework的模块划分有一个清晰的认识。spring framework的核心就是Bean容器,其他所有功能都是基于Bean容器的扩展点进行构建的。通过慢慢的接触spring源码,你会发现,刚原创 2021-07-27 23:10:35 · 88 阅读 · 0 评论 -
spring session date redis趟坑经验
目前大多数应用都是多实例或者多服务,这样带来了session共享的问题。原创 2021-07-17 17:00:00 · 276 阅读 · 0 评论 -
使用spring的注意事项
持续更新,本文来自spring官方文档BeanPostProcessorBeanPostProcessor的实现类通过@bean注解在配置类中配置时,方法的返回类型必须是实现类本身或者是BeanPostProcessor接口,这样能够清晰的指出其是BeanPostProcessor的实现类。否则ApplicationContext在完整的创建它之前,无法自动通过类型探测到它属于BeanPostProcessor接口。BeanPostProcessor接口实现类需要优先被实例化,然后处理后续其他bean,原创 2021-07-08 21:39:31 · 327 阅读 · 0 评论 -
springboot集成redis时报错:org.springframework.data.redis.serializer.SerializationExceptionng
问题使用spring boot集成spring cache redis,使用默认配置时,发现每次调用都不走缓存通过日志发现可疑点,org.springframework.data.redis.serializer.SerializationException: Cannot serialize;nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to原创 2021-07-04 18:57:32 · 770 阅读 · 0 评论 -
spring resources工具读取jar中的文件和目录
简述spring提供了resource抽象,方便大家去读取资源,其实现如下:UrlResourceClassPathResourceFileSystemResourcePathResourceServletContextResourceInputStreamResourceByteArrayResource不同的实现类有着不同的用途这里不做展开。除了基础的单资源文件的读取,spring提供了更强大的接口ResourcePatternResolver,该接口可以使用通配符去匹配多个文件原创 2021-07-02 22:32:33 · 561 阅读 · 0 评论 -
spring boot内嵌tomcat访问日志的常用配置
注:该文章是问了方便自己查询,转载的其他人的,转载连接:https://maoyunfei.github.io/spring/76c7f26f/tomcat log的配置server: tomcat: accesslog: enabled: true #是否开启日志 directory: /tmp/accesslogs/mobile-site #日志存储目录 pattern: '%t %a %A %m %U%q %s %D %I %B' #日志格式转载 2021-01-30 15:05:15 · 559 阅读 · 0 评论 -
ServletContainerInitializer、WebApplicationInitializer、ServletContextInitializer
ServletContainerInitializerServletContainerInitializer是servlet容器初始化时使用的接口,servlet容器通过java的SPI机制发现实现类,并实例化后调用初始化方法。具体的可以参考我之前的博客spring boot:servlet启动方式.WebApplicationInitializerorg.springframework.web.SpringServletContainerInitializer类实现了ServletContainer原创 2021-01-15 20:19:12 · 458 阅读 · 2 评论 -
spring如何实现Aware接口自动注入的(EnvironmentAware,ApplicationContextAware...)
概述spring中的组件实现如果实现了Aware相关的接口,容器会为它自动注入ApplicationContext,Environment这些spring内置的组件。那spring是如何自动注入这些组件的?spring中获取bean的流程spring的容器预留了BeanPostProcessor的扩展点,该接口的实现类,会在bean初始化前后,对bean进行处理。处理流程如下:Aware功能的实现从上述流程中可以看到,我们可以实现特定的BeanPostProcessor,来为bean实现Awa原创 2020-12-11 20:20:15 · 819 阅读 · 0 评论 -
spring扩展-自定义命名空间
概述XML格式中,标签是可以带命名空间的。命名空间主要是解决标签命名冲突的;可能某个标签名在同一个XML中代表两种意思,这是就需要使用命名空间来区分这两种不同的用途。详细的可以去百度XML命名空间。spring的解析XML时,会分两种情况,一种是默认命名空间标签,spring会正常当做bean来解析;还有一种是带命名空间的标签,比如:<tx:annotation-driven transaction-manager=“transactionManager”></tx:annotat原创 2020-12-04 19:57:57 · 189 阅读 · 0 评论 -
BeanFactory ApplicationContext
备注:此文部分来源于官网内容的翻译BeanFactoryBeanFactory API提供了spring IOC容器的基础功能。它特殊的设计大多数被用于与spring其他的模块或者第三方的框架进行集成。DefaultListableBeanFactory是高层(high-level)API(GenericApplicationContext)的委托容器,即高层次的API(ApplicationContext),都拥有一个DefaultListableBeanFactory类型的字段,并将容器功能委托给它原创 2020-12-03 11:21:56 · 105 阅读 · 0 评论 -
spring SPI SpringFactoriesLoader
概念SPI(service provider interface)是JDK内置的中服务发现机制,用法如下:定义服务的接口public interface ServiceInterface { String service();}实现接口public ServiceImp implements ServiceInterface { String service() { return ""; }}编写配置文件,文件路径必须为META-INF/原创 2020-12-02 17:40:28 · 392 阅读 · 5 评论 -
spring boot:servlet启动方式
serlvlet 3.0在web容器启动时为提供给第三方组件机会做一些初始化的工作,例如注册servlet或者filtes等,servlet规范中通过ServletContainerInitializer实现此功能。每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerIniti原创 2020-11-12 14:49:56 · 863 阅读 · 2 评论