并发调用问题修复

This commit is contained in:
inrgihc
2020-11-27 13:21:42 +08:00
parent ef348cae9c
commit 67b4adf8d3
3 changed files with 32 additions and 16 deletions

View File

@@ -23,6 +23,7 @@ import com.weishao.dbswitch.core.util.JdbcUrlUtils;
/** /**
* 结构迁移转换实现类 * 结构迁移转换实现类
* 备注字段信息、主键、生成建表的SQL语句 * 备注字段信息、主键、生成建表的SQL语句
* 说明:不支持并发调用,调用方需要做并发一致性保证
* *
* @author tang * @author tang
* *

View File

@@ -9,12 +9,15 @@
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
package com.weishao.dbswitch.webapi.config; package com.weishao.dbswitch.webapi.config;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import com.weishao.dbswitch.core.service.IMigrationService; import com.weishao.dbswitch.core.service.IMigrationService;
import com.weishao.dbswitch.core.service.impl.MigrationConvertServiceImpl;
import com.weishao.dbswitch.sql.service.ISqlConvertService; import com.weishao.dbswitch.sql.service.ISqlConvertService;
import com.weishao.dbswitch.sql.service.ISqlGeneratorService; import com.weishao.dbswitch.sql.service.ISqlGeneratorService;
import com.weishao.dbswitch.core.service.impl.MigrationConvertServiceImpl;
import com.weishao.dbswitch.sql.service.impl.CalciteSqlConvertServiceImpl; import com.weishao.dbswitch.sql.service.impl.CalciteSqlConvertServiceImpl;
import com.weishao.dbswitch.sql.service.impl.MyselfSqlGeneratorServiceImpl; import com.weishao.dbswitch.sql.service.impl.MyselfSqlGeneratorServiceImpl;
@@ -22,6 +25,7 @@ import com.weishao.dbswitch.sql.service.impl.MyselfSqlGeneratorServiceImpl;
public class AdapterBeanConfiguration { public class AdapterBeanConfiguration {
@Bean("MigrationService") @Bean("MigrationService")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public IMigrationService getMigrationService() { public IMigrationService getMigrationService() {
return new MigrationConvertServiceImpl(); return new MigrationConvertServiceImpl();
} }

View File

@@ -9,29 +9,32 @@
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
package com.weishao.dbswitch.webapi.controller; package com.weishao.dbswitch.webapi.controller;
import java.util.Map;
import java.util.Objects;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import io.swagger.annotations.Api; import java.util.Map;
import io.swagger.annotations.ApiOperation; import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.weishao.dbswitch.common.constant.DatabaseTypeEnum; import com.weishao.dbswitch.common.constant.DatabaseTypeEnum;
import com.weishao.dbswitch.core.model.ColumnDescription; import com.weishao.dbswitch.core.model.ColumnDescription;
import com.weishao.dbswitch.core.model.DatabaseDescription; import com.weishao.dbswitch.core.model.DatabaseDescription;
import com.weishao.dbswitch.webapi.model.ResponseResult;
import com.weishao.dbswitch.core.model.TableDescription; import com.weishao.dbswitch.core.model.TableDescription;
import com.weishao.dbswitch.core.service.IMigrationService; import com.weishao.dbswitch.core.service.IMigrationService;
import org.springframework.beans.factory.annotation.Autowired; import com.weishao.dbswitch.webapi.model.ResponseResult;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.MediaType; import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestBody; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = { "表结构抽取转换接口" }) @Api(tags = { "表结构抽取转换接口" })
@RestController @RestController
@@ -39,8 +42,11 @@ import org.springframework.web.bind.annotation.RestController;
public class StructureController { public class StructureController {
@Autowired @Autowired
@Qualifier("MigrationService") private ApplicationContext applicationContext;
private IMigrationService migrationService;
private IMigrationService getMigrationService() {
return (IMigrationService) applicationContext.getBean("MigrationService");
}
@RequestMapping(value = "/models_list", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/models_list", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "查询所有的模式(model/schema)", notes = "获取数据库中所有的模式(model/schema),,请求的示例包体格式为:\n" @ApiOperation(value = "查询所有的模式(model/schema)", notes = "获取数据库中所有的模式(model/schema),,请求的示例包体格式为:\n"
@@ -99,6 +105,7 @@ public class StructureController {
} }
} }
IMigrationService migrationService=this.getMigrationService();
DatabaseDescription databaseDesc = new DatabaseDescription(type, host, port, mode, dbname, charset, user,passwd); DatabaseDescription databaseDesc = new DatabaseDescription(type, host, port, mode, dbname, charset, user,passwd);
migrationService.setDatabaseConnection(databaseDesc); migrationService.setDatabaseConnection(databaseDesc);
return ResponseResult.success(migrationService.querySchemaList()); return ResponseResult.success(migrationService.querySchemaList());
@@ -164,6 +171,7 @@ public class StructureController {
} }
} }
IMigrationService migrationService=this.getMigrationService();
DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd); DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd);
migrationService.setDatabaseConnection(databaseDesc); migrationService.setDatabaseConnection(databaseDesc);
List<TableDescription> tables=migrationService.queryTableList(model); List<TableDescription> tables=migrationService.queryTableList(model);
@@ -244,7 +252,7 @@ public class StructureController {
} }
Map<String, Object> ret = new HashMap<String, Object>(); Map<String, Object> ret = new HashMap<String, Object>();
IMigrationService migrationService=this.getMigrationService();
DatabaseDescription databaseDesc = new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd); DatabaseDescription databaseDesc = new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd);
migrationService.setDatabaseConnection(databaseDesc); migrationService.setDatabaseConnection(databaseDesc);
List<ColumnDescription> columnDescs = migrationService.queryTableColumnMeta(model, src_table); List<ColumnDescription> columnDescs = migrationService.queryTableColumnMeta(model, src_table);
@@ -343,6 +351,7 @@ public class StructureController {
} }
} }
IMigrationService migrationService=this.getMigrationService();
DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd); DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd);
migrationService.setDatabaseConnection(databaseDesc); migrationService.setDatabaseConnection(databaseDesc);
List<ColumnDescription> columnDescs=migrationService.querySqlColumnMeta(querysql); List<ColumnDescription> columnDescs=migrationService.querySqlColumnMeta(querysql);
@@ -443,6 +452,7 @@ public class StructureController {
} }
} }
IMigrationService migrationService=this.getMigrationService();
DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd); DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd);
DatabaseTypeEnum taregetDabaseType=DatabaseTypeEnum.valueOf(target.toUpperCase()); DatabaseTypeEnum taregetDabaseType=DatabaseTypeEnum.valueOf(target.toUpperCase());
migrationService.setDatabaseConnection(databaseDesc); migrationService.setDatabaseConnection(databaseDesc);
@@ -547,6 +557,7 @@ public class StructureController {
} }
} }
IMigrationService migrationService=this.getMigrationService();
DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd); DatabaseDescription databaseDesc=new DatabaseDescription(type, host, port, mode, dbname, charset, user, passwd);
migrationService.setDatabaseConnection(databaseDesc); migrationService.setDatabaseConnection(databaseDesc);
migrationService.testQuerySQL(querysql); migrationService.testQuerySQL(querysql);