Spring Data JPA事务自定义隔离级别

时间:2016-05-15 22:36:45

标签: java spring spring-boot spring-data spring-data-jpa

鉴于以下情况: 我有一个运行Spring Boot @SpringBootApplication的应用程序,并使用application.properties中的Spring Data JPA数据源进行设置:

spring.datasource.url=jdbc:mysql://foo.bar.com:12345
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

并没有额外的java / xml配置。

我有几项服务:

@Service
public class ProjectServiceImpl implements ProjectService {

    @Autowired
    ProjectRepository projectRepository;

    @Override
    @Transactional(isolation = Isolation.SERIALIZABLE)
    public Project save(Project project) {
        // there might be some additional logic here, besides the action on repository
        return projectRepository.save(project);
    }
}

和存储库:

@Repository
public interface ProjectRepository extends CrudRepository<Project, Long> {}

正如上面的代码所示,我发现自己需要{,1}}隔离级别由于应用程序水平扩展而偶尔会将冲突的数据保存到DB(简称SERIALIZABLE)是不够的。现在,在尝试执行@Transactional操作时,我得到一个例外:

projectService.save(project)

是否可以使用java配置启用这些自定义隔离级别?

1 个答案:

答案 0 :(得分:0)

您可以通过在allowCustomIsolationLevels

中进行设置来启用TransactionManager
transactionManager.setAllowCustomIsolationLevels(true);