# wxdgaming.boot2
**Repository Path**: lelezr/wxdgaming.boot2
## Basic Information
- **Project Name**: wxdgaming.boot2
- **Description**: 采用google guice 作为ioc容器提供模块化架构
重构基础模块实现
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2025-03-25
- **Last Updated**: 2025-03-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# wxdgaming.boot2
## 更新仓库地址
github https://github.com/orgs/wxd-gaming/repositories
gitee https://gitee.com/wxd-gaming
博客首页 https://www.cnblogs.com/wxd-gameing
B站 https://www.bilibili.com/list/316421251
#### 软件架构
| 模块 | 说明 |
|------------------------|----------------------------------|
| core | 核心模块,线程基础模块 |
| starter | 启动容器模块 |
| starter.batis | 数据库基础配置 |
| starter.batis.sql | 关系型数据库基础模块 |
| starter.batis.mysql | mysql关系型数据库 |
| starter.batis.pgsql | pgsql关系型数据库 |
| starter.net | 网络通信相关的基础模块 |
| starter.net.httpclient | 基于 apache http client 网络通信模块 |
| starter.net.server | 网络监听,端口同时支持 http, websocket, tcp |
| starter.schedule | 定时任务模块 |
| game.test | 容器启动测试模块 |
| game.test-scrtip | 容器启动测试模块脚本模块实现热更新 |
| boot.yml | 容器采用yml作为启动配置 |
### 配置
#### 开启端口服务
```
socket:
server:
debug: false
port: 8080
enabledHttp: true #是否启用http
enabledTcp: true #是否启用tcp
enabledWebSocket: true #是否启用websocket
webSocketPrefix: "/ws" #websocket前缀
maxAggregatorLength: 64 #聚合器最大长度
maxFrameBytes: -1 #单个消息最大长度
maxFrameLength: -1 #一秒钟接收消息最大数量
sslProtocolType: TLS #ssll类型
sslKeyStorePath: "jks/wxdtest-1.8.jks" #jks证书路径
sslPasswordPath: "jks/wxdtest-1.8.jks.pwd" #jks证书密码路径
idleTimeout: 0
writeTimeout: 0
readTimeout: 0
recvByteBufM: 12 #接收缓冲区大小 单位MB
writeByteBufM: 12 #发送缓冲区大小 单位MB
```
#### 开启数据库服务
```
db:
pgsql:
debug: true #调试模式将会显示sql语句
driverClassName: "org.postgresql.Driver"
url: "jdbc:postgresql://192.168.137.10:5432/test1"
username: "postgres"
password: "test"
scanPackage: "" #扫描路径
connectionTimeoutMs: 2000 #链接超时单位毫秒
idleTimeoutM: 10 #空闲超时单位分钟
minPoolSize: 5 #最小连接数
maxPoolSize: 20 #最大连接数
batchSubmitSize: 500 #批量提交数量
batchThreadSize: 1 #批量提交线程数
```
#### 启动代码
RunApplication run = WxdApplication.run(
CoreScan.class, //基础模块
ScheduledScan.class, //定时任务模块
NetScan.class, //网络模块
PgsqlScan.class, //开启pgsql数据库模块
MysqlScan.class, //开启mysql数据库模块
Main.class //启动类
);
#### 数据库映射
package run.entity;
import lombok.Getter;
import lombok.Setter;
import wxdgaming.boot2.starter.batis.EntityLongUID;
import wxdgaming.boot2.starter.batis.ann.DbColumn;
import wxdgaming.boot2.starter.batis.sql.ann.Partition;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@DbTable
public class EntityTest extends EntityLongUID {
@DbColumn(key = true)
@Partition()
private int day;
@DbColumn(index = true)
private boolean online;
private short sex;
private int age;
@DbColumn(length = 128)
private String name;
@DbColumn(length = 12800)
private String remark;
@DbColumn(length = 32800)
private String remark2;
private final List list = new ArrayList<>();
private byte[] datas;
@DbColumn(index = true)
private int overhead = 2;
}
数据库支持分区表,
数据类型支持 json 和 blob 类型
#### 数据库操作
@Test
public void t1() {
EntityTest entityTest = new EntityTest();
entityTest.setUid(System.currentTimeMillis());
entityTest.setDay(Integer.parseInt(MyClock.formatDate("yyyyMMdd")));
entityTest.setName("测试");
dataHelper.insert(entityTest);
entityTest.getList().add("测试1");
dataHelper.update(entityTest);
dataHelper.save(entityTest);
}
#### 开启 http 监听接口
@HttpRequest()
public String error(RunApplication runApplication,
@Value(path = "executor") ExecutorConfig executorConfig,
@Value(path = "executor1", required = false) ExecutorConfig executorConfig1,
@Body(defaultValue = "1") String body,
@Param(path = "b1", defaultValue = "2") String b1) {
throw new RuntimeException("d");
}
支持多种方式注入参数,
1. @Value 是通过配置文件获取参数注入
2. @Param 是通过请求的数据获取注入
3. @Body 是完整的参数映射
4. @Qualifier 是容器类实例参数
#### 开启 rpc 监听接口
@RpcRequest()
public String rpcTest1(RunApplication runApplication,
@Value(path = "executor") ExecutorConfig executorConfig,
@Value(path = "executor1", required = false) ExecutorConfig executorConfig1,
@Body(defaultValue = "1") String body,
@Param(path = "b1", defaultValue = "2") String b1) {
throw new RuntimeException("d");
}
支持多种方式注入参数,
1. @Value 是通过配置文件获取参数注入
2. @Param 是通过请求的数据获取注入
3. @Body 是完整的参数映射
4. @Qualifier 是容器类实例参数
###### rpc的调用方式
rpcService.request(socketSession, "rpcIndex", RunResult.ok().fluentPut("a", "b"))
.whenComplete((jsonObject, throwable) -> {
if (throwable != null) {
log.error("rpcIndex", throwable);
} else {
log.info("rpcIndex response {}", jsonObject);
}
});
##### 定时任务
@Scheduled("*/30")
@ExecutorWith(useVirtualThread = true)
public void timerAsync() {
log.info("{}", "timerAsync()");
}
#### 预览
