¿Cómo reinicializar un Spring Bean?

2 minutos de lectura

¿Es posible reiniciar un Spring Bean en tiempo de ejecución?

My Bean usa configuraciones estáticas que en algunos casos cambian y luego tengo que reiniciar el bean.

  • Puede acceder al bean desde el contexto correcto y luego simplemente crear un método update dentro de la clase de bean, a la que puede llamar en función de su activador para actualizar el bean.

    – Amith Kumar

    6 de julio de 2018 a las 22:04

  • Mi bean es una función dentro de una clase de configuración. ¿Funciona una función de actualización para esta constilación?

    – Fip

    6 de julio de 2018 a las 22:34

  • Sí, incluso si crea un bean a partir de un método, sigue siendo un objeto dentro del contexto de Spring y se puede acceder a él como a cualquier otro bean.

    – Amith Kumar

    6 de julio de 2018 a las 23:01

avatar de usuario
amith kumar

Tiene tres opciones para actualizar el bean singleton en el contexto de primavera, puede elegir una adecuada para su caso de uso:

Método de recarga en el Bean

Cree un método en su bean que actualizará/recargará sus propiedades. En función de su disparador, acceda al bean desde el contexto de primavera y luego llame al método de recarga para actualizar las propiedades del bean (desde singleton), también se actualizará en el contexto de primavera y en todos los lugares en los que se conecta/inyecta automáticamente.

Eliminar y registrar Bean en el registro

Puedes usar DefaultSingletonBeanRegistry para eliminar y volver a registrar su bean. El único inconveniente de esto es que no actualizará/volverá a cargar la instancia anterior del bean ya autoconectado/inyectado en las clases de consumidor.

DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) context.getBeanFactory();
registry.destroySingleton({yourbean}) //destroys the bean object
registry.registerSingleton({yourbeanname}, {newbeanobject}) //add to singleton beans cache

@RefreshScope

Útil para actualizar las propiedades del valor del bean a partir de los cambios de configuración. Pero tiene un propósito muy limitado y específico. Recurso para leer más al respecto.

  • Es tan difícil recargar propiedades.

    – Alex78191

    18 de marzo de 2019 a las 17:55

  • ¿Por qué no solo bean = applicationContext.getBean(Bean.class)?

    – Alex78191

    18 de marzo de 2019 a las 18:23


  • Porque solo obtendrá el bean ya cargado del contexto, y no lo actualizará/recargará. No entiendo cuando dices, ¿es tan difícil?

    – Amith Kumar

    18 de marzo de 2019 a las 18:26


  • En mi caso, el bean nuevo se devuelve en applicationContext.getBean(Bean.class). es por @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE).

    – Alex78191

    18 de marzo de 2019 a las 18:47

  • Sí, esta pregunta no se aplica a los frijoles que no son singleton. El alcance del prototipo es por uso, por lo que su bean se crea nuevo para cada demanda, por lo que no se aplica la cuestión de recargar.

    – Amith Kumar

    18 de marzo de 2019 a las 20:07

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad