解决多模块内核心模块有接口打包成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:

相关推荐
爱的叹息几秒前
解决 IntelliJ IDEA 中 Maven 项目左侧项目视图未显示顶层目录问题的详细步骤说明
java·maven·intellij-idea
多云的夏天9 分钟前
java -程序打包-jar-exe
java·开发语言·jar
isfox12 分钟前
速学!Java 原子操作,开启并发编程新境界
后端·程序员
楽码18 分钟前
只需一文!深入理解闭包的实现
后端·go·编程语言
cong_29 分钟前
🌟摸鱼 TV 搭建属于自己的视频站
前端·后端·github
bobz96531 分钟前
内网网络 rp_filter 参数配置
后端
开心就好202537 分钟前
【机器学习】用户手机使用行为分析
后端
zwrlj52739 分钟前
编码能效插件SmartInputPro插件扩展
后端
加瓦点灯41 分钟前
从阻塞到 Reactor:理解 Java I/O 背后的架构思维
后端
zzzzz36941 分钟前
服务器返回前端Long类型精度丢失
后端