解决多模块内核心模块有接口打包成jar后被依赖并调用遇到的问题(springcloud集成ruoyi.quartz)

项目准备开发个新功能,刚好很喜欢ruoyi写的任务调度,因此想到了集成ruoyi.quartz模块 ,遇到了很多问题:

首先因为ruoyi.quartz模块依赖了ruoyi.common模块,因此第一步我需要把common模块一部分依赖项复制到了quartz模块内(复制的内容就是common文件夹内的,未用到的部门被我剔除了):

当然只是添加common内公共代码是不够的,还需要添加依赖:

XML 复制代码
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xxx</groupId>
        <artifactId>leaderdesktop</artifactId>
        <version>0.0.1-SNAPSHOT</version> 
    </parent><!-- 以上是我springcloud项目父模块定义-->

    <artifactId>ruoyi-quartz</artifactId>
    <version>4.0</version>
    <name>ruoyi-quartz</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!-- 定时任务 -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.mchange</groupId>
                    <artifactId>c3p0</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
       
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency> <!--  因为我需要使用多数据源,正常项目也可删除-->
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.6.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>

当把ruoyi.quartz模块集成到我的springcloud项目的A模块中(pom依赖了ruoyi.quartz),当启动A模块时访问ruoyi.quartz模块的接口404错误,经过查询了解想使用依赖模块(ruoyi.quartz)的接口必须在A模块启动类里面添加扫描注解

java 复制代码
@ComponentScan({"com.epson.本模块某个路径.*", "com.ruoyi.quartz.*"}) 

以上注解添加之后又报:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field jobMapper in com.ruoyi.quartz.service.impl.SysJobServiceImpl required a bean of type 'com.ruoyi.quartz.mapper.SysJobMapper' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.ruoyi.quartz.mapper.SysJobMapper' in your configuration.

解决办法就是加上

java 复制代码
@MapperScan({"com.本模块.mapper", "com.ruoyi.quartz.mapper"})

当把以上注解加上之后正常应该是没问题的,但是因我当前模块使用了多数据源因此又报以下异常:

java 复制代码
postgresql.util.PSQLException: ERROR: relation "sys_job" does not exist

正常来说我只需要在ruoyi-quartz模块中的service实现类中添加@DS("xxx")数据源指定即可

但是我添加了还是无效,所以没办法就尝试第二种集成:

1. 首先第一步还是先把ruoyi-quartz使用的所有表格创建一遍,因我是使用postgre,因此脚本需要使用DBeaver导出postgre的脚本(在mysql数据库中执行完sql语句,右键把所有表导出csv,再选择postgre数据库public位置右键导入数据,选择csv文件即可完成postgre的表格创建)

  1. 把ruoyi-quartz模块中的文件夹全部复制过去原有模块即可(我比较喜欢用mybatisplus的方法,因此mapper文件被我改造后只有一个接口声明)

最终启动还是报sys_job表不存在,排查半天发现SysJobServiceImpl类中的init方法的原因,注释掉这个方法就启动成功

init方法注释:项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据),因此如果不需要项目启动就执行定时任务那么可以注释掉

最后的代码层次:

再次访问OK:

相关推荐
小_太_阳6 分钟前
Scala_【1】概述
开发语言·后端·scala·intellij-idea
智慧老师15 分钟前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm17 分钟前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101341 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
Oneforlove_twoforjob1 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
xmh-sxh-13141 小时前
常用的缓存技术都有哪些
java
搬码后生仔2 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
迷糊的『迷』2 小时前
vue-axios+springboot实现文件流下载
vue.js·spring boot
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
AiFlutter2 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter