在Spring的使用中,有时初始化一些公共类,比如数据源、常量配置等,这些方法会执行两次,导致程序执行出现异常。
一个解决方法是利用Spring的事件机制,事件机制需要实现ApplicationListener监听器,只要编写一个实现类实现该接口的onApplicationEvent方法,在方法体中初始化应用需要的初始化数据,并做防二次初始化的处理。
此处是一个jedis工厂类的代码:
public class JedisFactory implements ApplicationListener<ApplicationEvent> { private static Logger logger = LogHelper.LOG_CollectDataService; private static JedisPoolConfig jedisPoolConfig; private static JedisPool jedisPool; private static boolean isStart = false; @Value("${redis.maxActive}") private String maxActive; @Value("${redis.maxIdle}") private String maxIdle; @Value("${redis.maxWait}") private String maxWait; @Value("${redis.ip}") private String host; @Value("${redis.port}") private String port; @Override public void onApplicationEvent(ApplicationEvent event) { if (!isStart) { isStart = true; try { jedisPoolConfig = new JedisPoolConfig(); // 最大连接数 jedisPoolConfig.setMaxActive(Integer.parseInt(maxActive)); // 最大空闲连接数 jedisPoolConfig.setMaxIdle(Integer.parseInt(maxIdle)); // 获取连接最大等待时间 jedisPoolConfig.setMaxWait(Integer.parseInt(maxWait)); // 设置获取连接前是否进行连接测试 jedisPoolConfig.setTestOnBorrow(true); jedisPool = new JedisPool(jedisPoolConfig, host, Integer.parseInt(port)); logger.info("JedisPool 已初始化, ", JSON.toJSONString(jedisPool)); } catch (Exception e) { logger.error("JedisPool 初始化异常", e); } } } public static Jedis getJedis() { Jedis jedis = null; try { logger.info("jedisPool = ", jedisPool.toString()); jedis = jedisPool.getResource(); return jedis; } catch (Exception e) { logger.error("获取Jedis实例异常", e); jedisPool.returnBrokenResource(jedis); return null; } } /** * 将jedis对象释放回连接池中 * * @param jedis 使用完毕的Jedis对象 * @return true 释放成功;否则返回false */ public static boolean release(Jedis jedis) { if (jedis != null) { jedisPool.returnResource(jedis); return true; } return false; } }
相关推荐
Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...
在Spring框架中,Bean的创建和初始化是IoC(Inversion of Control)容器的核心功能,这一过程涉及到多个步骤。以下是对Spring Bean创建初始化流程的详细解释: 1. **初始化ApplicationContext**: 开始时,通过`...
beanFactory.preInstantiateSingletons()的初始化过程详解,包含了所有的调用过程。
Spring初始化参数的顺序是: 1. 对象初始化——构造方法 2. 对象初始化——`@PostConstruct`注解的方法 3. 对象初始化——实现了`InitializingBean`接口的`afterPropertiesSet`方法 4. 对象初始化——自定义的`init`...
下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...
### Spring的IoC容器初始化源码解析 #### 一、Spring框架的核心——IoC容器 Spring框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented ...
初始化后可访问Spring管理的Bean
Spring Bean的初始化和销毁实例详解 Spring Bean的初始化和销毁是Spring框架中一个非常重要的概念,它们都是Bean生命周期中不可或缺的一部分。在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下...
spring配置对象实例化后执行的方法,两种实现比对,通过InitializingBean接口,并实现arterPropertiesSet()方法;或者通过applicationContext.xml配置init-method属性
当`lazy-init`设置为`true`时,Spring容器不会在启动时立即创建Bean,而是在第一次请求该Bean时才进行初始化。这可以有效地延迟初始化,提高应用启动速度。例如,配置为`...
在Spring MVC框架中,应用程序启动时会执行一系列初始化操作,这些操作对于理解Spring MVC的工作原理至关重要。本篇文章将深入探讨Spring MVC启动时初始化的几个常用方法,并解释它们在实际开发中的作用。 首先,...
综上所述,Spring Bean重复执行两次的问题通常是由于配置错误、依赖注入循环、初始化回调的不当使用、静态工厂方法的误用、AOP代理的配置问题或是Bean作用域设置不准确导致的。通过仔细检查和修正这些问题,可以避免...
"Spring初始化和销毁的实现方法" Spring框架中,Bean的初始化和销毁是非常重要的两个生命周期过程。今天我们将讨论Spring中 Bean 的初始化和销毁的实现方法。 1. 通过@Bean指定init-method和destroy-method 在 ...
那么Spring初始化的`Processor<T>`将会是`Processor<String>`: ```java Processor<String> processor = new Processor(); processor.service = new StringService(); ``` 如果`Service<T>`是`NumberService...
2. **初始化回调**:如果Bean定义中指定了初始化方法,Spring会在Bean实例化后调用这个方法。 3. **AOP代理**:如果Bean配置了AOP代理,Spring会创建一个代理对象来包装原始的Bean实例,以便在方法调用时执行拦截器...
在Spring框架中,Bean的初始化是其生命周期中的关键步骤,特别是在单例模式下,Spring容器会确保在应用程序启动时创建并初始化所有非延迟加载的单例Bean。在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的...
在本文中,我们将深入探讨如何使用Kotlin与Spring Boot构建一个初始化脚手架,并结合Mybatis Plus进行数据库操作的优化,以实现高效的应用快速开发。 首先,Kotlin是一种静态类型的编程语言,它提供了现代编程语言...
本篇文章将详细探讨如何在Spring Boot框架中集成并初始化Camunda流程引擎。 **Spring Boot集成Camunda** Spring Boot以其“开箱即用”的特性,简化了Java应用的开发过程。集成Camunda到Spring Boot项目中,可以...
Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责加载和管理 Bean。 SpringApplication...