2016-05-15 2 views
0

Учитывая следующий сценарий: У меня есть приложение работает с весны Ботинок @SpringBootApplication и настройки с Spring Data источника данных JPA в 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> {} 

Как это в приведенном выше коде, я нашел себя в потребности, скажем, SERIALIZABLE уровень изоляции из-за к приложению расширяется горизонтально и иногда экономят конфликтующие данные с БД (просто @Transactional было недостаточно). Теперь, при попытке я пытаюсь выполнить projectService.save(project) действие я получаю исключение:

"exception": "org.springframework.transaction.InvalidIsolationLevelException", 
"message": "JtaTransactionManager does not support custom isolation levels by default - switch 'allowCustomIsolationLevels' to 'true'", 

Можно ли включить эти пользовательские уровни изоляции с Java конфигурации?

ответ

0

Вы можете включить allowCustomIsolationLevels установив ниже TransactionManager

transactionManager.setAllowCustomIsolationLevels(true); 
+0

Мой вопрос был ссылаюсь больше к тому, что я не знаю, как получить доступ к 'tramsactionManager', чтобы иметь возможность установить это значение. Можно ли это сделать с помощью '@ EnableTransactionManagement'? – Jakubs

+1

Вы будете определять transactionManager в файле applicationcontext.xml или другом XML-файле. Пожалуйста, установите в определении beanBansManager. – shankarsh15

+0

Дело в том, что я не использую конфигурацию весов на основе xml. Можно ли выполнить настройку java? – Jakubs