基于 SSH 的任务调度系统

文末附有完整项目代码


在当今科技飞速发展的时代,任务调度系统的重要性日益凸显。本文将详细介绍一个基于 SSH(Spring+Struts2+Hibernate)的任务调度系统的设计与实现。

一、系统概述

本系统旨在改变传统人工任务调度方式,通过计算机计算最佳人员分配和时间分配,绘制任务调度图,实现任务的科学调度与团队协作。它采用 B/S 体系结构,主要使用 JAVA 语言,后台数据库为 MySQL。

二、系统设计

  1. 研究现状及设计目标:传统任务调度系统存在诸多问题,如人工管理效率低、现有调度算法多以时间轮转为主忽略纵向等。本系统采用 B/S 模式,具有可扩展性强、分离度高的优点,且选用市场广泛应用的关系型数据库 MySQL。系统角色分为组长和组员,各自具备不同功能。
  2. 关键问题及分析
    • 任务调度:需在三个约束条件下使树状任务集组合而成的项目用时最短。通过构建任务树并分类,采用动态关键路径策略、最短用时策略和首次适应调度策略来实现。
    • 数据表间联系:数据复杂,业务逻辑关系也较复杂,通过外键联系保证业务操作稳定,重视表间联系以避免出现 bug 或 error。
    • 系统安全性:基于 B/S 模式,加入注册和登录模块,根据不同用户角色分配功能权限,使用 Spring 拦截器验证登录状态,防止非法访问。
  3. 调度算法设计
    • 按照约束构造任务树。
    • 将可调度任务和准可调度任务加入备选任务集,若为空则项目完成,否则根据动态关键路径策略选路径长度最长的可调度任务,若不唯一则选用时最短的。
    • 应用首次适应调度算法调度所选任务,从任务树和备选任务集中删除该任务,重复此过程直至结束。

三、系统实现

  1. 公共模块:系统采用 struts+hibernate+spring 开发,采用 MVC 模式和分层思想,结构分为表现层、业务层和数据访问层。公共模块包括公共配置文件,如 applicationContext-common.xml,其中配置了数据源、Hibernate 的 SessionFactory、事务管理器等,部分代码如下:

xml

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <!-- 启用 spring 注解支持 -->
    <context:annotation-config />
    <!-- 启动 Spring 自动扫描功能 -->
    <context:component-scan base-package="com.fcq.schedule.job" />
    <!-- 配数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/generation_design?characterEncoding=utf8&amp;useSSL=true" />
        <property name="user" value="root" />
        <property name="password" value="123456" />
        <property name="maxPoolSize" value="80" />
        <property name="minPoolSize" value="1" />
        <property name="initialPoolSize" value="1" />
        <property name="maxIdleTime" value="20" />
    </bean>
    <!-- 定义 Hibernate 的 SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="show_sql">true</prop>
                <prop key="hibernate.jdbc.batch_size">20</prop>
                <!-- 自动创建数据表 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <!-- 使用配置文件 -->
        <property name="mappingLocations">
            <list>
                <value>classpath:com/fcq/schedule/job/po/*.hbm.xml</value>
            </list>
        </property>
    </bean>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 配置事务管理器 (声明式的事务) -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <!-- 配置事务通知属性 -->
    <tx:advice id="txadvice" transaction-manager="transactionManager">
        <!-- 定义事务传播属性 -->
        <tx:attributes>
            <tx:method name="get*" read-only="false" propagation="REQUIRED" />
            <tx:method name="find*" read-only="false" propagation="REQUIRED" />
            <tx:method name="save*" read-only="false" propagation="REQUIRED" />
            <tx:method name="reg*" read-only="false" propagation="REQUIRED" />
            <tx:method name="modify*" read-only="false" propagation="REQUIRED" />
            <tx:method name="remove*" read-only="false" propagation="REQUIRED" />
            <tx:method name="*" propagation="REQUIRED" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <!-- 配置事务切面;那些类那些方法使用事务 -->
    <aop:config>
        <!-- 只对业务逻辑层实施事务 -->
        <aop:pointcut id="allManagerMethod" expression="execution(* com.fcq.schedule.job.service..*.*(..))" />
        <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txadvice" />
    </aop:config>
</beans>

还包括 applicationContext-beans.xml,用于 Spring 管理 Struts2 的 Action。

四、数据库设计

设计了包含用户表(USER)、项目表(PROJECT)、项目任务表(JOB)、参与项目表(JOIN_PROJECTS)、任务关系表(JOB_CONNECTION)、消息表(MESSAGE)的 6 张表,以满足系统需求。

五、总结

本任务调度系统具有良好的人机交互性,能提高工作效率,降低沟通成本,且开发运行成本低,经济效益显著。通过合理的系统设计和实现,为项目组任务调度和团队协作提供了有力支持。希望本文能为大家在相关系统的开发中提供一些参考和帮助。

资源

完整地址

源码地址

相关推荐
Juicedata24 分钟前
多云架构,JuiceFS 如何实现一致性与低延迟的数据分发
运维·云原生·架构
大熊程序猿35 分钟前
drawDB docker部属
运维·docker·容器
Flaky559138 分钟前
基于 docker 搭建 rails 开发环境(两种方法)
运维·docker·容器·php·php开发·servbay·php本地开发环境
凯子坚持 c5 小时前
深度解析如何使用Linux中的git操作
linux·运维·git
早睡早起早日毕业5 小时前
vscode支持ssh远程开发
linux·服务器·vscode·ubuntu·ssh
相忘于江湖吧5 小时前
浅尝Appium自动化框架
运维·appium·自动化
come-昂-6 小时前
Jenkins使用入门
运维·jenkins
会飞的爱迪生7 小时前
nginx负载均衡-基于多域名的负载均衡(二)
运维·nginx·负载均衡
筑梦之路7 小时前
Tomcat优化参考建议 —— 筑梦之路
linux·运维·服务器