En el desarrollo moderno de software, el acceso concurrente a los recursos compartidos puede conducir a diversos problemas, como la inconsistencia de los datos y las condiciones de carrera. Shed Lock es una herramienta poderosa que ayuda a los desarrolladores a administrar estos problemas de concurrencia de manera efectiva. Como proveedor de bloqueo de cobertizo, estoy aquí para guiarlo sobre cómo integrar y usar el bloqueo de cobertizo con una aplicación de marco de elevación.
Comprensión de bloqueo de cobertizo
Shed Lock es una biblioteca que proporciona bloqueos distribuidos para tareas programadas en una aplicación Java. Asegura que solo una instancia de una tarea programada se ejecute a la vez en múltiples nodos en un sistema distribuido. Esto es crucial cuando se trata de recursos compartidos o realizan tareas que no deben ejecutarse simultáneamente.
El concepto básico detrás del bloqueo de cobertizo es simple: utiliza una base de datos u otros sistemas de almacenamiento para administrar bloqueos. Cuando comienza una tarea programada, trata de adquirir un bloqueo. Si el bloqueo está disponible, la tarea continúa; De lo contrario, espera o omite la ejecución.
Requisitos previos
Antes de comenzar a integrar el bloqueo de cobertizo con una aplicación de marco de elevación, asegúrese de tener lo siguiente:
- Una aplicación de marco de elevación de trabajo. Si no tiene uno, puede crear un nuevo proyecto de elevación utilizando SBT (herramienta de compilación simple).
- Una base de datos compatible con Shed Lock. Las opciones populares incluyen MySQL, PostgreSQL y H2.
- Conocimientos básicos de conceptos de marco Java y Lift, como tareas programadas y acceso a la base de datos.
Paso 1: Agregar dependencias de bloqueo de cobertizo
Primero, debe agregar las dependencias de bloqueo de cobertizo a su proyecto de elevación. Si está utilizando SBT, agregue las siguientes líneas a subuild.sbtarchivo:
LibraryDependences ++ = seq ("net.javacrumbs.shedlock" % "shedlock-spring" % "4.40.0", "net.javacrumbs.shedlock" % "shedlock-provider-jdbc-template" % "4.40.0")
Estas dependencias incluyen la biblioteca de bloqueo de cobertizo Core y el proveedor de plantilla JDBC, que nos permite usar una base de datos relacional para la gestión de bloqueos.
Paso 2: Configurar la base de datos
A continuación, debe configurar la conexión de su base de datos. En una aplicación de elevación, puede usar el sistema de gestión de bases de datos construido en el ascensor o una tercera biblioteca de fiesta como Spring JDBC.


