first commit

This commit is contained in:
2023-06-27 23:43:34 +08:00
parent ab46c27888
commit 4a3c958e1a
10 changed files with 16 additions and 172 deletions

View File

@ -38,7 +38,7 @@
<!-- 项目模块版本 --> <!-- 项目模块版本 -->
<qiaoba.version>1.0</qiaoba.version> <qiaoba.version>1.0</qiaoba.version>
<!-- 阿里巴巴数据源 --> <!-- 阿里巴巴数据源 -->
<druid.version>1.2.17</druid.version> <druid.version>1.2.18</druid.version>
<!-- HuTool工具包 --> <!-- HuTool工具包 -->
<hutool.version>5.8.18</hutool.version> <hutool.version>5.8.18</hutool.version>
<!-- Lock4j --> <!-- Lock4j -->

View File

@ -17,7 +17,7 @@ public class AjaxResult extends HashMap<String, Object> {
/** /**
* 状态码 * 状态码
*/ */
public static final String CODE_TAG = "result"; public static final String CODE_TAG = "code";
/** /**
* 返回内容 * 返回内容

View File

@ -183,7 +183,7 @@ public class DynamicDataSourceConfig {
dataSource.setInitialSize(dynamicDataSource.getInitialSize()); dataSource.setInitialSize(dynamicDataSource.getInitialSize());
dataSource.setMinIdle(dynamicDataSource.getMinIdle()); dataSource.setMinIdle(dynamicDataSource.getMinIdle());
dataSource.setMaxActive(dynamicDataSource.getMaxActive()); dataSource.setMaxActive(dynamicDataSource.getMaxActive());
dataSource.setKeepAlive(false); //dataSource.setKeepAlive(false);
try { try {
// 初始化数据源 // 初始化数据源
dataSource.init(); dataSource.init();

View File

@ -1,42 +0,0 @@
package com.qiaoba.common.database.handlers.schema;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.common.database.utils.SqlUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
* MysqlSchemaHandler
*
* @author ailanyin
* @version 1.0
* @since 2023/6/20 9:25
*/
@Component
@Slf4j
public class MysqlSchemaHandler implements SchemaHandler {
@Value("${spring.application.name}")
private String baseDatabase;
private static final String MYSQL_CHANGE_SCHEMA_SQL = "alter session set current_schema = {}";
@Override
public void setSchema(Connection conn) {
// eg: use qiaoba-1;
String sql = StrUtil.format("use `{}-{}`;", baseDatabase, BaseContext.getTenantId());
log.debug("Run MysqlSchemaHandler, Sql: {}", sql);
try {
SqlUtil.runSql(conn, sql);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -1,35 +0,0 @@
package com.qiaoba.common.database.handlers.schema;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
* OracleSchemaHandler
*
* @author ailanyin
* @version 1.0
* @since 2023/6/20 9:25
*/
@Component
public class OracleSchemaHandler implements SchemaHandler {
private static final String ORACLE_CHANGE_SCHEMA_SQL = "alter session set current_schema = {};";
@Override
public void setSchema(Connection conn) {
Statement statement = null;
try {
statement = conn.createStatement();
statement.execute(StrUtil.format(ORACLE_CHANGE_SCHEMA_SQL, "ROOT"));
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
IoUtil.close(statement);
}
}
}

View File

@ -1,25 +0,0 @@
package com.qiaoba.common.database.handlers.schema;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.SQLException;
/**
* PostgreSqlSchemaHandler
*
* @author ailanyin
* @version 1.0
* @since 2023/6/20 9:29
*/
@Component
public class PostgreSqlSchemaHandler implements SchemaHandler {
@Override
public void setSchema(Connection conn) {
try {
conn.setSchema("");
} catch (SQLException e) {
e.printStackTrace();
}
}
}

View File

@ -1,20 +0,0 @@
package com.qiaoba.common.database.handlers.schema;
import java.sql.Connection;
/**
* Schema处理器
*
* @author ailanyin
* @version 1.0
* @since 2023/6/20 9:18
*/
public interface SchemaHandler {
/**
* 设置/切换schema
*
* @param conn conn
*/
void setSchema(Connection conn);
}

View File

@ -1,40 +0,0 @@
package com.qiaoba.common.database.handlers.schema;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exceptions.ServiceException;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
* SchemaHandlerFactory-用于选择哪种类型处理器
*
* @author ailanyin
* @version 1.0
* @since 2023/6/20 9:22
*/
@Configuration
@RequiredArgsConstructor
public class SchemaHandlerFactory {
private static Map<String, SchemaHandler> HANDLERS = new ConcurrentHashMap<>();
private final MysqlSchemaHandler mysqlSchemaHandler;
@PostConstruct
public void register() {
HANDLERS.put(DataBaseEnum.MY_SQL.getType(), mysqlSchemaHandler);
}
public static SchemaHandler getHandler(String name) {
SchemaHandler schemaHandler = HANDLERS.get(name);
if (Objects.isNull(schemaHandler)) {
throw new ServiceException("Schema处理器工厂异常, 类型:[" + name + "]找不到相对应的解析器");
}
return schemaHandler;
}
}

View File

@ -1,11 +1,17 @@
package com.qiaoba.common.database.interceptors; package com.qiaoba.common.database.interceptors;
import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.qiaoba.common.base.context.BaseContext; import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.common.database.handlers.schema.SchemaHandlerFactory; import com.qiaoba.common.database.utils.JdbcUtil;
import com.qiaoba.common.database.utils.SqlUtil;
import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.executor.statement.StatementHandler;
import org.postgresql.jdbc.PgConnection;
import javax.annotation.Resource;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects; import java.util.Objects;
/** /**
@ -22,9 +28,13 @@ public class SchemaInterceptor implements InnerInterceptor {
public void beforePrepare(StatementHandler sh, Connection conn, Integer transactionTimeout) { public void beforePrepare(StatementHandler sh, Connection conn, Integer transactionTimeout) {
if (Objects.nonNull(BaseContext.isSchemaMode()) && BaseContext.isSchemaMode()) { if (Objects.nonNull(BaseContext.isSchemaMode()) && BaseContext.isSchemaMode()) {
SchemaHandlerFactory.getHandler(BaseContext.getDatabaseType()).setSchema(conn); try {
conn.unwrap(PgConnection.class).setSchema("qiaoba-boot-2");
} catch (SQLException e) {
e.printStackTrace();
}
} }
InnerInterceptor.super.beforePrepare(sh, conn, transactionTimeout);
} }
} }

View File

@ -1,7 +1,3 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.qiaoba.common.database.factories.DynamicDataSourceFactory,\ com.qiaoba.common.database.factories.DynamicDataSourceFactory,\
com.qiaoba.common.database.monitor.OnlineDatasourceMonitor,\
com.qiaoba.common.database.monitor.NotOnlineDatasourceMonitor,\
com.qiaoba.common.database.handlers.schema.SchemaHandlerFactory,\
com.qiaoba.common.database.handlers.schema.MysqlSchemaHandler,\
com.qiaoba.common.database.config.MybatisPlusConfig com.qiaoba.common.database.config.MybatisPlusConfig