本次实操基于开源基础核心包开发,可直接拉取代码落地,所有资源和环境准备步骤如下:
``` curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker curl -L "https://github.com/docker/compose/releases/download/2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ```
``` git clone https://gitee.com/itdevhub/archive-lease-base.git cd archive-lease-base ```
租赁模式核心需要配置三个模块:租户数据隔离、租期管控、按量配额,逐一操作如下:
打开项目根目录下的application.yml配置文件,直接替换为以下完整内容,无需额外修改参数:
``` server: port: 8080 spring: datasource: dynamic: enabled: true primary: master datasource: master: username: root password: archive_123 url: jdbc:mysql://mysql:3306/archive_master?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: tenant-id: column: tenant_id logic-delete-field: deleted tenant: enable: true isolation-type: schema billing: enable: true mode: lease storage: default-quota: 104857600 ```
这里重点确认:billing.mode参数已经设置为lease,即开启租赁计费模式;tenant.isolation-type使用Schema隔离,相比独立数据库可降低30%以上的资源成本,适合中小规模租赁业务。

进入项目的src/main/java/com/archive/lease/config目录,打开LeaseInterceptor.java,添加以下拦截规则,自动拦截过期租户访问:
```
@Component
public class LeaseExpireInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
TenantInfo currentTenant = TenantContextHolder.getCurrentTenant();
if (currentTenant == null) return true;
if (currentTenant.getExpireTime().before(new Date())){
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(JSON.toJSONString(Result.fail("租赁服务已过期,请续费后继续使用")));
return false;
}
if (currentTenant.getUsedStorage() > currentTenant.getTotalQuota()){
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(JSON.toJSONString(Result.fail("存储配额已用尽,请扩容后继续上传")));
return false;
}
return true;
}
}
```
配置完成后,打开同目录下的WebMvcConfig.java,添加拦截器注册,代码如下:
```
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LeaseExpireInterceptor())
.addPathPatterns("/api/")
.excludePathPatterns("/api/admin/login", "/api/public/");
}
```
回到项目根目录,直接执行一键部署命令,整个过程会自动搭建MySQL、Nginx和应用服务:
``` docker-compose up -d --build ```
部署完成后,访问http://你的服务器IP:8080/admin,使用默认超级管理员账号admin密码archive123登录后台,开通租户租赁的步骤如下:
租赁模式上线后,所有日常操作均可在后台可视化完成,无需修改代码:
docker ps确认容器状态,若容器退出执行docker-compose logs app查看错误日志ntpdate ntp.aliyun.com同步服务器时间,再检查租户到期时间设置是否正确df -h查看服务器磁盘剩余空间是否充足