天天看点

在使用mybatis plus的时候发现选择数据源注解@DS("***")不起作用

这是一个小问题,但是这个小问题导致我这一部分逻辑无法实现

@PostMapping(value = "/****/***/***/{project}")
@DS("#project")
@Transitional
    public Object updateReadedMessage(@PathVariable("project") Long project, @RequestBody JSONObject requestBody){
         ReceivedDocumentClass receivedDocumentClass = new ReceivedDocumentClass();
        Long deletedId = 0L;
        try {
            receivedDocumentClass.generateInformation(requestBody);
        }catch (Exception e){
            throw new MyException(ErrorCode.JSONOBJECT_CONVERT_INTO_CLASS_FORMAT_FAILED);
        }
        try {
            receivedDocumentService.insertReceivedDocRecord(projectId,receivedDocumentClass);
            deletedId = bufferDocService.deleteBufferDocById(projectId, receivedDocumentClass.getPkReceivedDocId());
        }catch (Exception e) {
            System.out.println(e);
        }
        return deletedId;
    }
           

在这里我们可以看到我们通过@DS的注解的配置可以选择使用的数据库。我上面有个调用了这个方法(基本一样的),就连到了后面debug的时候我都是复制粘贴的同一个方法。但是发现上面的方法可以宣导我指定的数据库,但是这个方法就不行。很难受,这个就是@DS没有起作用的问题

这里呢,我用了个@Transitional的注解是为了希望两个数据库的操作只要有一个出现了异常的时候就可以数据库回滚使得不会出现数据库不一致的问题的出现。

但是在后来Debug的时候发现,就算是抛了异常,下面一个delete的数据库操作还是会执行的。这点我没有解决。

但是在这里我把@Transitional的注解删除了以后,发现@DS的注解失效的问题就解决了,这里的知识还是不够深入,但是问题解决了,希望在日后有机会深入了解的时候补充上为什么这个地方的@Transitional会出现这样的问题的解释把