diff --git a/.gitignore b/.gitignore
index 82559987..43206035 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,5 +51,4 @@ rebel.xml
/backup/
-/web/src/main/resources/application-dev.properties
/lib/rt.jar
diff --git a/admin-core/pom.xml b/admin-core/pom.xml
index 0130a56d..70328992 100644
--- a/admin-core/pom.xml
+++ b/admin-core/pom.xml
@@ -105,6 +105,12 @@
com.qeedata
dynamic-beetlsql-spring-boot-starter
${dynamic-beetlsql-spring-boot-starter.version}
+
+
+ com.ibeetl
+ beetlsql
+
+
com.zaxxer
diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScheduleSessionService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScheduleSessionService.java
index 80e5950e..4086587e 100644
--- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScheduleSessionService.java
+++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScheduleSessionService.java
@@ -9,7 +9,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.jlw.util.ToolUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
-import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.Master;
import com.ibeetl.admin.core.service.CoreBaseService;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.holidays.Day;
@@ -48,7 +48,7 @@ public class TeacherOpenCourseScheduleSessionService extends CoreBaseServicequeryByCondition(PageQuery query){
PageQuery ret = teacherOpenCourseScheduleSessionDao.queryByCondition(query);
queryListAfter(ret.getList());
diff --git a/web/src/main/resources/application-dev.properties b/web/src/main/resources/application-dev.properties
new file mode 100644
index 00000000..925f59c9
--- /dev/null
+++ b/web/src/main/resources/application-dev.properties
@@ -0,0 +1,51 @@
+# \u8BBE\u7F6E\u9ED8\u8BA4\u7684\u6570\u636E\u6E90\u6216\u8005\u6570\u636E\u6E90\u7EC4,\u9ED8\u8BA4\u503C\u5373\u4E3A ds1
+spring.datasource.dynamic.primary = master
+spring.datasource.dynamic.p6spy = false
+spring.datasource.dynamic.strict = false
+spring.datasource.dynamic.hikari.max-pool-size=30
+spring.datasource.dynamic.hikari.connection-test-query=SELECT 1
+
+# ds1
+spring.datasource.dynamic.datasource.master.driverClassName=com.mysql.cj.jdbc.Driver
+spring.datasource.dynamic.datasource.master.url=jdbc:mysql://localhost:3306/tzcj?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
+spring.datasource.dynamic.datasource.master.username=root
+spring.datasource.dynamic.datasource.master.password=root
+
+# ds2
+spring.datasource.dynamic.datasource.ds2.driverClassName=com.mysql.cj.jdbc.Driver
+spring.datasource.dynamic.datasource.ds2.url=jdbc:mysql://localhost:3306/tzcj2?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
+spring.datasource.dynamic.datasource.ds2.username=root
+spring.datasource.dynamic.datasource.ds2.password=root
+
+# sqlManagers = \u591A\u4E2A sqlManager \u5217\u8868
+dynamic.beetlsql.sqlManagers = master,ds2,cs
+# primary \u9ED8\u8BA4 sqlManager
+dynamic.beetlsql.primary = cs
+# transactionManager \u9ED8\u8BA4\u81EA\u52A8\u751F\u6210\uFF0C\u5982\u9700\u81EA\u5DF1\u7BA1\u7406\u5219\u8BBE\u7F6E\u4E3A false
+# dynamic.beetlsql.transactionManager = false
+
+# \u9ED8\u8BA4\u503C _default
+dynamic.beetlsql._default.dev = true
+
+# 1, \u914D\u7F6E\u5355\u72EC sqlManager
+# A) \u540D\u79F0: ds1, dataSource \u540C\u540D\u79F0 ds1, \u6216 dynamic.beetlsql.ds1.ds = ds1
+dynamic.beetlsql.master.sqlPath = sql
+dynamic.beetlsql.master.daoSuffix = Dao
+dynamic.beetlsql.master.basePackage = com.ibeetl
+dynamic.beetlsql.master.dbStyle = org.beetl.sql.core.db.MySqlStyle
+dynamic.beetlsql.master.slave = ds2
+
+# B) \u540D\u79F0: ds2, dataSource \u540C\u540D\u79F0 ds2, \u6216 dynamic.beetlsql.ds2.ds = ds2
+dynamic.beetlsql.ds2.sqlPath = sql
+dynamic.beetlsql.ds2.daoSuffix = Dao
+dynamic.beetlsql.ds2.basePackage = com.ibeetl
+dynamic.beetlsql.ds2.dbStyle = org.beetl.sql.core.db.MySqlStyle
+
+# 3, dynamicConnectionSource \u6A21\u5F0F(\u53EF\u9009)
+# \u4F7F\u7528\u4E00\u4E2A sqlManager \u5207\u6362, \u4F7F\u7528 ConditionalConnectionSource
+dynamic.beetlsql.cs.sqlPath = sql
+dynamic.beetlsql.cs.daoSuffix = Dao
+dynamic.beetlsql.cs.basePackage = com.ibeetl
+dynamic.beetlsql.cs.dbStyle = org.beetl.sql.core.db.MySqlStyle
+# \u5FC5\u987B dynamicConnectionSource \u8868\u793A\u4F7F\u7528 ConditionalConnectionSource \u6A21\u5F0F
+dynamic.beetlsql.cs.dynamicConnectionSource = master,ds2
\ No newline at end of file
diff --git a/web/src/main/resources/btsql-ext.properties b/web/src/main/resources/btsql-ext.properties
index 7b3cf211..30524df1 100644
--- a/web/src/main/resources/btsql-ext.properties
+++ b/web/src/main/resources/btsql-ext.properties
@@ -5,26 +5,26 @@ DELIMITER_STATEMENT_END=
DELIMITER_PLACEHOLDER_START2=${
DELIMITER_PLACEHOLDER_END2=}
-#??????
+#\u6839\u636E\u7C7B\u578B\u5224\u7A7A
FN.isEmpty = org.beetl.ext.fn.EmptyExpressionFunction
FN.isNotEmpty = org.beetl.ext.fn.IsNotEmptyExpressionFunction
-# sql???????????????
+# sql\u8BED\u53E5\u91CC\u5E26\u6709\u6B64\u51FD\u6570\u6765\u5224\u65AD\u6570\u636E\u6743\u9650
FN.function= com.ibeetl.admin.core.util.beetl.DataAccessFunction
-#??
+#\u660E\u5929
FN.nextDay= com.ibeetl.admin.core.util.beetl.NextDayFunction
-#??????
+#\u8DF3\u8F6C\u8DEF\u5F84\u914D\u7F6E
FN.getUrl= com.ibeetl.admin.core.util.beetl.UrlFunction
-#??ID?100???? ??????
+#\u9ED8\u8BA4ID\u5230100\u7684\u8F85\u52A9\u8868 \u7528\u4E8E\u5206\u5272\u5FAA\u73AF
FN.numTable= com.ibeetl.admin.core.util.beetl.NumFunction
-#??????
+#\u6570\u636E\u5E93\u540D\u914D\u7F6E
FN.getDataTableName= com.ibeetl.admin.core.util.beetl.DataTableName
-#????????
+#\u8BA2\u5355\u8FC7\u671F\u65F6\u95F4\u914D\u7F6E
FN.getTimeLimit= com.ibeetl.admin.core.util.beetl.TimeLimit
-#??????????
+#\u8BA2\u5355\u8BC4\u8BBA\u8FC7\u671F\u5929\u6570\u914D\u7F6E
FN.getCommentLimit= com.ibeetl.admin.core.util.beetl.CommentTimeLimit
-#????
+#\u5206\u5272\u5224\u65AD
FN.split= com.ibeetl.admin.core.util.beetl.SplitFunction
-#??????????????????
+#\u6839\u636E\u64CD\u4F5C\u4EBA\u5458\u7684\u96C6\u56E2\u663E\u793A\u76F8\u5E94\u7684\u4F1A\u5458\u7B49\u7EA7
FN.rankJurisdiction= com.ibeetl.admin.core.util.beetl.RankJurisdictionFunction