|
2 | 2 | using Microsoft.Data.SqlClient; |
3 | 3 | using Microsoft.Data.Sqlite; |
4 | 4 | using Microsoft.Extensions.DependencyInjection; |
| 5 | +using MySqlConnector; |
5 | 6 | using Npgsql; |
6 | 7 | using Quartz; |
7 | 8 |
|
@@ -33,6 +34,10 @@ public static IServiceCollection AddQuartzService(this IServiceCollection servic |
33 | 34 | { |
34 | 35 | x.UsePostgres(opt => opt.ConnectionString = connectionString); |
35 | 36 | } |
| 37 | + else if (dbProvider == "MySQL") |
| 38 | + { |
| 39 | + x.UseMySql(opt => opt.ConnectionString = connectionString); |
| 40 | + } |
36 | 41 |
|
37 | 42 | x.UseNewtonsoftJsonSerializer(); |
38 | 43 | }); |
@@ -90,6 +95,33 @@ public static void InitialQuartzTable(string connectionString, string dbProvider |
90 | 95 | conn.Close(); |
91 | 96 | } |
92 | 97 | } |
| 98 | + else if (dbProvider == "MySQL") |
| 99 | + { |
| 100 | + using (var conn = new MySqlConnection(connectionString)) |
| 101 | + { |
| 102 | + conn.Open(); |
| 103 | + |
| 104 | + // 先检查表是否存在 |
| 105 | + bool tableExists = false; |
| 106 | + using (var cmd = conn.CreateCommand()) |
| 107 | + { |
| 108 | + cmd.CommandText = "SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'QRTZ_JOB_DETAILS'"; |
| 109 | + var result = cmd.ExecuteScalar(); |
| 110 | + tableExists = (result != null); |
| 111 | + } |
| 112 | + |
| 113 | + // 如果表不存在,则创建表 |
| 114 | + if (!tableExists) |
| 115 | + { |
| 116 | + using (var cmd = conn.CreateCommand()) |
| 117 | + { |
| 118 | + cmd.CommandText = MySQLScript; |
| 119 | + cmd.ExecuteNonQuery(); |
| 120 | + } |
| 121 | + } |
| 122 | + conn.Close(); |
| 123 | + } |
| 124 | + } |
93 | 125 | } |
94 | 126 |
|
95 | 127 | #region Sqlite Script |
@@ -704,6 +736,174 @@ PRIMARY KEY (sched_name,lock_name) |
704 | 736 | "; |
705 | 737 |
|
706 | 738 | #endregion |
| 739 | + |
| 740 | + #region MySQL Script |
| 741 | + |
| 742 | + private const string MySQLScript = @" |
| 743 | +
|
| 744 | +
|
| 745 | + CREATE TABLE QRTZ_JOB_DETAILS( |
| 746 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 747 | + JOB_NAME VARCHAR(200) NOT NULL, |
| 748 | + JOB_GROUP VARCHAR(200) NOT NULL, |
| 749 | + DESCRIPTION VARCHAR(250) NULL, |
| 750 | + JOB_CLASS_NAME VARCHAR(250) NOT NULL, |
| 751 | + IS_DURABLE BOOLEAN NOT NULL, |
| 752 | + IS_NONCONCURRENT BOOLEAN NOT NULL, |
| 753 | + IS_UPDATE_DATA BOOLEAN NOT NULL, |
| 754 | + REQUESTS_RECOVERY BOOLEAN NOT NULL, |
| 755 | + JOB_DATA BLOB NULL, |
| 756 | + PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) |
| 757 | + ENGINE=InnoDB; |
| 758 | +
|
| 759 | + CREATE TABLE QRTZ_TRIGGERS ( |
| 760 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 761 | + TRIGGER_NAME VARCHAR(200) NOT NULL, |
| 762 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 763 | + JOB_NAME VARCHAR(200) NOT NULL, |
| 764 | + JOB_GROUP VARCHAR(200) NOT NULL, |
| 765 | + DESCRIPTION VARCHAR(250) NULL, |
| 766 | + NEXT_FIRE_TIME BIGINT(19) NULL, |
| 767 | + PREV_FIRE_TIME BIGINT(19) NULL, |
| 768 | + PRIORITY INTEGER NULL, |
| 769 | + TRIGGER_STATE VARCHAR(16) NOT NULL, |
| 770 | + TRIGGER_TYPE VARCHAR(8) NOT NULL, |
| 771 | + START_TIME BIGINT(19) NOT NULL, |
| 772 | + END_TIME BIGINT(19) NULL, |
| 773 | + CALENDAR_NAME VARCHAR(200) NULL, |
| 774 | + MISFIRE_INSTR SMALLINT(2) NULL, |
| 775 | + JOB_DATA BLOB NULL, |
| 776 | + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), |
| 777 | + FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) |
| 778 | + REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) |
| 779 | + ENGINE=InnoDB; |
| 780 | +
|
| 781 | + CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( |
| 782 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 783 | + TRIGGER_NAME VARCHAR(200) NOT NULL, |
| 784 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 785 | + REPEAT_COUNT BIGINT(7) NOT NULL, |
| 786 | + REPEAT_INTERVAL BIGINT(12) NOT NULL, |
| 787 | + TIMES_TRIGGERED BIGINT(10) NOT NULL, |
| 788 | + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), |
| 789 | + FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) |
| 790 | + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) |
| 791 | + ENGINE=InnoDB; |
| 792 | +
|
| 793 | + CREATE TABLE QRTZ_CRON_TRIGGERS ( |
| 794 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 795 | + TRIGGER_NAME VARCHAR(200) NOT NULL, |
| 796 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 797 | + CRON_EXPRESSION VARCHAR(120) NOT NULL, |
| 798 | + TIME_ZONE_ID VARCHAR(80), |
| 799 | + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), |
| 800 | + FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) |
| 801 | + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) |
| 802 | + ENGINE=InnoDB; |
| 803 | +
|
| 804 | + CREATE TABLE QRTZ_SIMPROP_TRIGGERS |
| 805 | + ( |
| 806 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 807 | + TRIGGER_NAME VARCHAR(200) NOT NULL, |
| 808 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 809 | + STR_PROP_1 VARCHAR(512) NULL, |
| 810 | + STR_PROP_2 VARCHAR(512) NULL, |
| 811 | + STR_PROP_3 VARCHAR(512) NULL, |
| 812 | + INT_PROP_1 INT NULL, |
| 813 | + INT_PROP_2 INT NULL, |
| 814 | + LONG_PROP_1 BIGINT NULL, |
| 815 | + LONG_PROP_2 BIGINT NULL, |
| 816 | + DEC_PROP_1 NUMERIC(13,4) NULL, |
| 817 | + DEC_PROP_2 NUMERIC(13,4) NULL, |
| 818 | + BOOL_PROP_1 BOOLEAN NULL, |
| 819 | + BOOL_PROP_2 BOOLEAN NULL, |
| 820 | + TIME_ZONE_ID VARCHAR(80) NULL, |
| 821 | + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), |
| 822 | + FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) |
| 823 | + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) |
| 824 | + ENGINE=InnoDB; |
| 825 | +
|
| 826 | + CREATE TABLE QRTZ_BLOB_TRIGGERS ( |
| 827 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 828 | + TRIGGER_NAME VARCHAR(200) NOT NULL, |
| 829 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 830 | + BLOB_DATA BLOB NULL, |
| 831 | + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), |
| 832 | + INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), |
| 833 | + FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) |
| 834 | + REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) |
| 835 | + ENGINE=InnoDB; |
| 836 | +
|
| 837 | + CREATE TABLE QRTZ_CALENDARS ( |
| 838 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 839 | + CALENDAR_NAME VARCHAR(200) NOT NULL, |
| 840 | + CALENDAR BLOB NOT NULL, |
| 841 | + PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) |
| 842 | + ENGINE=InnoDB; |
| 843 | +
|
| 844 | + CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( |
| 845 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 846 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 847 | + PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) |
| 848 | + ENGINE=InnoDB; |
| 849 | +
|
| 850 | + CREATE TABLE QRTZ_FIRED_TRIGGERS ( |
| 851 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 852 | + ENTRY_ID VARCHAR(140) NOT NULL, |
| 853 | + TRIGGER_NAME VARCHAR(200) NOT NULL, |
| 854 | + TRIGGER_GROUP VARCHAR(200) NOT NULL, |
| 855 | + INSTANCE_NAME VARCHAR(200) NOT NULL, |
| 856 | + FIRED_TIME BIGINT(19) NOT NULL, |
| 857 | + SCHED_TIME BIGINT(19) NOT NULL, |
| 858 | + PRIORITY INTEGER NOT NULL, |
| 859 | + STATE VARCHAR(16) NOT NULL, |
| 860 | + JOB_NAME VARCHAR(200) NULL, |
| 861 | + JOB_GROUP VARCHAR(200) NULL, |
| 862 | + IS_NONCONCURRENT BOOLEAN NULL, |
| 863 | + REQUESTS_RECOVERY BOOLEAN NULL, |
| 864 | + PRIMARY KEY (SCHED_NAME,ENTRY_ID)) |
| 865 | + ENGINE=InnoDB; |
| 866 | +
|
| 867 | + CREATE TABLE QRTZ_SCHEDULER_STATE ( |
| 868 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 869 | + INSTANCE_NAME VARCHAR(200) NOT NULL, |
| 870 | + LAST_CHECKIN_TIME BIGINT(19) NOT NULL, |
| 871 | + CHECKIN_INTERVAL BIGINT(19) NOT NULL, |
| 872 | + PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) |
| 873 | + ENGINE=InnoDB; |
| 874 | +
|
| 875 | + CREATE TABLE QRTZ_LOCKS ( |
| 876 | + SCHED_NAME VARCHAR(120) NOT NULL, |
| 877 | + LOCK_NAME VARCHAR(40) NOT NULL, |
| 878 | + PRIMARY KEY (SCHED_NAME,LOCK_NAME)) |
| 879 | + ENGINE=InnoDB; |
| 880 | +
|
| 881 | + CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); |
| 882 | + CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); |
| 883 | +
|
| 884 | + CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); |
| 885 | + CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); |
| 886 | + CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); |
| 887 | + CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); |
| 888 | + CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); |
| 889 | + CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); |
| 890 | + CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); |
| 891 | + CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); |
| 892 | + CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); |
| 893 | + CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); |
| 894 | + CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); |
| 895 | + CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); |
| 896 | +
|
| 897 | + CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); |
| 898 | + CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); |
| 899 | + CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); |
| 900 | + CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); |
| 901 | + CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); |
| 902 | + CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); |
| 903 | +
|
| 904 | +"; |
| 905 | + |
| 906 | + #endregion |
707 | 907 | } |
708 | 908 |
|
709 | 909 |
|
|
0 commit comments