# 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 ```