当前位置: 首页 > news >正文

聊聊PowerJob的StoreStrategy

本文主要研究一下PowerJob的StoreStrategy

StoreStrategy

tech/powerjob/worker/common/constants/StoreStrategy.java

@Getter
@AllArgsConstructor
public enum  StoreStrategy {DISK("磁盘"),MEMORY("内存");private final String des;
}

StoreStrategy枚举定义了DISK、MEMORY两个枚举

ConnectionFactory

tech/powerjob/worker/persistence/ConnectionFactory.java

@Slf4j
public class ConnectionFactory {private volatile DataSource dataSource;private final String H2_PATH = PowerFileUtils.workspace() + "/h2/" + CommonUtils.genUUID() + "/";private final String DISK_JDBC_URL = String.format("jdbc:h2:file:%spowerjob_worker_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", H2_PATH);private final String MEMORY_JDBC_URL = String.format("jdbc:h2:mem:%spowerjob_worker_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false", H2_PATH);public Connection getConnection() throws SQLException {return dataSource.getConnection();}public synchronized void initDatasource(StoreStrategy strategy) {// H2 兼容性问题较多,前置输出版本方便排查log.info("[PowerDatasource] H2 database version: {}", JavaUtils.determinePackageVersion(Driver.class));// 兼容单元测试,否则没办法单独测试 DAO 层了strategy = strategy == null ? StoreStrategy.DISK : strategy;HikariConfig config = new HikariConfig();config.setDriverClassName(Driver.class.getName());config.setJdbcUrl(strategy == StoreStrategy.DISK ? DISK_JDBC_URL : MEMORY_JDBC_URL);config.setAutoCommit(true);// 池中最小空闲连接数量config.setMinimumIdle(2);// 池中最大连接数量config.setMaximumPoolSize(32);dataSource = new HikariDataSource(config);log.info("[PowerDatasource] init h2 datasource successfully, use url: {}", config.getJdbcUrl());// JVM 关闭时删除数据库文件try {FileUtils.forceDeleteOnExit(new File(H2_PATH));log.info("[PowerDatasource] delete worker db file[{}] on JVM exit successfully", H2_PATH);}catch (Throwable t) {log.warn("[PowerDatasource] delete file on JVM exit failed: {}", H2_PATH, t);}}}

ConnectionFactory在initDatasource的时候会根据StoreStrategy的类型来设置H2的jdbcUrl,如果是DISK则jdbcUrl为jdbc:h2:file:%spowerjob_worker_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false,如果是MEMORY的话,jdbcUrl为jdbc:h2:mem:%spowerjob_worker_db;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;其中%s为H2_PATH,取的是PowerFileUtils.workspace() + "/h2/" + CommonUtils.genUUID() + "/"

workspace

tech/powerjob/worker/common/utils/PowerFileUtils.java

@Slf4j
public class PowerFileUtils {/*** 获取工作目录* @return 允许用户通过启动配置文件自定义存储目录,默认为 user.home*/public static String workspace() {String workspaceByDKey = System.getProperty(PowerJobDKey.WORKER_WORK_SPACE);if (StringUtils.isNotEmpty(workspaceByDKey)) {log.info("[PowerFileUtils] [workspace] use custom workspace: {}", workspaceByDKey);return workspaceByDKey;}final String userHome = System.getProperty("user.home").concat("/powerjob/worker");log.info("[PowerFileUtils] [workspace] use user.home as workspace: {}", userHome);return userHome;}
}

workspace先从系统属性取powerjob.worker.workspace,若没有则取home目录下的powerjob/worker目录

PowerJobProperties

tech/powerjob/worker/autoconfigure/PowerJobProperties.java

    @Setter@Getterpublic static class Worker {//....../*** Protocol for communication between WORKER and server*/private Protocol protocol = Protocol.AKKA;/*** Local store strategy for H2 database. {@code disk} or {@code memory}.*/private StoreStrategy storeStrategy = StoreStrategy.DISK;//......}    

PowerJobProperties.Worker的storeStrategy默认为DISK类型

小结

PowerJob的StoreStrategy枚举定义了DISK、MEMORY两个枚举,默认为DISK类型,它配置的是H2数据库的jdbcUrl是使用file的还是memory的,file的默认path为home目录下的powerjob/worker目录。

http://www.lryc.cn/news/269148.html

相关文章:

  • HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计
  • vscode | python | remote-SSH | Debug 配置 + CLIP4Clip实验记录
  • 【Linux】实现windows主机与ubuntu虚拟机系统之间文件/字符复制粘贴
  • Ubuntu22.04-安装后Terminal无法调出
  • ffmpeg两种windows版本区别说明
  • 最新国内AI绘画Midjourney绘画提示词Prompt分享
  • ChatGPT4.0(中文版)国内无限制免费版(附网址)
  • 模拟电路基础知识笔记,你想知道的都有,建议收藏!
  • 【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用
  • Pandas 高级教程——高级时间序列分析
  • 解决Pycharm pip安装模块太慢问题,pycharm2022没有manage repositories配置镜像源
  • 十二:爬虫-Scrapy框架(上)
  • BUUCTF Reverse/[2019红帽杯]Snake
  • 概率论相关题型
  • C#中的Attribute详解(上)
  • 天津医科大学临床医学院专升本药学专业有机化学考试大纲
  • 电脑开机自动断电,简单4招,快速解决!
  • 线程基础知识(三)
  • elasticsearch系列七:聚合查询
  • SQL面试题挑战11:访问会话切割
  • 2023“楚怡杯”湖南省赛“信息安全管理与评估“--应急响应(高职组)
  • 【Python百宝箱】Python引领制造变革:CAM技术全景解析与实战指南
  • 【新版Hi3559AV100 旗舰8K30 AI摄像机芯片】
  • 小样本学习idea(不断更新)
  • 表情包搜索网站
  • Linux账号和权限管理
  • Qt/QML编程学习之心得:QML和C++的相互调用(十五)
  • 月入10.5K,专科小伙转行网优:据说每个领域都有一个“显眼包”
  • Python自动化测试:选择最佳的自动化测试框架
  • Ubuntu16.04 安装Anaconda