# GDones-智能云
**Repository Path**: gdones/gdonescloud-boot
## Basic Information
- **Project Name**: GDones-智能云
- **Description**: GDones智能云平台-实现系统功能、代码生成、仓储物流、电商分销、企业人资管理等功能
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2023-05-04
- **Last Updated**: 2024-08-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GDonesCloudBoot
GDones开发框架微服务版本
### 云服务主版本说明
* SpringCloud-Alibaba: 2.2.9.RELEASE
* SpringCloud:Hoxton.SR12
* SpringBoot: 2.3.12.RELEASE
### Alibaba组件版本说明
* Sentinel:1.8.5
* Nacos:2.1.0
* RocketMQ:4.9.4
* Dubbo:~
* Seata:1.5.2
### 其他组件
* 链路追踪:SkyWalking :9.2.0
* 链路追踪-java探针:SkyWalking-Java-agents:8.12.0
### 模块说明
* gdones-common: 公共共享组件(所有微服务可访问,无端口,静态组件)
* gdones-generate: 代码生成器(无端口,静态组件)
* gdones-gateway: 服务网关(端口:8200,nacos服务id:gdones.gateway)
* gdones-server: 公共基础服务(端口:8100,nacos服务id:gdones.server)
* gdones-wms: 仓储物流管理服务(端口:8101,nacos服务id:gdones.wms)
### 使用前准备说明
#### 1.nacos配置且启动
##### (1)初始化nacos数据源
> 文件在根目录sql文件夹下--》nacos-mysql.sql文件
> 然后将其执行到名称为nacos的数据库下,保存好数据库连接,如下:
```properties
jdbc:mysql://localhost:3306/nacos?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
```
##### (2)修改nacos配置文件-添加nacos数据源
记住用户名密码,提供给nacos配置文件中进行数据源配置,下面简单附上:
配置文件在:nacos\conf\application.properties
```properties
### If use MySQL as datasource: 使用数据源类型(现在只支持mysql)
spring.datasource.platform=mysql
### Count of DB: 数据源数量
db.num=1
### Connect URL of DB: 数据源配置
db.url.0=jdbc:mysql://localhost:3306/nacos?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=cxk666
```
##### (3)修改nacos配置文件-开启权限配置
```properties
### If turn on auth system: 使用nacos系统权限配值
nacos.core.auth.enabled=true
```
##### (4)启动nacos服务
> 1.将仓库中的nacos文件夹,放置在本机,根据操作系统不同使用不同的startup启动项目
#### 2.sentinel启动
在项目根目录下有sentinel包,包中有对应当前版本的控制台界面jar包
可以使用我定义的sentinel-startup.bat 运行控制台
文件内容如下:如需要修改可以自行更改
```bat
java -Dserver.port=8858 -jar sentinel-dashboard-1.8.5.jar
pause
```
#### 3.gdones-gateway网关启动注意事项
##### (1)网关日志
一般在需要优先启动网关
如果网关需要开启gateway记录日志,在idea 启动参数中添加jvm启动参数:
注意:它必须是java系统属性而不适宜SpringBoot属性,否则无效
```text
-Dreactor.netty.http.server.accessLogEnabled=true
```
##### (2)网关配置跨域源地址
如果前端服务有一个或多个地址需要修改配置
```yaml
# 跨域配置
globalcors:
add-to-simple-url-handler-mapping: true
cors-configurations:
'[/**]':
# 在此处修改源地址
allowedOrigins: "http://localhost:25100"
```
#### 4.seata启动
##### (1)seata持久化模式,推荐使用DB,且基于nacos配置实现
```yaml
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848 # TODO:nacos地址
namespace: gd_seata
group: SEATA_GROUP
username: nacos
password: nacos
data-id: seataServer.properties
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP # TODO:seata分组名,注意和nacos保持一直
namespace: gd_seata # TODO:修改为你自己设置nacos命名空间
cluster: default
username: nacos # TODO:你的nacos账号密码
password: nacos
# store: #这个配置作用不大,因为上面在引入的nacos配置的时候,又会再引入一遍数据库的配置
# support: file 、 db 、 redis
# mode: db
# server:
# service-port: 8091 #If not configured, the default is '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
```
##### (2)初始化seata数据库
数据库初始化sql文件在:sql文件夹下的seata_mysql.sql,创建一个新的数据库名为seata
##### (3)登录nacos,新建命名空间gd_seata
在对应命名空间下创建配置:
Data ID:seataServer.properties
Group:SEATA_GROUP
配置内容:
```properties
store.mode=db
store.lock.mode=db
store.session.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=cxk666
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
service.vgroupMapping.account_tx_group=default
service.vgroupMapping.storage_tx_group=default
service.vgroupMapping.order_tx_group=default
```
##### (4)启动seata,查看在nacos对应命名空间中是否有服务
启动使用seata目录bin目录下的startup启动即可
注意:使用低版本jdk,建议使用1.8,如果出现chph或者em找不到,请将C:/Windos/System32配置到环境变量中
##### (5)seata业务数据相关补充说明
每个业务表需要使用seata实现分布式事务管理,需要在对应的业务数据库中都添加一个undo_log表,
该表的作用是实现事务逆解析和回滚
```sql
CREATE TABLE `undo_log` (
`branch_id` bigint NOT NULL COMMENT 'branch transaction id',
`xid` varchar(128) NOT NULL COMMENT 'global transaction id',
`context` varchar(128) NOT NULL COMMENT 'undo_log context,such as serialization',
`rollback_info` longblob NOT NULL COMMENT 'rollback info',
`log_status` int NOT NULL COMMENT '0:normal status,1:defense status',
`log_created` datetime(6) NOT NULL COMMENT 'create datetime',
`log_modified` datetime(6) NOT NULL COMMENT 'modify datetime',
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AT transaction mode undo table';
```
在service层,需要添加分布式事务的位置添加@GlobalTransaction注解
#### 5.Skywalking启动
##### (1)启动服务方法
在 apache-skywalking-apm-9.2.0\apache-skywalking-apm-bin\bin 目录下
执行 sartup服务,会一次启动多个服务,服务窗口没有日志需要到上级目录log中查看,在linux下可以操作实时日志,windows无法查看实时日志
##### (2)微服务接入SkyWalking
需要在启动服务时,添加jvm参数
```text
-javaagent:F:\SpringCloudAliBabaComps\apache-skywalking-java-agent-8.12.0\apache-skywalking-java-agent-8.12.0\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-DSW_AGENT_NAME=gdones.server
```
参数解释:
* -javaagent: 你自己的skywalking-agent.jar 包所在的位置
* -DSW_AGENT_COLLECTOR_BACKEND_SERVICES: skywalking 服务地址(11800是默认的skw提供给微服务的端口)
* -DSW_AGENT_NAME:微服务名称(和nacos保持一致)
##### (3)SkyWalking持久化
修改SkyWalking目录下conf目录下的application.yml
```yaml
storage:
selector: ${SW_STORAGE:mysql}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:cxk666}
```
只需要创建对应数据库:swtest即可,没有初始化sql,SkyWalking会自动初始化
如需使用自定义链路追踪在方法上添加@Trace注解