text-media/offline-locker-bundle

Symfony OfflineLockerBundle

安装数: 3,675

依赖者: 0

建议者: 0

安全性: 0

类型:symfony-bundle

dev-master 2019-01-23 11:43 UTC

This package is not auto-updated.

Last update: 2024-09-26 17:39:58 UTC


README

Packagist Packagist

用于长期键锁的Symfony模块

安装

模块通过在composer中添加依赖项来安装

composer require text-media/offline-locker-bundle

在配置中添加 offline_locker 部分,并添加额外的 doctrine 配置以单独连接

offline_locker:
    # Используемый менеджер
    entity_manager: offline_locker

doctrine:
    # Отдельное подключение к БД
    dbal:
        connections:
            offline_locker:
                driver: pdo_sqlite
                path: "%kernel.cache_dir%/offline_locker.db"
                charset: UTF8
    orm:
        entity_managers:
            offline_locker:
                connection: offline_locker
                naming_strategy: doctrine.orm.naming_strategy.underscore
                mappings:
                    OfflineLockerBundle: ~

自动执行迁移或手动执行

php ./bin/console doctrine:schema:update --em=offline_locker --dump-sql

使用

容器中注册了服务 \TextMedia\OfflineLockerBundle\OfflineLockerInterface (或 offline_locker),该服务实现了同名接口

<?php
    use TextMedia\OfflineLockerBundle\ConcurrencyException;
    use TextMedia\OfflineLockerBundle\OfflineLockerInterface;

    class MyService
    {
        public function __construct(OfflineLockerInterface $locker)
        {
            $lockKey = 'order::1000';
            $lockOwner = __CLASS__;
            try {
                # Захватить блокировку
                $locker->acquireLock($lockKey, $lockOwner);
            } catch (ConcurrencyException $e) {
                # Блокировка не захвачена
            }

            try {
                $this->doSomething();
            } finally {
                # Освободить блокировку
                $locker->releaseLock($lockKey, $lockOwner);
            }
        }
    }