在企业资产管理领域,传统的纸质记录和零散的Excel表格管理模式长期存在信息孤岛、更新滞后、追溯困难等痛点。为解决这些问题,我们设计并实现了一套基于SSM(Spring+SpringMVC+MyBatis)框架的企业资产运维管理平台。该系统通过全生命周期的数字化管理,实现了设备资产信息的集中化、规范化和实时化管控。
系统架构与技术栈
该平台采用经典的三层架构设计,展现层使用SpringMVC框架处理Web请求和响应,通过控制器将前端请求分发到相应的业务服务。业务逻辑层基于Spring框架实现,利用其IoC容器管理各种业务组件,并通过AOP机制实现事务控制、日志记录等横切关注点。数据持久层采用MyBatis框架,通过XML映射文件实现对象关系映射,支持动态SQL构建,有效处理复杂的多表关联查询。
前端技术选用JSP作为模板引擎,结合jQuery库实现页面动态交互,使用Bootstrap框架保证界面的响应式布局。项目依赖管理通过Maven进行,数据库采用MySQL 5.7版本,确保了系统的稳定性和可扩展性。
数据库设计精要
系统数据库包含8个核心表,其中设备主表的设计尤为关键:
CREATE TABLE physical_device (
device_id INT PRIMARY KEY AUTO_INCREMENT,
device_name VARCHAR(100) NOT NULL,
device_type VARCHAR(50),
manufacturer VARCHAR(100),
model VARCHAR(50),
serial_number VARCHAR(100) UNIQUE,
purchase_date DATE,
warranty_expiry DATE,
status ENUM('运行中','待机','维修中','已报废') DEFAULT '运行中',
current_owner VARCHAR(50),
location VARCHAR(200),
last_maintenance_date DATE,
next_maintenance_date DATE,
created_time DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
该表设计体现了多个技术亮点:使用ENUM类型规范设备状态,确保数据一致性;通过serial_number字段的唯一索引防止设备重复录入;created_time和updated_time时间戳自动维护记录生命周期;合理的索引策略优化查询性能。
IP地址管理表的设计展示了复杂业务关系的处理能力:
CREATE TABLE ip_address (
ip_id INT PRIMARY KEY AUTO_INCREMENT,
device_id INT NOT NULL,
ip_address VARCHAR(15) UNIQUE NOT NULL,
subnet_mask VARCHAR(15),
gateway VARCHAR(15),
dns_servers VARCHAR(100),
allocation_type ENUM('静态','动态') DEFAULT '静态',
assigned_date DATE,
FOREIGN KEY (device_id) REFERENCES physical_device(device_id) ON DELETE CASCADE
);
通过外键约束实现设备与IP地址的强关联,CASCADE删除策略确保数据完整性。UNIQUE约束防止IP地址冲突,ENUM类型规范分配方式,体现了精细化的网络资源管理思路。
核心功能实现解析
1. 设备全生命周期管理
设备管理模块实现了从采购入库到报废处置的全流程跟踪。核心服务类通过注解方式声明事务边界:
@Service
@Transactional
public class DeviceManagementService {
@Autowired
private PhysicalDeviceMapper deviceMapper;
public void addDevice(PhysicalDevice device) {
// 验证设备序列号唯一性
if (deviceMapper.selectBySerialNumber(device.getSerialNumber()) != null) {
throw new BusinessException("设备序列号已存在");
}
deviceMapper.insert(device);
// 记录设备状态变更日志
logDeviceStatusChange(device.getDeviceId(), "新设备入库", device.getStatus());
}
public void updateDeviceStatus(Long deviceId, DeviceStatus newStatus, String operator) {
PhysicalDevice device = deviceMapper.selectById(deviceId);
if (device == null) {
throw new BusinessException("设备不存在");
}
DeviceStatus oldStatus = device.getStatus();
device.setStatus(newStatus);
deviceMapper.updateStatus(device);
// 异步记录状态变更历史
CompletableFuture.runAsync(() -> {
DeviceStatusHistory history = new DeviceStatusHistory(deviceId, oldStatus, newStatus, operator);
statusHistoryMapper.insert(history);
});
}
}

该界面展示了设备列表的完整信息架构,支持按状态、类型、部门等多维度筛选。通过颜色编码直观显示设备状态,便于快速识别异常设备。
2. 动态IP地址分配系统
IP地址管理模块实现了智能分配和冲突检测机制:
@RestController
@RequestMapping("/api/ip")
public class IpAddressController {
@PostMapping("/assign")
public ResponseEntity<?> assignIpAddress(@RequestBody IpAssignmentRequest request) {
// IP地址格式验证
if (!isValidIpAddress(request.getIpAddress())) {
return ResponseEntity.badRequest().body("IP地址格式错误");
}
// 检查IP是否已被占用
if (ipService.isIpOccupied(request.getIpAddress())) {
return ResponseEntity.badRequest().body("IP地址已被占用");
}
// 执行分配操作
IpAddress ipAddress = ipService.assignIpToDevice(
request.getDeviceId(),
request.getIpAddress(),
request.getAllocationType()
);
return ResponseEntity.ok(ipAddress);
}
@GetMapping("/available")
public List<String> getAvailableIps(@RequestParam String subnet) {
return ipService.findAvailableIpsInSubnet(subnet);
}
}

该功能提供了清晰的IP地址可视化展示,支持按网段筛选和快速搜索。地址分配状态实时更新,避免资源冲突。
3. 虚拟化资源统一管控
虚拟机管理模块实现了物理资源与虚拟资源的关联管理:
<!-- MyBatis映射文件中的复杂查询 -->
<select id="selectVmsWithHostInfo" resultMap="VmWithHostResultMap">
SELECT
vm.vm_id,
vm.vm_name,
vm.os_type,
vm.cpu_cores,
vm.memory_gb,
vm.disk_size_gb,
vm.status,
pd.device_name as host_name,
pd.location as host_location
FROM virtual_machine vm
LEFT JOIN physical_device pd ON vm.host_device_id = pd.device_id
WHERE vm.status = '运行中'
<if test="departmentId != null">
AND vm.department_id = #{departmentId}
</if>
<if test="minCpu != null">
AND vm.cpu_cores >= #{minCpu}
</if>
ORDER BY vm.created_time DESC
</select>

界面展示了虚拟机与宿主机的关系拓扑,支持资源使用率的可视化监控。通过动态条件查询实现资源的精确筛选。
4. 智能通知与预警机制
系统内置了基于设备状态的自动通知功能:
@Component
public class MaintenanceNotificationScheduler {
@Scheduled(cron = "0 0 8 * * ?") // 每天上午8点执行
public void checkMaintenanceSchedule() {
List<PhysicalDevice> dueDevices = deviceMapper.selectDevicesDueForMaintenance();
for (PhysicalDevice device : dueDevices) {
Notification notification = Notification.builder()
.title("设备维护提醒")
.content(String.format("设备%s即将到达维护周期,请安排维护", device.getDeviceName()))
.recipient(device.getCurrentOwner())
.priority("HIGH")
.build();
notificationService.sendNotification(notification);
// 更新下次维护日期
updateNextMaintenanceDate(device.getDeviceId());
}
}
}

通知系统支持优先级分类和定向推送,确保重要信息及时传达给相关人员。
实体模型与业务逻辑
设备实体模型采用富领域模型设计,封装了复杂的业务规则:
public class PhysicalDevice {
private Long deviceId;
private String deviceName;
private DeviceType deviceType;
private String manufacturer;
private String model;
private String serialNumber;
private LocalDate purchaseDate;
private LocalDate warrantyExpiry;
private DeviceStatus status;
private String currentOwner;
private String location;
private List<MaintenanceRecord> maintenanceHistory;
private List<IpAddress> assignedIps;
public boolean isUnderWarranty() {
return LocalDate.now().isBefore(warrantyExpiry);
}
public boolean requiresMaintenance() {
return nextMaintenanceDate != null &&
LocalDate.now().isAfter(nextMaintenanceDate.minusDays(7));
}
public void changeStatus(DeviceStatus newStatus, String operator) {
if (this.status.canTransitionTo(newStatus)) {
DeviceStatus oldStatus = this.status;
this.status = newStatus;
DomainEventPublisher.publish(new DeviceStatusChangedEvent(this, oldStatus, newStatus, operator));
} else {
throw new IllegalStateException("无效的状态转换");
}
}
}
性能优化策略
系统在数据访问层实施了多项优化措施。MyBatis的二级缓存配置减少了数据库访问压力:
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
针对大数据量查询,采用分页插件优化性能:
PageHelper.startPage(pageNum, pageSize);
List<PhysicalDevice> devices = deviceMapper.selectByCondition(condition);
PageInfo<PhysicalDevice> pageInfo = new PageInfo<>(devices);
数据库层面建立了复合索引提升查询效率:
CREATE INDEX idx_device_status_department
ON physical_device(status, department_id, created_time);
CREATE INDEX idx_ip_subnet_status
ON ip_address(subnet_mask, allocation_type, assigned_date);
系统安全机制
安全控制贯穿整个系统架构。权限管理采用基于角色的访问控制模型:
@PreAuthorize("hasRole('ADMIN') or (#device.departmentId == authentication.departmentId)")
public void updateDevice(PhysicalDevice device) {
deviceMapper.update(device);
}
数据传输过程中使用HTTPS加密,敏感信息如IP地址进行脱敏处理。SQL注入防护通过MyBatis的参数绑定机制天然实现,XSS攻击防范通过JSTL标签库自动处理。
未来优化方向
物联网集成:通过MQTT协议接入设备传感器数据,实现实时状态监控和预测性维护。可引入规则引擎实现智能告警升级。
移动端支持:开发React Native跨平台应用,支持扫码盘点、移动审批等场景。利用PWA技术实现离线数据同步。
数据分析增强:集成Apache Spark进行设备运行数据分析,构建设备寿命预测模型。通过ELK栈实现运维日志的智能分析。
自动化运维:结合Ansible或SaltStack实现设备配置的自动化部署。通过Webhook与CI/CD工具集成,实现应用部署的自动化跟踪。
多云资源管理:扩展支持AWS、Azure等云平台虚拟机管理,实现混合云资源的统一管控。通过Terraform模板实现基础设施即代码。
该系统通过严谨的架构设计和深度的业务建模,为企业设备资产管理提供了完整的数字化解决方案。其模块化设计为后续功能扩展奠定了坚实基础,技术选型的合理性确保了系统的长期可维护性。随着技术的不断发展,系统将持续演进以满足更复杂的业务需求。