xxl-job适配sqlite本地数据库及mysql数据库。可根据配置指定使用哪种数据库。

xxl-job整合sqlite

  1. 根据mysql的脚本,整理为sqlite的脚本,详见tables_xxl_job.sqllite.sql

  2. 创建sqlite数据库文件并执行上述sql,得到xxl-job-admin的resource下db/xxl-job

  3. xxl-job-admin的pom中添加sqlite驱动依赖

    xml 复制代码
    <!--sqlite-jdbc -->
    		<dependency>
    			<groupId>org.xerial</groupId>
    			<artifactId>sqlite-jdbc</artifactId>
    			<version>3.43.2.1</version>
    		</dependency>
  4. 修改application.properties配置

    添加配置:

    properties 复制代码
    # mysql||sqlite
    spring.profiles.active=${CURRENT_DBTYPE:sqlite}
    #spring.profiles.active=${CURRENT_DBTYPE:mysql}
    database.type: ${spring.profiles.active}

    mybatis配置:

    properties 复制代码
    ### mybatis
    mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
    mybatis.configuration.database-id=${database.type}
    mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

    注释掉datasource相关配置

    properties 复制代码
    ### xxl-job, datasource
    #spring.datasource.url=jdbc:mysql://127.0.0.1:3306/srvmonitor?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    #spring.datasource.username=root
    #spring.datasource.password=root
    #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  5. 创建application-mysql.properties及application-sqlite.properties

    application-mysql.properties:

    properties 复制代码
    ### mysql
    spring.datasource.url=jdbc:mysql://${MYSQL_HOST:127.0.0.1:3306}/srvmonitor?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

    application-sqlite.properties:

    properties 复制代码
    ### sqllite
    spring.datasource.driver-class-name=org.sqlite.JDBC
    spring.datasource.url=jdbc:sqlite::resource:${CONNECTION_URL:db/xxl_job}?date_string_format=yyyy-MM-dd HH:mm:ss
  6. 修改XxlJobAdminApplication启动类

    java 复制代码
    @SpringBootApplication
    public class XxlJobAdminApplication implements ApplicationContextAware {
    
    	public static void main(String[] args) {
            SpringApplication.run(XxlJobAdminApplication.class, args);
    	}
    
    	@Bean
    	public DatabaseIdProvider getDatabaseIdProvider() {
    		DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
    		Properties properties = new Properties();
    		properties.setProperty("SQLite", "sqlite");
    		properties.setProperty("MySQL", "mysql");
    		databaseIdProvider.setProperties(properties);
    		return databaseIdProvider;
    	}
    
    	@Override
    	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    		Environment environment = applicationContext.getBean(Environment.class);
    		String url = environment.getProperty("spring.datasource.url");
    		if (!StringUtils.isEmpty(url)) {
    			DataSourceUtil.setDbType(url);
    		}
    	}
    }
  7. 修改JobScheduleHelper中start方法中适配sqlite的语法

    复制代码
     preparedStatement = conn.prepareStatement(  "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
                            if ("sqlite".equalsIgnoreCase(DataSourceUtil.getDbType())) {
                                preparedStatement = conn.prepareStatement("select * from xxl_job_lock where lock_name = 'schedule_lock'");
                            } else {
                                preparedStatement = conn.prepareStatement("select * from xxl_job_lock where lock_name = 'schedule_lock' for update");
                            }
                            preparedStatement.execute();
  8. 所有dao中pageList、pageListCount、save方法对应的xml,按照databaseId为mysql和sqlite分别写两套

    sqlite不支持CONCAT函数

    sqlite不支持useGeneratedKeys="true"来自动获取新增后的id(需要用到的地方,改成用select last_insert_rowid()获取最新的id)

相关推荐
白帽攻防录2 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭2 小时前
达梦SQL优化相关
linux·运维·数据库·sql
nhdh2 小时前
B+树揭秘:MySQL索引核心原理全解析
数据结构·b树·mysql
对空六课3 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司3 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk4 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea4 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
余槐i5 小时前
MySQL 深分页从 4 秒到 60 毫秒:延迟关联减少回表的实测与代价
mysql·性能优化·sql优化·执行计划·慢查询优化
东方护航数据恢复(深圳)5 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk6 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle