Я использую Spring Boot с Solr.
Я вижу Spring-tx в моих разрешенных зависимостях.
Когда я вызываю аннотированный метод @Transactional
в bean-компоненте Spring,
a) во время выполнения, я не вижу никаких признаков того, что он был обернут в какой-либо прокси-сервер управления транзакциями, и
b) когда метод выбрасывает RuntimeException
, данные не возвращаются.
Репозитории электронной почты / телефона ипросто интерфейсы, которые расширяются
org.springframework.data.solr.repository.SolrCrudRepository
Что мне не хватает?
У метода есть аннотированный @Transactional
как в интерфейсе, так и в реализации, на всякий случай ;-)
public interface MyServiceInterface {
@Transactional
public CreateDetailsResponse createAllDetails(
final CreateDetailsRequest createDetailsRequest) throws BusinessException;
}
public class MyService implements MyServiceInterface {
@Autowired
private EmailRepository emailRepository;
@Autowired
private EmailRepository phoneRepository;
@Transactional
public CreateDetailsResponse createAllDetails(
final CreateDetailsRequest createDetailsRequest) throws BusinessException {
//method below calls emailRepository.save(emailDocument)
saveEmail();
//method below is supposed to call phoneRepository.save(phoneDocument)
//but throws RuntimeException before save is called
savePhone();
}
//...
}
@Configuration
@EnableSolrRepositories(basePackages = "com.....repository", multicoreSupport = true,
considerNestedRepositories = true, repositoryBaseClass = SoftCommitSimpleSolrRepository.class)
@EnableAutoConfiguration
public class ConsumersServiceConfiguration {
//...
@Bean
public MyServiceInterface myService() {
return new MyService();
}
}
Предположительно, Solr поддерживает транзакции: