У меня есть проект Spring-Boot. Как упоминалось выше, я хочу использовать AbstractRoutingDataSource
для переключения DataSouce . Я не хочу использовать @Transactional
, так как транзакции не нужны.
Но когда я передаю свой метод, кажется, что @Transactional
используется, но когда я тестирую свой метод в модульном тесте, он запускается хорошо, я думаю, что это странно, потому что в модульном тесте @Transactional
не должен работать.
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DynamicContextHolder.peek();
}
}
Метод контроллера
@RequestMapping(value = "/pipeline/analyze/{systemId}/{dbName}/{dbSchemaName}/{dbTableName}", method = RequestMethod.GET)
public String pipelineAnalyze(@PathVariable("systemId") Long systemId, @PathVariable("dbName") String dbName, @PathVariable("dbSchemaName") String dbSchemaName, @PathVariable("dbTableName") String dbTableName) throws IOException {
ETLServerAccessEntityInterface etlServerAccessEntity = etlServer.getETLServerAccessEntity();
/* LOGGER.info("===etlServerAccessEntity.getAccessToken()===");
LOGGER.info(etlServerAccessEntity.getAccessToken());
LOGGER.info("isAlive=" + etlServer.isAlive());*/
TableInfoMasterEntity tableInfoMaster = new TableInfoMasterEntity();
TableInfoMasterEntityPk tableInfoMasterPk = new TableInfoMasterEntityPk();
tableInfoMasterPk.setSystemId(systemId);
tableInfoMasterPk.setDbName(dbName);
tableInfoMasterPk.setDbSchemaName(dbSchemaName);
tableInfoMasterPk.setDbTableName(dbTableName);
tableInfoMaster.setId(tableInfoMasterPk);
Example<TableInfoMasterEntity> exampleTableInfoMaster = Example.of(tableInfoMaster);
List<TableInfoMasterEntity> filteredTableInfoMaster = tableInfoMasterService.findAll(exampleTableInfoMaster);
System.out.println("filteredTableInfoMaster.size()=" + filteredTableInfoMaster.size());
TableInfoMasterEntity tableInfoMasterEntity = filteredTableInfoMaster.get(0);
pipelineRequirementAnalyzeService.analyze(tableInfoMasterEntity);
return String.valueOf(pipelineRequirementAnalyzeService.toString());
}
устройство test
@Test
public void findByTemplateNameContaining() throws IOException {
ETLServerAccessEntityInterface etlServerAccessEntity = etlServer.getETLServerAccessEntity();
TableInfoMasterEntity tableInfoMaster = new TableInfoMasterEntity();
TableInfoMasterEntityPk tableInfoMasterPk = new TableInfoMasterEntityPk();
tableInfoMasterPk.setSystemId(1);
tableInfoMasterPk.setDbName("DGRAMES");
tableInfoMasterPk.setDbSchemaName("MESSERIES");
tableInfoMasterPk.setDbTableName("TBLEMSACCESSORYSTATE_MAINTAIN");
tableInfoMaster.setId(tableInfoMasterPk);
Example<TableInfoMasterEntity> exampleTableInfoMaster = Example.of(tableInfoMaster);
List<TableInfoMasterEntity> filteredTableInfoMaster = tableInfoMasterService.findAll(exampleTableInfoMaster);
TableInfoMasterEntity tableInfoMasterEntity = filteredTableInfoMaster.get(0);
pipelineRequirementAnalyzeService.analyze(tableInfoMasterEntity);
System.out.println();
}
Эти два метода похожи, все они передают pipelineRequirementAnalyzeService.analyze(tableInfoMasterEntity);
, но результаты разные. здесь результат ошибки и результат успеха .