服务级别的JPA锁定事务

时间:2019-06-06 19:04:30

标签: java mysql spring-boot jpa

在我的Spring-boot应用程序中,我每小时对我的两个表运行一次批量刷新,并且需要在刷新过程中防止对两个表进行任何读/写/删除操作(该过程持续了一个几秒钟)。我尝试了以下操作,但似乎没有引发锁定异常,就像我在刷新过程中尝试读取时所期望的那样。在以下事务进行过程中,是否有一种方法可以锁定数据库并使其抛出异常?

const SessionSchema = new Schema({_id: String}, { strict: false });
const Session = mongoose.model('sessions', SessionSchema, 'sessions');

var User = require('../queries/single.js');

module.exports = function (userId, callback) {

    console.log('finding session for',userId);

    Session.findOne({session: {$regex: userId}},null,{lean: true},(err, session)=>{
        if (err) return callback(err);
        if (!session) return callback('user session not found');

        //parse session
        var sessionJson = JSON.parse(session.session);

        //add reset flag
        sessionJson.passport.user.resetSession = true;

        //get updated user info
        User({_id: sessionJson.passport.user._id}, (err, updatedUser)=>{
            if (err) return callback(err);

            //add new user info to session json
            sessionJson.passport.user = updatedUser;

            //save back to session
            Session.findOneAndUpdate({_id: session._id},{$set: {session: JSON.stringify(sessionJson)}}, (err, savedSession) => {
                if (err) return callback(err);

                //success
                return callback(null);
            });

        });
    });
};

0 个答案:

没有答案