# matrix-framework
**Repository Path**: sintrue/matrix-framework
## Basic Information
- **Project Name**: matrix-framework
- **Description**: a rapid develop framework base on springboot
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-01-13
- **Last Updated**: 2025-09-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# matrix-framework
A rapid,efficient and stable development framework based on springboot,which is distributed, asynchronous non-blocking
and reactive
# 配置仓库
因snapshot版本在中央仓库不存在,故需指定如下仓库:
```xml
matrix-snapshot
https://s01.oss.sonatype.org/content/repositories/snapshots/
true
always
```
# Maven依赖
matrix-framework的依赖是分模块独立依赖的,后续的模块描述会有相应的maven依赖说明,但需要引入springboot的依赖
```xml
org.springframework.boot
spring-boot-dependencies
3.0.0
pom
import
```
# matrix-framework-commons
# matrix-framework-core
## 配置文件
配置文件支持外置、支持远程文件、支持profile。
配置文件的根路径:${configRoot}/matrix-framework-${profile}/
配置文件根路径configRoot优先级:
* System.getenv中的configRoot
* System.getProperty中的configRoot
* classpath
* 在bootstrap 或 application 中指定 spring.config.import=matrix://file://d:
## 编程式安全获取Bean
在容器启动早期完成初始化,足够安全
```java
public class ExampleClass {
public void exampleMethod() {
Object bean = BeanLoader.INSTANCE.getBean("beanName");
Object bean = BeanLoader.INSTANCE.getBean(Bean.class);
}
}
```
## 覆盖替换同名Bean
可以使用如下注解覆盖同名的SpringBean
```java
public class Configuration {
@OverrideBean("beanName")
@Bean
public Example example() {
}
}
```
## AOP失效问题解决
实现接口AopProxyAware,即可获取正确的代理对象。
# matrix-framework-data
## maven依赖
```xml
wang.liangchen.matrix
matrix-framework-data-spring-boot-starter
${version.version}
```
## 启用
在Springboot配置类上使用注解@EnableJdbc启用模块
```java
@EnableJdbc
public class Configuration {
}
```
## 启用自动缓存
在引入matrix-cache的情况下,基于StandaloneDao的操作会自动使用缓存。
maven引入说明:
* 自动缓存数据的操作
select list pagination count exists
* 自动清理缓存的操作
insert delete update
* 可以禁用缓存的方法参数
Criteria DeleteCriteria UpdateCriteria
## 多数据源
动态切换数据源,支持方法间数据源嵌套
* 多数据源配置 jdbc.properties
```properties
# primary is required
primary.dialect=wang.liangchen.matrix.framework.data.datasource.dialect.MySQLDialect
primary.datasource=com.zaxxer.hikari.HikariDataSource
#primary.url=
primary.host=127.0.0.1
primary.port=3306
primary.database=
#primary.schema=
primary.username=
primary.password=
#primary.extra.MaximumPoolSize=100
#primary.extra.maximum-pool-size=100
# other is optional
one.dialect=wang.liangchen.matrix.framework.data.datasource.dialect.PostgreSQLDialect
one.datasource=com.zaxxer.hikari.HikariDataSource
one.host=127.0.0.1
one.port=5432
one.database=
#one.schema=
one.username=
one.password=
```
* 注解式切换
```java
//标注类
@DataSourceSwitchable("dataSourceName")
public class Class {
//标注方法
@DataSourceSwitchable("dataSourceName")
public void method() {
}
}
```
* 编程式切换
```java
MultiDataSourceContext.INSTANCE.set(datasource);
try {
// 使用数据源的逻辑
} finally {
MultiDataSourceContext.INSTANCE.clear();
}
```
## 基于数据库的序列号生成器
```java
public class ExampleClass {
@Inject
ISequenceDao sequenceDao;
public Long sequence() {
return sequenceDao.sequenceNumber(sequenceKey, initialValue);
}
}
```
# 分布式锁
## Maven依赖
```xml
wang.liangchen.matrix
matrix-framework-lock-spring-boot-starter
```
## 启用
使用注解@EnableLock开启分布式锁
```java
@EnableLock
```
使用注解@MatrixLock配置锁,指定锁名称和最大最小锁定时长
```java
@MatrixLock(lockKey="",lockAtLeast="",lockAtMost="")
```
# matrix-framework-generator
# matrix-framework-web
1、统一序列化为特定的JSON格式(含直接对象、异常、空响应)
2、统一处理异常(含404)
3、统一处理requestId
依次从header、query中获取参数"requestId",并回传到Response,用于为前端标识同一次请求
4、统一处理和切换Locale
依次从header、query、cookie、Accept-Language中解析Locale(参数:locale,lang),并放入WebContext
4、统一支持SSE和DefferedResult
# matrix-framework的使用
## 引入数据访问模块
```xml
wang.liangchen.matrix
matrix-framework-data-spring-boot-starter
1.0.0-SNAPSHOT
```
## 在src/main/resources目录创建matrix-framework目录用来放置如下文件
1、
2、autoscan.properties 内容为空
3、logger.properties
```properties
config.file=logback.xml
```
4、logback.xml
```xml
%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %caller{1} - %msg%n
```