Aquí hay un ejemplo de configuración de una fuente de datos JDBC utilizando el arranque de SpringBase de datosConfiguración en una aplicación de elevación:
importar org.springframework.context.annotation.bean; importar org.springframework.context.annotation.configuration; importar org.springframework.jdbc.datasource.drivermanagerdataSource; import javax.sql.dataSource; @Configuration public class DataBASEConFig {@Bean public dataSource dataSource () {DrivermanagerDataSource dataSource = new DrivermanagerDataSource (); dataSource.setDrivClassName ("com.mysql.cj.jdbc.driver"); DataSource.SetUrl ("JDBC: mySql: // localhost: 3306/your_database"); dataSource.setUsername ("Your_Username"); dataSource.setPassword ("Your_Password"); devolver datos de datos; }}
Este código configura una fuente de datos MySQL. Debe reemplazar la URL, el nombre de usuario y la contraseña con las credenciales reales de la base de datos.
Paso 3: crear un proveedor de bloqueo
Shed Lock utiliza un proveedor de bloqueo para administrar cerraduras. Para una base de datos basada en JDBC, puede crear unaJdbctemplockprovidercomo sigue:
importar net.javacrumbs.shedlock.provider.jdbctemplate.jdbctemplateLockProvider; importar net.javacrumbs.shedlock.spring.annotation.eneableChedulerlock; importar org.springframework.context.annotation.bean; importar org.springframework.context.annotation.configuration; importar org.springframework.jdbc.core.jdbctemplate; import javax.sql.dataSource; @Configuration @enableschedulerlock (defaultlockMostFor = "pt30s") public class shedlockConfig {@Bean public JDBCTEMPLATELOCKProvider LockProvider (DataSource DataSource) {return nuevo JDBCTEMACLOCKProvider (jDBCTEMPlatelockProvider.configuration.Builder () () .withjdbctemplate (new JDBCTemplate (DataSource)) .UsingDBTime () .Build ()); }}
El@EnableschedulerlockLa anotación permite el bloqueo de cobertizo en su aplicación y eldefaultlockatmostforEl atributo establece el tiempo máximo que se puede mantener un bloqueo.
Paso 4: Definir tareas programadas
En una aplicación de elevación, puede definir tareas programadas utilizando el elevadorSobjeto o primavera@Programadoanotación. Aquí hay un ejemplo de usar el@ProgramadoAnotación con bloqueo de cobertizo:
importar net.javacrumbs.shedlock.spring.annotation.schedulerlock; importar org.springframework.scheduling.annotation.scheduled; importar org.springframework.stereotype.component; @Component Public Clase ProchuledTasks {@scheduled (fijado = 60000) @schedulerlock (name = "myScheduledTask", bloqueo de bloqueo = "pt10s", lockatLeastfor = "pt5s") public void myScheduledTask () {// su tarea logic. }}
El@SchedulerlockLa anotación se usa para especificar el nombre del bloqueo, el tiempo máximo del bloqueo se puede mantener (Rizo -poste), y el tiempo mínimo se debe mantener el bloqueo (Lockatleastfor).
Paso 5: ejecute la aplicación
Ahora que ha configurado el bloqueo de cobertizo y ha definido sus tareas programadas, puede ejecutar su aplicación de elevación. Cuando se activa la tarea programada, Shed Lock intentará adquirir el bloqueo. Si el bloqueo está disponible, la tarea se ejecutará; De lo contrario, se omitirá la ejecución.
Uso avanzado
- Múltiples tareas programadas: Puede definir múltiples tareas programadas en su aplicación, cada una con su propio bloqueo. Solo asegúrese de usar diferentes nombres de bloqueo para cada tarea.
- Manejo de errores: Puede agregar código de manejo de errores en sus tareas programadas para manejar casos en los que el bloqueo no se puede adquirir o la tarea no se ejecuta.
Tipos de bloqueo adicional
Además de la funcionalidad básica de bloqueo de cobertizo, hay otros tipos de cerraduras que pueden ser útiles en diferentes escenarios. Por ejemplo,BloqueoSe puede usar en situaciones donde necesita un mecanismo de bloqueo simple y rápido.Puerta de bloqueoes adecuado para aplicaciones donde se requieren seguridad y bloqueo automático. YBloqueoSe puede utilizar para proteger las áreas de almacenamiento y garantizar que solo se permita el acceso autorizado.
Conclusión
La integración del bloqueo de cobertizo con una aplicación de marco de elevación es un proceso directo que puede mejorar significativamente la confiabilidad y la consistencia de sus tareas programadas. Siguiendo los pasos descritos en esta guía, puede asegurarse de que su aplicación se ejecute sin problemas incluso en un entorno distribuido.
Si está interesado en usar nuestras soluciones de bloqueo de cobertizo para sus aplicaciones de marco de elevación o tiene alguna pregunta sobre nuestros productos, lo invitamos a contactarnos para una discusión detallada. Nuestro equipo de expertos está listo para ayudarlo a encontrar las mejores soluciones de bloqueo para sus necesidades específicas.
Referencias
- Cobrar bloqueo de documentación oficial.
- Documentación oficial del marco de elevación.
- Documentación de arranque de primavera para JDBC y programación.
