@RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class StorageListen{ private static PropertiesMessage filteredRealtimeData = new PropertiesMessage(); private PeriodStorage periodStorage; @Scheduled(cron="*/1 * * * * ?") @Async("PeriodStorage") public void periodStorage(){ PropertiesMessage clone = (PropertiesMessage)filteredRealtimeData.clone(); Map<String,List<StorageConfig>> map = new HashMap(); List<StorageConfig> list = new ArrayList(); StorageConfig s1 = new StorageConfig(); s1.setValue("1"); StorageConfig s2 = new StorageConfig(); s2.setValue("1"); list.add(s1); list.add(s2); map.put("1",list); periodStorage.storageData(clone); } } @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class PeriodStorage { private static DeviceProperties filteredRealtimeData = new DeviceProperties(); public void storageData(PropertiesMessage message,Map<String,List<StorageConfig>> map){ map.entrySet().stream().forEach(k -> { k.getValue().parallelStream().forEach(y -> { DeviceProperties clone = (DeviceProperties)filteredRealtimeData.clone(); System.out.println(y.toString()); System.out.println(clone.toString()); }) }) } } @Data public class PropertiesMessage implements Serializable { public Map<String, DeviceProperties> propertiesMap; public PropertiesMessage deepClone() { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (PropertiesMessage) ois.readObject(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } } } public class DeviceProperties implements Serializable { public String value; public DeviceProperties deepClone() { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(this); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); return (DeviceProperties) ois.readObject(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return null; } } } @Data public class StorageConfig{ public String value; }
时间: 2024-04-26 17:20:15 浏览: 10
这段代码中,有两个类:`StorageListen`和`PeriodStorage`,以及两个数据类:`PropertiesMessage`和`DeviceProperties`,还有一个辅助类`StorageConfig`。
`StorageListen`中定义了一个定时任务`periodStorage()`,每一秒钟执行一次,该方法会将`filteredRealtimeData`进行深拷贝,然后将深拷贝的数据传递给`PeriodStorage`的`storageData()`方法进行存储。在`periodStorage()`方法中,还定义了一个`Map`,用于存储`StorageConfig`对象的列表,列表中存储了两个`StorageConfig`对象,每个`StorageConfig`对象中都有一个`value`属性,值为"1"。
`PeriodStorage`中定义了一个`storageData()`方法,用于存储数据。该方法接收两个参数:一个`PropertiesMessage`对象和一个`Map`对象。在该方法中,根据`Map`中的数据进行遍历,遍历时会对每一个`StorageConfig`对象进行并行处理。在并行处理中,首先将`DeviceProperties`对象进行深拷贝,然后输出当前`StorageConfig`对象和深拷贝后的`DeviceProperties`对象的信息。
`PropertiesMessage`和`DeviceProperties`均实现了`Serializable`接口,并且都定义了一个`deepClone()`方法,用于进行深拷贝操作,以避免在对数据进行修改时影响原始数据。`StorageConfig`类中只有一个`value`属性,用于存储数据。