From c24ecd29564d9f297a2727411136445d207ef48a Mon Sep 17 00:00:00 2001
From: sglmsn <2450572350@qq.com>
Date: Thu, 1 Apr 2021 13:57:21 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E9=9B=86=E6=88=90=E5=A4=9A=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E6=BA=90dynamic-datasource-spring-boot-starter?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 31 +++-
.../quickstart/service/DynamicService.java | 26 +++
.../quickstart/service/OrganInfoService.java | 9 ++
.../service/TransLedgerService.java | 9 ++
.../service/impl/DynamicServiceImpl.java | 68 ++++++++
.../service/impl/InitDBServiceImpl.java | 18 +--
.../service/impl/InitDBServiceImplLog.java | 105 +++++++++++++
.../service/impl/OrganInfoServiceImpl.java | 13 +-
.../service/impl/TransLedgerServiceImpl.java | 20 ++-
src/main/resources/application-local.yml | 148 ++++++++++++++++++
src/main/resources/application-server.yml | 147 +++++++++++++++++
src/main/resources/application.yml | 36 +----
src/main/resources/log4j2.xml | 2 +-
src/main/resources/spy.properties | 2 +
.../sqltoy/quickstart/DynamicQueryTest.java | 46 ++++++
.../sqltoy/quickstart/InitDataBaseTest.java | 21 ++-
16 files changed, 643 insertions(+), 58 deletions(-)
create mode 100644 src/main/java/com/sqltoy/quickstart/service/DynamicService.java
create mode 100644 src/main/java/com/sqltoy/quickstart/service/impl/DynamicServiceImpl.java
create mode 100644 src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImplLog.java
create mode 100644 src/main/resources/application-local.yml
create mode 100644 src/main/resources/application-server.yml
create mode 100644 src/main/resources/spy.properties
create mode 100644 src/test/java/com/sqltoy/quickstart/DynamicQueryTest.java
diff --git a/pom.xml b/pom.xml
index 6ba8350..b9401c5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,8 @@
2.1.7
+
+
org.springframework.boot
spring-boot-starter
@@ -70,21 +72,44 @@
aspectjweaver
${aspectjweaver.version}
+
com.alibaba
druid-spring-boot-starter
${druid.version}
+
+
+ org.mariadb.jdbc
+ mariadb-java-client
+ 2.7.2
+
+
+ com.baomidou
+ dynamic-datasource-spring-boot-starter
+ 3.3.1
+
+
+ p6spy
+ p6spy
+ 3.9.1
+
com.sagframe
sagacity-sqltoy
${sqltoy-starter.version}
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
com.sagframe
sagacity-sqltoy-starter
${sqltoy-starter.version}
+
org.junit.jupiter
junit-jupiter-api
@@ -98,11 +123,7 @@
test
-
- mysql
- mysql-connector-java
- ${mysql.version}
-
+
org.slf4j
slf4j-api
diff --git a/src/main/java/com/sqltoy/quickstart/service/DynamicService.java b/src/main/java/com/sqltoy/quickstart/service/DynamicService.java
new file mode 100644
index 0000000..ceb2ff0
--- /dev/null
+++ b/src/main/java/com/sqltoy/quickstart/service/DynamicService.java
@@ -0,0 +1,26 @@
+package com.sqltoy.quickstart.service;
+
+/**
+ * 多数据源server
+ *
+ * @author sglmsn
+ * @date 2021/04/01
+ */
+public interface DynamicService {
+
+ /**
+ * 换库查询
+ */
+ void changeDatabaseQuery();
+
+ /**
+ * 查询主库
+ */
+ void queryTheMainLibrary();
+
+
+ /**
+ * 事务
+ */
+ void affair();
+}
diff --git a/src/main/java/com/sqltoy/quickstart/service/OrganInfoService.java b/src/main/java/com/sqltoy/quickstart/service/OrganInfoService.java
index 76aaa79..bd9a8b2 100644
--- a/src/main/java/com/sqltoy/quickstart/service/OrganInfoService.java
+++ b/src/main/java/com/sqltoy/quickstart/service/OrganInfoService.java
@@ -19,4 +19,13 @@ public interface OrganInfoService {
* @return
*/
public void saveOrganInfo(OrganInfoVO organInfoVO);
+
+
+ /**
+ * 更新
+ *
+ * @param organInfoVO
+ * @return {@link Long}
+ */
+ Long update(OrganInfoVO organInfoVO);
}
diff --git a/src/main/java/com/sqltoy/quickstart/service/TransLedgerService.java b/src/main/java/com/sqltoy/quickstart/service/TransLedgerService.java
index 690972a..900ec69 100644
--- a/src/main/java/com/sqltoy/quickstart/service/TransLedgerService.java
+++ b/src/main/java/com/sqltoy/quickstart/service/TransLedgerService.java
@@ -14,4 +14,13 @@ import com.sqltoy.quickstart.vo.TransLedgerVO;
*/
public interface TransLedgerService {
public TransLedgerVO updateTrans(TransLedgerVO transVO);
+
+
+ /**
+ * 记录流水
+ *
+ * @param transLedgerVO
+ * @return {@link TransLedgerVO}
+ */
+ TransLedgerVO recordFlow(TransLedgerVO transLedgerVO);
}
diff --git a/src/main/java/com/sqltoy/quickstart/service/impl/DynamicServiceImpl.java b/src/main/java/com/sqltoy/quickstart/service/impl/DynamicServiceImpl.java
new file mode 100644
index 0000000..4ffd02f
--- /dev/null
+++ b/src/main/java/com/sqltoy/quickstart/service/impl/DynamicServiceImpl.java
@@ -0,0 +1,68 @@
+package com.sqltoy.quickstart.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.sqltoy.quickstart.service.DynamicService;
+import com.sqltoy.quickstart.service.TransLedgerService;
+import com.sqltoy.quickstart.vo.OrganInfoVO;
+import com.sqltoy.quickstart.vo.TransLedgerVO;
+import org.sagacity.sqltoy.dao.SqlToyLazyDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class DynamicServiceImpl implements DynamicService {
+
+ @Autowired
+ OrganInfoServiceImpl organInfoService;
+
+ @Autowired
+ TransLedgerService transLedgerService;
+
+ @Autowired
+ SqlToyLazyDao sqlToyLazyDao;
+
+ @DS("log")
+ @Override
+ public void changeDatabaseQuery() {
+ List all = sqlToyLazyDao.findAll(OrganInfoVO.class);
+ OrganInfoVO serializable = all.get(0);
+ serializable.setCostNo(serializable.getCostNo() + "_ds");
+ sqlToyLazyDao.saveOrUpdate(serializable);
+ }
+
+ @Override
+ public void queryTheMainLibrary() {
+ List all = sqlToyLazyDao.findAll(OrganInfoVO.class);
+ OrganInfoVO serializable = all.get(0);
+ serializable.setCostNo(serializable.getCostNo() + "_ds");
+ sqlToyLazyDao.saveOrUpdate(serializable);
+ }
+
+ @Override
+ @DSTransactional
+ @DS("log")
+ public void affair() {
+ {
+ TransLedgerVO transLedgerVO = new TransLedgerVO();
+ transLedgerVO.setAmt(new BigDecimal("1"))
+ .setCreateBy("多数据源").setCreateTime(LocalDateTime.now()).setUpdateTime(LocalDateTime.now()).setOrderId("1").setQuantity(3);
+ transLedgerService.recordFlow(transLedgerVO);
+ }
+
+ {
+ List all = sqlToyLazyDao.findAll(OrganInfoVO.class);
+ OrganInfoVO serializable = all.get(0);
+ serializable.setCostNo(serializable.getCostNo() + "多数据源测试");
+ organInfoService.update(serializable);
+ }
+ int f = 1 / 0;
+ }
+
+
+
+}
diff --git a/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImpl.java b/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImpl.java
index 43edc44..eb09456 100644
--- a/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImpl.java
+++ b/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImpl.java
@@ -3,12 +3,9 @@
*/
package com.sqltoy.quickstart.service.impl;
-import java.math.BigDecimal;
-import java.sql.Connection;
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.List;
-
+import com.sqltoy.quickstart.service.InitDBService;
+import com.sqltoy.quickstart.vo.DeviceOrderVO;
+import com.sqltoy.quickstart.vo.StaffInfoVO;
import org.sagacity.sqltoy.callback.DataSourceCallbackHandler;
import org.sagacity.sqltoy.dao.SqlToyLazyDao;
import org.sagacity.sqltoy.model.EntityQuery;
@@ -22,9 +19,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import com.sqltoy.quickstart.service.InitDBService;
-import com.sqltoy.quickstart.vo.DeviceOrderVO;
-import com.sqltoy.quickstart.vo.StaffInfoVO;
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
/**
* @project sqltoy-quickstart
@@ -34,6 +33,7 @@ import com.sqltoy.quickstart.vo.StaffInfoVO;
* @modify 2020年7月17日,修改说明
*/
@Service("initDBService")
+
public class InitDBServiceImpl implements InitDBService {
@Autowired
private SqlToyLazyDao sqlToyLazyDao;
diff --git a/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImplLog.java b/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImplLog.java
new file mode 100644
index 0000000..a79da1e
--- /dev/null
+++ b/src/main/java/com/sqltoy/quickstart/service/impl/InitDBServiceImplLog.java
@@ -0,0 +1,105 @@
+/**
+ *
+ */
+package com.sqltoy.quickstart.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.sqltoy.quickstart.service.InitDBService;
+import com.sqltoy.quickstart.vo.DeviceOrderVO;
+import com.sqltoy.quickstart.vo.StaffInfoVO;
+import org.sagacity.sqltoy.callback.DataSourceCallbackHandler;
+import org.sagacity.sqltoy.dao.SqlToyLazyDao;
+import org.sagacity.sqltoy.model.EntityQuery;
+import org.sagacity.sqltoy.utils.DataSourceUtils;
+import org.sagacity.sqltoy.utils.DateUtil;
+import org.sagacity.sqltoy.utils.FileUtil;
+import org.sagacity.sqltoy.utils.NumberUtil;
+import org.sagacity.sqltoy.utils.SqlUtil;
+import org.sagacity.sqltoy.utils.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @project sqltoy-quickstart
+ * @description 请在此说明类的功能
+ * @author zhongxuchen
+ * @version v1.0, Date:2020年7月17日
+ * @modify 2020年7月17日,修改说明
+ */
+@Service("initDBServiceLog")
+@DS("log")
+public class InitDBServiceImplLog implements InitDBService {
+ @Autowired
+ private SqlToyLazyDao sqlToyLazyDao;
+ @DSTransactional
+ @Override
+ public void initDatabase(String dataSqlFile) {
+ // 加载初始化数据脚本(最好手工执行数据初始化,便于演示缓存翻译功能)
+ final String sqlContent = FileUtil.readFileAsStr(dataSqlFile, "UTF-8");
+ if (StringUtil.isBlank(sqlContent)) {
+ return;
+ }
+ DataSourceUtils.processDataSource(sqlToyLazyDao.getSqlToyContext(), sqlToyLazyDao.getDataSource(),
+ new DataSourceCallbackHandler() {
+ @Override
+ public void doConnection(Connection conn, Integer dbType, String dialect) throws Exception {
+ // executeBatchSql可以根据数据库类型将大的sql字符进行分割循环执行
+ SqlUtil.executeBatchSql(conn, sqlContent, 100, true);
+ // 返回结果
+ // this.setResult(result);
+ }
+ });
+
+ }
+
+ @Transactional
+ public Long initOrderData() {
+ // 第一步清除数据(deleteByQuery 不允许无条件删除,简易方式跳过)
+ sqlToyLazyDao.deleteByQuery(DeviceOrderVO.class, EntityQuery.create().where("1=?").values(1));
+
+ // 模拟订单信息
+ List orderInfos = new ArrayList();
+ int max = 1000;
+ // 查询全部员工(空条件,sqltoy强制约束需要设置条件)
+ List staffs = sqlToyLazyDao.findEntity(StaffInfoVO.class,
+ EntityQuery.create().where("").values(""));
+ StaffInfoVO staff;
+ int[] days = { 10, 15, 20, 30, 60 };
+ LocalDate nowTime = DateUtil.getDate();
+ // 直接通过sqltoy的缓存获取字典数据,避免查询数据库
+ List