mirror of
https://gitee.com/dromara/dbswitch.git
synced 2025-10-15 06:10:23 +00:00
v1.6.16:同时支持mysql和postgresql数据库作为配置库
This commit is contained in:
15
README.md
15
README.md
@@ -375,9 +375,13 @@ dbswitch.target.writer-engine-insert=true
|
||||
|
||||
### 2、基于conf/application.yml配置的dbswitch-admin模块启动的WEB使用方式
|
||||
|
||||
#### (1)、准备一个MySQL(建议为:版本为 5.7+ )的数据库
|
||||
#### (1)、准备一个MySQL(建议版本为: 5.7+ )或PostgreSQL(建议版本:11.7+ )的数据库
|
||||
|
||||
#### (2)、配置conf/application.yml
|
||||
> dbswitch-admin模块后端同时支持MySQL、PostgreSQL作为配置数据库。
|
||||
|
||||
#### (2)、配置conf/application.yml(MySQL可参考application_sample_mysql.yml配置,PostgreSQL可参考application_sample_postgresql.yml配置)
|
||||
|
||||
MySQL的application.yml配置内容示例如下:
|
||||
|
||||
```
|
||||
server:
|
||||
@@ -526,16 +530,19 @@ cd dbswitch && mvn clean install
|
||||
### 3、代码集成开发
|
||||
|
||||
```
|
||||
// 构建任务执行的线程池
|
||||
AsyncTaskExecutor taskExecutor=new ThreadPoolTaskExecutor();
|
||||
taskExecutor.setXXXX();
|
||||
|
||||
// 构造dbswitch所需的配置参数,参数说明请参考第三章第1小节
|
||||
DbswichProperties properties = new DbswichProperties();
|
||||
properties.setXXXX();
|
||||
|
||||
// 将参数传递给dbswitch启动同步方式执行
|
||||
MigrationService service = new MigrationService(properties);
|
||||
MigrationService service = new MigrationService(properties, taskExecutor);
|
||||
service.run();
|
||||
```
|
||||
|
||||
|
||||
## 五、常见问题解决
|
||||
|
||||
### 1、执行启动脚本报错
|
||||
|
@@ -0,0 +1,22 @@
|
||||
package com.gitee.dbswitch.admin.config;
|
||||
|
||||
import java.util.Properties;
|
||||
import org.apache.ibatis.mapping.DatabaseIdProvider;
|
||||
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class DbswitchConfig {
|
||||
|
||||
@Bean
|
||||
public DatabaseIdProvider getDatabaseIdProvider() {
|
||||
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
|
||||
Properties props = new Properties();
|
||||
props.setProperty("PostgreSQL", "postgresql");
|
||||
props.setProperty("MySQL", "mysql");
|
||||
databaseIdProvider.setProperties(props);
|
||||
return databaseIdProvider;
|
||||
}
|
||||
|
||||
}
|
@@ -13,10 +13,12 @@ import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
import javax.sql.DataSource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.quartz.spi.JobFactory;
|
||||
import org.quartz.spi.TriggerFiredBundle;
|
||||
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
|
||||
import org.springframework.beans.factory.config.PropertiesFactoryBean;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -28,8 +30,8 @@ import org.springframework.scheduling.quartz.SpringBeanJobFactory;
|
||||
@Configuration("dbswitchQuartzConfig")
|
||||
public class QuartzConfig {
|
||||
|
||||
@Bean
|
||||
public Properties quartzProperties() throws IOException {
|
||||
@Bean("quartzProperties")
|
||||
public Properties quartzProperties(DataSourceProperties dataSourceProperties) throws IOException {
|
||||
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
|
||||
|
||||
Properties prop = new Properties();
|
||||
@@ -76,6 +78,13 @@ public class QuartzConfig {
|
||||
//quartz相关数据表前缀名
|
||||
prop.put("org.quartz.jobStore.tablePrefix", "DBSWITCH_");
|
||||
|
||||
// 如果使用的PostgreSQL作为配置数据库,则需要补充如下配置:
|
||||
// https://blog.csdn.net/wsdhla/article/details/122460119
|
||||
if (StringUtils.isNotBlank(dataSourceProperties.getUrl())
|
||||
&& dataSourceProperties.getUrl().startsWith("jdbc:postgresql://")) {
|
||||
prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
|
||||
}
|
||||
|
||||
propertiesFactoryBean.setProperties(prop);
|
||||
propertiesFactoryBean.afterPropertiesSet();
|
||||
|
||||
@@ -86,14 +95,14 @@ public class QuartzConfig {
|
||||
* SchedulerFactoryBean提供了对org.quartz.Scheduler的创建与配置,并且会管理它的生命周期与Spring同步
|
||||
*/
|
||||
@Bean
|
||||
public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JobFactory jobFactory)
|
||||
throws IOException {
|
||||
public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JobFactory jobFactory,
|
||||
Properties quartzProperties) {
|
||||
SchedulerFactoryBean factory = new SchedulerFactoryBean();
|
||||
factory.setOverwriteExistingJobs(true);
|
||||
factory.setAutoStartup(true);
|
||||
factory.setDataSource(dataSource);
|
||||
factory.setJobFactory(jobFactory);
|
||||
factory.setQuartzProperties(quartzProperties());
|
||||
factory.setQuartzProperties(quartzProperties);
|
||||
return factory;
|
||||
}
|
||||
|
||||
|
@@ -11,8 +11,11 @@ package com.gitee.dbswitch.admin.dao;
|
||||
|
||||
import com.gitee.dbswitch.admin.entity.SystemUserEntity;
|
||||
import com.gitee.dbswitch.admin.mapper.SystemUserMapper;
|
||||
import java.util.Objects;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import tk.mybatis.mapper.entity.Example;
|
||||
import tk.mybatis.mapper.util.Sqls;
|
||||
|
||||
@Repository
|
||||
public class SystemUserDAO {
|
||||
@@ -25,10 +28,22 @@ public class SystemUserDAO {
|
||||
}
|
||||
|
||||
public SystemUserEntity findByUsername(String username) {
|
||||
return systemUserMapper.findByUsername(username);
|
||||
return systemUserMapper.selectOneByExample(
|
||||
Example.builder(SystemUserEntity.class)
|
||||
.where(
|
||||
Sqls.custom()
|
||||
.andEqualTo("username", username)
|
||||
)
|
||||
.build()
|
||||
);
|
||||
}
|
||||
|
||||
public void updateUserPassword(String username, String newPassword) {
|
||||
systemUserMapper.updateUserPassword(username, newPassword);
|
||||
SystemUserEntity userEntity = findByUsername(username);
|
||||
if (Objects.nonNull(userEntity)) {
|
||||
userEntity.setPassword(newPassword);
|
||||
systemUserMapper.updateByPrimaryKeySelective(userEntity);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -20,16 +20,32 @@ import tk.mybatis.mapper.common.Mapper;
|
||||
|
||||
public interface AssignmentJobMapper extends Mapper<AssignmentJobEntity> {
|
||||
|
||||
@Select("SELECT \n"
|
||||
+ "\t DATE_FORMAT(create_time,'%Y-%m-%d') as of_date , \n"
|
||||
+ "\t count(*) as count_of_job,\n"
|
||||
+ "\t count(DISTINCT assignment_id) as count_of_task \n"
|
||||
+ " FROM \n"
|
||||
+ "( \n"
|
||||
+ "\t SELECT * FROM DBSWITCH_ASSIGNMENT_JOB\n"
|
||||
+ "\t WHERE DATE_SUB( CURDATE(), INTERVAL ${days} DAY ) <= date(create_time)\n"
|
||||
+ ") t \n"
|
||||
+ " GROUP BY of_date ")
|
||||
@Select("<script>"
|
||||
+ "<if test='_databaseId == \"mysql\" '>"
|
||||
+ " SELECT \n"
|
||||
+ " \t DATE_FORMAT(create_time,'%Y-%m-%d') as of_date , \n"
|
||||
+ " \t count(*) as count_of_job,\n"
|
||||
+ " \t count(DISTINCT assignment_id) as count_of_task \n"
|
||||
+ " FROM \n"
|
||||
+ " ( \n"
|
||||
+ " \t SELECT * FROM DBSWITCH_ASSIGNMENT_JOB\n"
|
||||
+ " \t WHERE DATE_SUB( CURDATE(), INTERVAL ${days} DAY ) <= date(create_time)\n"
|
||||
+ " ) t \n"
|
||||
+ " GROUP BY of_date "
|
||||
+ "</if>"
|
||||
+ "<if test='_databaseId == \"postgresql\" '>"
|
||||
+ " SELECT \n"
|
||||
+ " \t to_char(create_time, 'YYYY-MM-DD') as of_date , \n"
|
||||
+ " \t count(*) as count_of_job,\n"
|
||||
+ " \t count(DISTINCT assignment_id) as count_of_task \n"
|
||||
+ " FROM \n"
|
||||
+ " ( \n"
|
||||
+ " \t SELECT * FROM DBSWITCH_ASSIGNMENT_JOB\n"
|
||||
+ " \t WHERE CURRENT_DATE - INTERVAL'1 day' <= create_time::date\n"
|
||||
+ " ) t \n"
|
||||
+ " GROUP BY of_date; "
|
||||
+ "</if>"
|
||||
+ "</script>")
|
||||
@Results({
|
||||
@Result(column = "of_date", property = "dateOfDay"),
|
||||
@Result(column = "count_of_job", property = "countOfJob"),
|
||||
|
@@ -10,17 +10,8 @@
|
||||
package com.gitee.dbswitch.admin.mapper;
|
||||
|
||||
import com.gitee.dbswitch.admin.entity.SystemUserEntity;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
import tk.mybatis.mapper.common.Mapper;
|
||||
|
||||
public interface SystemUserMapper extends Mapper<SystemUserEntity> {
|
||||
|
||||
@Select("select * from `DBSWITCH_SYSTEM_USER` where username=#{username} limit 1")
|
||||
SystemUserEntity findByUsername(@Param("username") String username);
|
||||
|
||||
@Update("update `DBSWITCH_SYSTEM_USER` set password=#{password} where username=#{username} ")
|
||||
void updateUserPassword(@Param("username") String username, @Param("password") String password);
|
||||
|
||||
}
|
||||
|
@@ -32,4 +32,4 @@ mybatis:
|
||||
|
||||
mapper:
|
||||
wrap-keyword: "`{0}`"
|
||||
enable-method-annotation: true
|
||||
enable-method-annotation: true
|
||||
|
@@ -0,0 +1,35 @@
|
||||
server:
|
||||
port: 9088
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: dbswitch-admin
|
||||
tomcat:
|
||||
uri-encoding: UTF-8
|
||||
max-http-header-size: 8096
|
||||
mvc:
|
||||
throw-exception-if-no-handler-found: true
|
||||
static-path-pattern: /statics/**
|
||||
datasource:
|
||||
driver-class-name: com.mysql.jdbc.Driver
|
||||
url: jdbc:mysql://192.168.31.57:3306/dbswitch?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&useSSL=false&allowMultiQueries=true&failOverReadOnly=false&connectTimeout=30000
|
||||
username: tangyibo
|
||||
password: 123456
|
||||
validation-query: SELECT 1
|
||||
test-on-borrow: true
|
||||
flyway:
|
||||
locations: classpath:db/migration
|
||||
baseline-on-migrate: true
|
||||
table: DBSWITCH_SCHEMA_HISTORY
|
||||
enabled: true
|
||||
|
||||
mybatis:
|
||||
configuration:
|
||||
lazy-loading-enabled: true
|
||||
aggressive-lazy-loading: false
|
||||
map-underscore-to-camel-case: true
|
||||
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
|
||||
mapper:
|
||||
wrap-keyword: "`{0}`"
|
||||
enable-method-annotation: true
|
@@ -0,0 +1,35 @@
|
||||
server:
|
||||
port: 9088
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: dbswitch-admin
|
||||
tomcat:
|
||||
uri-encoding: UTF-8
|
||||
max-http-header-size: 8096
|
||||
mvc:
|
||||
throw-exception-if-no-handler-found: true
|
||||
static-path-pattern: /statics/**
|
||||
datasource:
|
||||
driver-class-name: org.postgresql.Driver
|
||||
url: jdbc:postgresql://192.168.31.57:5432/dbswitch?currentSchema=public
|
||||
username: tangyibo
|
||||
password: 123456
|
||||
validation-query: SELECT 1
|
||||
test-on-borrow: true
|
||||
flyway:
|
||||
locations: classpath:db/postgres
|
||||
baseline-on-migrate: true
|
||||
table: dbswitch_schema_history
|
||||
enabled: true
|
||||
|
||||
mybatis:
|
||||
configuration:
|
||||
lazy-loading-enabled: true
|
||||
aggressive-lazy-loading: false
|
||||
map-underscore-to-camel-case: true
|
||||
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
|
||||
mapper:
|
||||
wrap-keyword: "\"{0}\""
|
||||
enable-method-annotation: true
|
@@ -0,0 +1,194 @@
|
||||
-- Thanks to Patrick Lightbody for submitting this...
|
||||
--
|
||||
-- In your Quartz properties file, you'll need to set
|
||||
-- org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_JOB_DETAILS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
JOB_NAME VARCHAR(200) NOT NULL,
|
||||
JOB_GROUP VARCHAR(200) NOT NULL,
|
||||
DESCRIPTION VARCHAR(250) NULL,
|
||||
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
|
||||
IS_DURABLE BOOL NOT NULL,
|
||||
IS_NONCONCURRENT BOOL NOT NULL,
|
||||
IS_UPDATE_DATA BOOL NOT NULL,
|
||||
REQUESTS_RECOVERY BOOL NOT NULL,
|
||||
JOB_DATA BYTEA NULL,
|
||||
PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_TRIGGERS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
JOB_NAME VARCHAR(200) NOT NULL,
|
||||
JOB_GROUP VARCHAR(200) NOT NULL,
|
||||
DESCRIPTION VARCHAR(250) NULL,
|
||||
NEXT_FIRE_TIME BIGINT NULL,
|
||||
PREV_FIRE_TIME BIGINT NULL,
|
||||
PRIORITY INTEGER NULL,
|
||||
TRIGGER_STATE VARCHAR(16) NOT NULL,
|
||||
TRIGGER_TYPE VARCHAR(8) NOT NULL,
|
||||
START_TIME BIGINT NOT NULL,
|
||||
END_TIME BIGINT NULL,
|
||||
CALENDAR_NAME VARCHAR(200) NULL,
|
||||
MISFIRE_INSTR SMALLINT NULL,
|
||||
JOB_DATA BYTEA NULL,
|
||||
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
|
||||
REFERENCES DBSWITCH_JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_SIMPLE_TRIGGERS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
REPEAT_COUNT BIGINT NOT NULL,
|
||||
REPEAT_INTERVAL BIGINT NOT NULL,
|
||||
TIMES_TRIGGERED BIGINT NOT NULL,
|
||||
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
REFERENCES DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_CRON_TRIGGERS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
CRON_EXPRESSION VARCHAR(120) NOT NULL,
|
||||
TIME_ZONE_ID VARCHAR(80),
|
||||
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
REFERENCES DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_SIMPROP_TRIGGERS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
STR_PROP_1 VARCHAR(512) NULL,
|
||||
STR_PROP_2 VARCHAR(512) NULL,
|
||||
STR_PROP_3 VARCHAR(512) NULL,
|
||||
INT_PROP_1 INT NULL,
|
||||
INT_PROP_2 INT NULL,
|
||||
LONG_PROP_1 BIGINT NULL,
|
||||
LONG_PROP_2 BIGINT NULL,
|
||||
DEC_PROP_1 NUMERIC(13, 4) NULL,
|
||||
DEC_PROP_2 NUMERIC(13, 4) NULL,
|
||||
BOOL_PROP_1 BOOL NULL,
|
||||
BOOL_PROP_2 BOOL NULL,
|
||||
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
REFERENCES DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
);
|
||||
|
||||
CREATE IF NOT EXISTS DBSWITCH_BLOB_TRIGGERS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
BLOB_DATA BYTEA NULL,
|
||||
PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
REFERENCES DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_CALENDARS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
CALENDAR_NAME VARCHAR(200) NOT NULL,
|
||||
CALENDAR BYTEA NOT NULL,
|
||||
PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_PAUSED_TRIGGER_GRPS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_FIRED_TRIGGERS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
ENTRY_ID VARCHAR(95) NOT NULL,
|
||||
TRIGGER_NAME VARCHAR(200) NOT NULL,
|
||||
TRIGGER_GROUP VARCHAR(200) NOT NULL,
|
||||
INSTANCE_NAME VARCHAR(200) NOT NULL,
|
||||
FIRED_TIME BIGINT NOT NULL,
|
||||
SCHED_TIME BIGINT NOT NULL,
|
||||
PRIORITY INTEGER NOT NULL,
|
||||
STATE VARCHAR(16) NOT NULL,
|
||||
JOB_NAME VARCHAR(200) NULL,
|
||||
JOB_GROUP VARCHAR(200) NULL,
|
||||
IS_NONCONCURRENT BOOL NULL,
|
||||
REQUESTS_RECOVERY BOOL NULL,
|
||||
PRIMARY KEY (SCHED_NAME, ENTRY_ID)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_SCHEDULER_STATE
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
INSTANCE_NAME VARCHAR(200) NOT NULL,
|
||||
LAST_CHECKIN_TIME BIGINT NOT NULL,
|
||||
CHECKIN_INTERVAL BIGINT NOT NULL,
|
||||
PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_LOCKS
|
||||
(
|
||||
SCHED_NAME VARCHAR(120) NOT NULL,
|
||||
LOCK_NAME VARCHAR(40) NOT NULL,
|
||||
PRIMARY KEY (SCHED_NAME, LOCK_NAME)
|
||||
);
|
||||
|
||||
CREATE INDEX IDX_DBSWITCH_J_REQ_RECOVERY
|
||||
ON DBSWITCH_JOB_DETAILS (SCHED_NAME, REQUESTS_RECOVERY);
|
||||
CREATE INDEX IDX_DBSWITCH_J_GRP
|
||||
ON DBSWITCH_JOB_DETAILS (SCHED_NAME, JOB_GROUP);
|
||||
|
||||
CREATE INDEX IDX_DBSWITCH_T_J
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
|
||||
CREATE INDEX IDX_DBSWITCH_T_JG
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, JOB_GROUP);
|
||||
CREATE INDEX IDX_DBSWITCH_T_C
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, CALENDAR_NAME);
|
||||
CREATE INDEX IDX_DBSWITCH_T_G
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
|
||||
CREATE INDEX IDX_DBSWITCH_T_STATE
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_STATE);
|
||||
CREATE INDEX IDX_DBSWITCH_T_N_STATE
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, TRIGGER_STATE);
|
||||
CREATE INDEX IDX_DBSWITCH_T_N_G_STATE
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_GROUP, TRIGGER_STATE);
|
||||
CREATE INDEX IDX_DBSWITCH_T_NEXT_FIRE_TIME
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, NEXT_FIRE_TIME);
|
||||
CREATE INDEX IDX_DBSWITCH_T_NFT_ST
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, TRIGGER_STATE, NEXT_FIRE_TIME);
|
||||
CREATE INDEX IDX_DBSWITCH_T_NFT_MISFIRE
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME);
|
||||
CREATE INDEX IDX_DBSWITCH_T_NFT_ST_MISFIRE
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_STATE);
|
||||
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP
|
||||
ON DBSWITCH_TRIGGERS (SCHED_NAME, MISFIRE_INSTR, NEXT_FIRE_TIME, TRIGGER_GROUP, TRIGGER_STATE);
|
||||
|
||||
CREATE INDEX IDX_DBSWITCH_FT_TRIG_INST_NAME
|
||||
ON DBSWITCH_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME);
|
||||
CREATE INDEX IDX_DBSWITCH_FT_INST_JOB_REQ_RCVRY
|
||||
ON DBSWITCH_FIRED_TRIGGERS (SCHED_NAME, INSTANCE_NAME, REQUESTS_RECOVERY);
|
||||
CREATE INDEX IDX_DBSWITCH_FT_J_G
|
||||
ON DBSWITCH_FIRED_TRIGGERS (SCHED_NAME, JOB_NAME, JOB_GROUP);
|
||||
CREATE INDEX IDX_DBSWITCH_FT_JG
|
||||
ON DBSWITCH_FIRED_TRIGGERS (SCHED_NAME, JOB_GROUP);
|
||||
CREATE INDEX IDX_DBSWITCH_FT_T_G
|
||||
ON DBSWITCH_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP);
|
||||
CREATE INDEX IDX_DBSWITCH_FT_TG
|
||||
ON DBSWITCH_FIRED_TRIGGERS (SCHED_NAME, TRIGGER_GROUP);
|
||||
|
||||
COMMIT;
|
@@ -0,0 +1,173 @@
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_SYSTEM_USER (
|
||||
"id" bigserial not null,
|
||||
"username" varchar(255) not null,
|
||||
"password" varchar(128) not null,
|
||||
"salt" varchar(128) not null,
|
||||
"real_name" varchar(255) not null default '',
|
||||
"email" varchar(255) not null default '',
|
||||
"address" varchar(255) not null default '',
|
||||
"locked" boolean not null default false,
|
||||
"create_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
"update_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX DBSWITCH_SYSTEM_USER_USERNAME_IDX ON DBSWITCH_SYSTEM_USER("username");
|
||||
COMMENT ON TABLE DBSWITCH_SYSTEM_USER IS '系统用户表';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."id" IS '主键id';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."username" IS '登录名称';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."password" IS '登录密码';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."salt" IS '密码盐值';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."real_name" IS '实际姓名';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."email" IS '电子邮箱';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."address" IS '所在地址';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."locked" IS '是否锁定';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."create_time" IS '创建时间';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_USER."update_time" IS '修改时间';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_SYSTEM_LOG (
|
||||
"id" bigserial not null,
|
||||
"type" int2 not null default 0,
|
||||
"username" varchar(64) not null default '',
|
||||
"ip_address" varchar(64) not null default '',
|
||||
"module_name" varchar(64) not null default '',
|
||||
"content" text ,
|
||||
"url_path" varchar(64) not null default '',
|
||||
"user_agent" varchar(255) not null default '',
|
||||
"failed" boolean not null default false,
|
||||
"exception" text ,
|
||||
"elapse_seconds" int8 not null default 0,
|
||||
"create_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
COMMENT ON TABLE DBSWITCH_SYSTEM_LOG IS '操作日志';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."id" IS '主键';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."type" IS '日志类型:0-访问日志;1-操作日志';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."username" IS '操作用户';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."ip_address" IS '客户端ip';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."module_name" IS '模块名';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."content" IS '日志描述';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."url_path" IS 'path路径';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."user_agent" IS '客户端agent';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."failed" IS '是否异常(0:否 1:是)';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."exception" IS '异常堆栈信息';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."elapse_seconds" IS '执行时间(单位毫秒)';
|
||||
COMMENT ON COLUMN DBSWITCH_SYSTEM_LOG."create_time" IS '创建时间';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_DATABASE_CONNECTION (
|
||||
"id" bigserial not null,
|
||||
"name" varchar(200) not null default '',
|
||||
"type" varchar(200) not null default '',
|
||||
"driver" varchar(200) not null default '',
|
||||
"url" text ,
|
||||
"username" varchar(200) not null default '',
|
||||
"password" varchar(200) not null default '',
|
||||
"create_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
"update_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
primary key ("id")
|
||||
);
|
||||
CREATE UNIQUE INDEX DBSWITCH_DATABASE_CONNECTION_NAME_IDX ON DBSWITCH_DATABASE_CONNECTION("name");
|
||||
COMMENT ON TABLE DBSWITCH_DATABASE_CONNECTION IS '数据库连接';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."id" IS '主键';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."name" IS '连接名称';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."type" IS '数据库类型';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."driver" IS '驱动类名称';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."url" IS 'jdbc-url连接串';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."username" IS '连接账号';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."password" IS '账号密码';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."create_time" IS '创建时间';
|
||||
COMMENT ON COLUMN DBSWITCH_DATABASE_CONNECTION."update_time" IS '修改时间';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_ASSIGNMENT_TASK (
|
||||
"id" bigserial not null,
|
||||
"name" varchar(200) not null default '',
|
||||
"description" text ,
|
||||
"schedule_mode" varchar(50) null default null,
|
||||
"cron_expression" varchar(200) not null default '',
|
||||
"published" boolean not null default false,
|
||||
"content" text ,
|
||||
"job_key" varchar(128) DEFAULT '',
|
||||
"create_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
"update_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
primary key ("id")
|
||||
);
|
||||
COMMENT ON TABLE DBSWITCH_ASSIGNMENT_TASK IS '任务信息表';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."id" IS '主键';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."name" IS '任务名称';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."description" IS '任务描述';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."schedule_mode" IS '调度方式(cron/无调度)';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."cron_expression" IS '调度cron表达式';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."published" IS '是否已发布(0:否 1:是)';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."content" IS '发布的配置JSON格式';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."job_key" IS 'JOB KEY';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."create_time" IS '创建时间';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_TASK."update_time" IS '修改时间';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_ASSIGNMENT_CONFIG (
|
||||
"id" bigserial not null,
|
||||
"assignment_id" int8 not null,
|
||||
"source_connection_id" int8 not null,
|
||||
"source_schema" varchar(1024) not null,
|
||||
"table_type" varchar(32) not null default 'TABLE',
|
||||
"source_tables" text ,
|
||||
"excluded" boolean not null default false,
|
||||
"target_connection_id" int8 not null,
|
||||
"target_schema" varchar(200) not null,
|
||||
"table_name_map" text ,
|
||||
"column_name_map" text ,
|
||||
"target_drop_table" boolean not null default false,
|
||||
"target_only_create" boolean not null default false,
|
||||
"batch_size" int8 not null default 10000,
|
||||
"first_flag" boolean not null default false,
|
||||
"create_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
primary key ("id"),
|
||||
foreign key ("assignment_id") references DBSWITCH_ASSIGNMENT_TASK ("id") on delete cascade on update cascade,
|
||||
foreign key ("source_connection_id") references DBSWITCH_DATABASE_CONNECTION ("id") on delete cascade on update cascade,
|
||||
foreign key ("target_connection_id") references DBSWITCH_DATABASE_CONNECTION ("id") on delete cascade on update cascade
|
||||
);
|
||||
CREATE UNIQUE INDEX DBSWITCH_ASSIGNMENT_CONFIG_AID_UNIQUE_IDX ON DBSWITCH_ASSIGNMENT_CONFIG ("assignment_id");
|
||||
COMMENT ON TABLE DBSWITCH_ASSIGNMENT_CONFIG IS '任务配置表';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."id" IS '主键';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."assignment_id" IS '任务ID';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."source_connection_id" IS '来源端连接ID';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."source_schema" IS '来源端的schema';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."table_type" IS '表类型:TABLE;VIEW';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."source_tables" IS '来源端的table列表';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."excluded" IS '是否排除(0:否 1:是)';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."target_connection_id" IS '目的端连接ID';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."target_schema" IS '目的端的schema(一个)';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."table_name_map" IS '表名映射关系';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."column_name_map" IS '字段名映射关系';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."target_drop_table" IS '同步前是否先删除目的表(0:否 1:是)';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."target_only_create" IS '是否只建表';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."batch_size" IS '处理批次大小';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."first_flag" IS '首次加载数据';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_CONFIG."create_time" IS '创建时间';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS DBSWITCH_ASSIGNMENT_JOB (
|
||||
"id" bigserial not null,
|
||||
"assignment_id" int8 not null,
|
||||
"job_key" varchar(200) not null default '',
|
||||
"start_time" timestamp not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
"finish_time" timestamp not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
"schedule_mode" smallint not null default 0,
|
||||
"status" smallint not null default 0,
|
||||
"error_log" text ,
|
||||
"create_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
"update_time" timestamp(6) not null default (CURRENT_TIMESTAMP(0))::timestamp(0) without time zone,
|
||||
primary key ("id"),
|
||||
foreign key ("assignment_id") references DBSWITCH_ASSIGNMENT_TASK ("id") on delete cascade on update cascade
|
||||
);
|
||||
|
||||
COMMENT ON TABLE DBSWITCH_ASSIGNMENT_JOB IS 'JOB日志表';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."id" IS '主键';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."assignment_id" IS '任务ID';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."job_key" IS 'Quartz的Job名';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."start_time" IS '执行开始时间';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."finish_time" IS '执行结束时间';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."schedule_mode" IS '调度模式';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."status" IS '执行状态:0-未执行;1-执行中;2-执行失败;3-执行成功';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."error_log" IS '异常日志';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."create_time" IS '创建时间';
|
||||
COMMENT ON COLUMN DBSWITCH_ASSIGNMENT_JOB."update_time" IS '修改时间';
|
@@ -0,0 +1,2 @@
|
||||
insert into DBSWITCH_SYSTEM_USER("username","password","salt","real_name","locked","email")
|
||||
values ('admin', '$2a$10$eUanVjvzV27BBxAb4zuBCugwnngHkRZ7ZB4iI5tdx9ETJ2tnXJJDy', '$2a$10$eUanVjvzV27BBxAb4zuBCu', '管理员', false,'admin@126.com');
|
@@ -200,6 +200,10 @@
|
||||
<artifactId>guava</artifactId>
|
||||
<groupId>com.google.guava</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>derby</artifactId>
|
||||
<groupId>org.apache.derby</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@@ -78,7 +78,7 @@
|
||||
</includes>
|
||||
</fileSet>
|
||||
|
||||
<!-- 将模块dbswitch-webapi的jar文件放到打包目录/lib 下 -->
|
||||
<!-- 将模块dbswitch-admin的jar文件放到打包目录/lib 下 -->
|
||||
<fileSet>
|
||||
<directory>${project.parent.basedir}/dbswitch-admin/target
|
||||
</directory>
|
||||
|
Reference in New Issue
Block a user