У меня есть менеджер транзакций, определенный как:
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
Мой репозиторий:
public interface BinMaxRepository extends Repository<String, Long> {
@Procedure("varBinMaxTest")
Blob getData();
}
Моя хранимая процедура:
ALTER procedure [dbo].[varBinMaxTest]
@binData varbinary(max) out
as
begin
-- @binData is set to 8939 bytes
set @binData = 0x1F8BED...
end
Мой модульный тест:
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional(propagation = Propagation.NEVER, transactionManager="transactionManager") // If I comment out this line then an exception is thrown during testing
public class BinMaxRepositoryTest{
@Autowired
private BinMaxRepository testRepo;
@Test
public void binMaxTest() throws SQLException {
testRepo.getData();
}
}
При @Transactional(propagation = Propagation.NEVER, transactionManager="transactionManager")
тест интеграции проходит. Но если я закомментирую @Transactional
, произойдет сбой со следующим исключением:
com.microsoft.sqlserver.jdbc.SQLServerException: The TDS protocol stream is not valid.
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2998)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2987)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.throwInvalidTDS(SQLServerConnection.java:2970)
...
, который, кажется, происходит от
c.m.sqlserver.jdbc.internals.TDS.Reader : ConnectionID:1 ClientConnectionId: b56a6cd1-456d-452a-ac21-26acaa845fca got unexpected value in TDS response at offset:7992
Так что, похоже, ему не удалось получить все байты в один пакет? Я использую Spring Boot 2.2.4 и драйвер jdb c, com.microsoft.sqlserver: ms sql -jdb c: 8.2.0.jre8.
Примечание. Этот тест также работает с распространением, установленным по умолчанию, Propagation.REQUIRED
, но меня интересует разница между Propagation.NEVER
и отсутствием управления транзакциями в контексте теста junit 4. Я использую Eclipse 2019-09 R (4.13.0) для запуска теста.