{ "assembleOutputTaskId": "6dad3dcb191b63a8aadc3360cad027d7", "outputMaterialList": [ { "assembleOutputTaskId": "6dad3dcb191b63a8aadc3360cad027d7", "branchCompanyId": "55a548278fbb4f84bfa653be58994303", "branchCompanyName": "宽体车", "companyId": "6ec7b365dd5e4caeab299031c8bd1bfc", "consumeProcedureNo": null, "creatorId": "6b6357842ccc43b29652a74ecf23ad3f", "creatorName": "何继虎", "deptId": null, "gmtCreate": "2025-06-06 16:31:11", "gmtModified": "2025-06-06 16:31:11", "id": "02b9ebe8ec33831dc343126d3e4c7ae6", "isDel": 0, "isKeyComponent": null, "isLackMaterials": 1, "keyComponentSnCode": null, "lackItemNum": null, "materialCode": "00014material", "materialName": "荣耀手机屏幕", "modifiedId": "6b6357842ccc43b29652a74ecf23ad3f", "modifiedName": "何继虎", "securityLevel": null, "stationCode": null, "stationName": null, "uid": "02b9ebe8ec33831dc343126d3e4c7ae6", "workProcedureName": null } ] } 这样的数据,assembleOutputTaskId是key,outputMaterialList是value,用redisTemplate应该怎么存

时间: 2025-06-07 21:29:48 浏览: 11
<think>我们使用RedisTemplate存储JSON数据时,需要配置合适的序列化器。根据引用[1],我们可以看到使用Jackson2JsonRedisSerializer将对象序列化为JSON存储的示例。但是注意:引用中的代码在每次操作前都设置序列化器,这在实际应用中通常不是最佳做法(通常会在配置类中全局配置)。不过,如果只是针对特定操作临时设置,也可以这样用。对于问题:将assembleOutputTaskId作为key,outputMaterialList(JSON数据结构)作为value存储到Redis中。步骤:1.确定key和value的类型:key是字符串,value是一个List(或者自定义对象)的JSON表示。2.选择合适的序列化器:对于值,我们可以使用Jackson2JsonRedisSerializer。对于键,通常使用StringRedisSerializer。3.存储操作:使用opsForValue().set方法。注意:为了避免每次操作都设置序列化器,我们一般建议在RedisTemplate的配置中设置好。但为了回答直接,这里给出两种方式:全局配置和临时设置。方式一(推荐):在Spring配置类中配置好RedisTemplate的序列化方式(通常是一次性配置),然后在代码中直接使用。方式二:在每次存储前临时设置序列化器(如引用[1]所示),但这样效率较低且容易出错。由于问题中没有说明全局配置的情况,我们按照引用[1]的方式,在代码中临时设置序列化器(仅针对该操作)。但是注意:如果我们的RedisTemplate之前配置了其他序列化器(比如默认的JdkSerializationRedisSerializer),那么临时修改序列化器可能会影响其他操作。所以,更安全的做法是在一个独立的RedisTemplate实例上操作,或者全局配置。这里我们假设允许临时设置,并且outputMaterialList是一个Java对象(比如List<Material>)。具体步骤:a.创建key的序列化器(字符串)和value的序列化器(JSON)。b.设置RedisTemplate的key和value的序列化器。c.执行set操作。但是,注意:RedisTemplate是线程安全的,但是修改序列化器可能会影响到其他线程。所以,我们通常不会在运行时改变序列化器。因此,我们考虑使用两个RedisTemplate实例?或者,我们可以创建一个新的操作序列。实际上,更好的方式是:在配置类中配置两个RedisTemplate,一个用于普通字符串操作,一个用于JSON操作。由于问题中要求使用JSON存储,我们假设已经有一个配置好的RedisTemplate,其value的序列化器是Jackson2JsonRedisSerializer。但为了演示,我们按照引用[1]的方式,在代码中临时设置。但请注意:在并发环境下,修改RedisTemplate的序列化器可能会导致不可预知的问题。所以,这里给出一种更安全的方式:使用一个独立的RedisTemplate实例(或者使用同一配置的多个实例),并在配置时就设置好序列化器。如果一定要在代码中临时设置,可以使用execute方法在Connection上操作,但那样更复杂。因此,我们折中:如果全局没有配置,那么我们可以在方法内部创建一个新的RedisTemplate实例,并设置好序列化器,然后执行操作。但这样每次调用都创建RedisTemplate开销较大。综合考虑,我推荐在应用启动时配置好RedisTemplate。下面,我们先给出一个在代码中临时设置序列化器的方式(注意:这种方式在多线程环境下不安全,仅作演示),然后给出全局配置的示例。方式一(临时设置序列化器,不推荐在生产环境使用):```java//假设assembleOutputTaskId是字符串Stringkey=assembleOutputTaskId;//outputMaterialList是一个Java对象(比如List<OutputMaterial>)Objectvalue=outputMaterialList;//创建JSON序列化器Jackson2JsonRedisSerializer<Object>serializer=newJackson2JsonRedisSerializer<>(Object.class);//配置ObjectMapper(可选,如果需要自定义JSON特性)//这里省略,如果需要,可以设置//获取RedisTemplate并设置序列化器//注意:这里我们假设redisTemplate已经注入//临时设置key和value的序列化器redisTemplate.setKeySerializer(newStringRedisSerializer());redisTemplate.setValueSerializer(serializer);//存储redisTemplate.opsForValue().set(key,value);//如果需要设置过期时间,可以这样://redisTemplate.opsForValue().set(key,value,30,TimeUnit.MINUTES);```方式二(推荐,在配置类中全局配置一个用于JSON存储的RedisTemplate):1.创建配置类,定义一个RedisTemplateBean,用于JSON序列化。2.在需要的地方注入这个RedisTemplate。配置类示例:```java@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplate<String,Object>jsonRedisTemplate(RedisConnectionFactoryconnectionFactory){RedisTemplate<String,Object>template=newRedisTemplate<>();template.setConnectionFactory(connectionFactory);//使用StringRedisSerializer来序列化和反序列化redis的keytemplate.setKeySerializer(newStringRedisSerializer());//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的valueJackson2JsonRedisSerializer<Object>serializer=newJackson2JsonRedisSerializer<>(Object.class);//配置ObjectMapper(可选,根据需求)ObjectMappermapper=newObjectMapper();mapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(),ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(mapper);template.setValueSerializer(serializer);//设置hashkey和value的序列化模式template.setHashKeySerializer(newStringRedisSerializer());template.setHashValueSerializer(serializer);template.afterPropertiesSet();returntemplate;}}```然后在服务类中注入:```java@AutowiredprivateRedisTemplate<String,Object>jsonRedisTemplate;```存储操作:```javajsonRedisTemplate.opsForValue().set(assembleOutputTaskId,outputMaterialList);```这样,存储的值将会是JSON格式。注意:使用Object.class作为Jackson2JsonRedisSerializer的泛型,可以接受任何对象,但是反序列化时需要知道具体类型,或者配置ObjectMapper激活默认类型信息(如上面的activateDefaultTyping),这样JSON中会包含类型信息,但会增加一些存储空间。如果不希望存储类型信息,可以将ObjectMapper的激活默认类型去掉,但是在读取的时候需要指定具体的类型。所以,根据你的需求,如果outputMaterialList是同一个类型,你可以在创建Jackson2JsonRedisSerializer时指定具体的类型,例如:```javaJackson2JsonRedisSerializer<OutputMaterialList>serializer=newJackson2JsonRedisSerializer<>(OutputMaterialList.class);```这样就不需要类型信息,但反序列化时也必须使用相同的类型。综上所述,推荐使用全局配置的RedisTemplate,并在序列化器中使用具体的类型(如果知道类型的话)以避免类型安全问题。因此,针对问题,如果使用全局配置的jsonRedisTemplate,代码非常简单:```javajsonRedisTemplate.opsForValue().set(assembleOutputTaskId,outputMaterialList);```如果设置过期时间:```javajsonRedisTemplate.opsForValue().set(assembleOutputTaskId,outputMaterialList,30,TimeUnit.MINUTES);```引用[1]中还提到finally块中释放连接,在SpringDataRedis中,通常不需要手动释放连接,因为RedisTemplate会自动管理连接。所以不需要调用`RedisConnectionUtils.unbindConnection`。所以,最终代码:```javatry{jsonRedisTemplate.opsForValue().set(assembleOutputTaskId,outputMaterialList);//如果需要过期时间,使用://jsonRedisTemplate.opsForValue().set(assembleOutputTaskId,outputMaterialList,30,TimeUnit.MINUTES);}catch(Exceptione){//异常处理e.printStackTrace();}```注意:这里jsonRedisTemplate是我们自己配置的用于JSON序列化的RedisTemplate。如果不想单独配置一个RedisTemplate,也可以使用StringRedisTemplate,然后自己将对象转换为JSON字符串存储,这样也是常见做法:```java//注入StringRedisTemplate@AutowiredprivateStringRedisTemplatestringRedisTemplate;//将对象转为JSON字符串ObjectMapperobjectMapper=newObjectMapper();Stringjson=objectMapper.writeValueAsString(outputMaterialList);stringRedisTemplate.opsForValue().set(assembleOutputTaskId,json);```这种方式更直接,但是需要手动转换。根据需求选择。</think> 要将 `assembleOutputTaskId` 作为 key 和 `outputMaterialList`(JSON 数据结构)作为 value 存储到 Redis 中,可以通过配置 `Jackson2JsonRedisSerializer` 实现对象到 JSON 的自动转换。以下是具体实现步骤: --- ### 1. **全局配置 RedisTemplate(推荐)** 在 Spring Boot 配置类中全局配置 JSON 序列化器: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> jsonRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); // Key 使用字符串序列化 template.setKeySerializer(new StringRedisSerializer()); // Value 使用 JSON 序列化 Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class); // 配置 ObjectMapper(可选) ObjectMapper mapper = new ObjectMapper(); mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(mapper); template.setValueSerializer(serializer); return template; } } ``` --- ### 2. **存储数据** 在业务代码中直接存储对象(自动序列化为 JSON): ```java @Autowired private RedisTemplate<String, Object> jsonRedisTemplate; public void saveData(String assembleOutputTaskId, List<OutputMaterial> outputMaterialList) { // 存储数据(无过期时间) jsonRedisTemplate.opsForValue().set(assembleOutputTaskId, outputMaterialList); // 或存储并设置过期时间(例如 30 分钟) jsonRedisTemplate.opsForValue().set( assembleOutputTaskId, outputMaterialList, 30, TimeUnit.MINUTES ); } ``` > **关键点说明**: > - `jsonRedisTemplate` 会自动将 Java 对象转换为 JSON 字符串存储 > - `OutputMaterial` 需要是**可序列化**的 Java 类(例如有 getter/setter) > - 通过 `set(key, value, timeout, unit)` 可设置过期时间[^1] --- ### 3. **读取数据** 反序列化 JSON 为 Java 对象: ```java public List<OutputMaterial> getData(String assembleOutputTaskId) { return (List<OutputMaterial>) jsonRedisTemplate.opsForValue().get(assembleOutputTaskId); } ``` --- ### 4. **验证效果** ```java // 存储 List<OutputMaterial> materials = Arrays.asList( new OutputMaterial("item1", 10), new OutputMaterial("item2", 20) ); saveData("task_123", materials); // 读取 List<OutputMaterial> result = getData("task_123"); System.out.println(result); // 输出反序列化后的对象 ``` **Redis 中存储效果**: ```bash > GET task_123 [ { "materialId": "item1", "quantity": 10 }, { "materialId": "item2", "quantity": 20 } ] ``` --- ### 注意事项 1. **类型安全**: - 反序列化时需明确类型(如 `(List<OutputMaterial>)`) - 或改用 `TypeReference`: ```java Object value = jsonRedisTemplate.opsForValue().get(key); List<OutputMaterial> list = objectMapper.convertValue(value, new TypeReference<List<OutputMaterial>>(){}); ``` 2. **配置优化**: - 全局配置避免每次操作设置序列化器[^1] - 自定义 `ObjectMapper` 处理复杂类型(如 LocalDateTime) 3. **连接管理**: - Spring Data Redis 会自动管理连接,**无需**手动调用 `unbindConnection()`[^1] ---
阅读全文

相关推荐

2025-05-19 10:33:54 [JobThread.run-130]
----------- datax-web job execute start -----------
----------- Param: 2025-05-19 10:33:54 [BuildCommand.buildDataXParam-100] ------------------Command parameters:-p"-DlastTime='2025-05-19%08:00:00' -DcurrentTime='2025-05-19%10:33:54'" 2025-05-19 10:33:54 [ExecutorJobHandler.execute-57] ------------------DataX process id: 2669844 2025-05-19 10:33:54 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:54 [AnalysisStatistics.analysisStatisticsLog-53] DataX (DATAX-OPENSOURCE-3.0), From Alibaba ! 2025-05-19 10:33:54 [AnalysisStatistics.analysisStatisticsLog-53] Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved. 2025-05-19 10:33:54 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:54 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:54 [ProcessCallbackThread.callbackLog-186]
----------- datax-web job callback finish. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.146 [main] INFO MessageSource - JVM TimeZone: GMT+08:00, Locale: zh_CN 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.148 [main] INFO MessageSource - use Locale: zh_CN timeZone: sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.161 [main] INFO VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.167 [main] INFO Engine - the machine info => 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] osInfo: Linux amd64 4.19.90-17.ky10.x86_64 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] jvmInfo: Huawei Technologies Co., Ltd 1.8 25.242-b08 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] cpu num: 32 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] totalPhysicalMemory: -0.00G 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] freePhysicalMemory: -0.00G 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] maxFileDescriptorCount: -1 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] currentOpenFileDescriptorCount: -1 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] GC Names [PS MarkSweep, PS Scavenge] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] MEMORY_NAME | allocation_size | init_size 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] PS Eden Space | 256.00MB | 256.00MB 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] Code Cache | 240.00MB | 2.44MB 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] Compressed Class Space | 1,024.00MB | 0.00MB 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] PS Survivor Space | 42.50MB | 42.50MB 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] PS Old Gen | 683.00MB | 683.00MB 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] Metaspace | -0.00MB | 0.00MB 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.181 [main] INFO Engine - 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] { 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "content":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] { 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "reader":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "parameter":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "password":"**********", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "connection":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] { 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "querySql":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "select CONCAT(comm_code,id) as id, uuid, record_time, open_mode, comm_code, open_object, name, phone_num, person_type, open_device, device_place, person_uuid, picture_url, open_video, created_by, created_time, updated_by, updated_time, del_flag, mczt, pass, in_out_flag, temp, temp_normal, extra, health_info, created_time as GY_RKGXSJ, case when del_flag=2 then 1 else 0 end as GY_SFYSC from door_open_record where record_time >= '2025-05-19%08:00:00' and record_time < '2025-05-19%10:33:54'" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ], 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "jdbcUrl":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "jdbc:mysql://172.20.20.57:8066/wuye?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ], 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "splitPk":"", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "username":"root" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] }, 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "name":"mysqlreader" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] }, 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "writer":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "parameter":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "password":"**********", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "column":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "id", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "uuid", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "record_time", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "open_mode", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "comm_code", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "open_object", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "name", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "phone_num", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "person_type", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "open_device", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "device_place", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "person_uuid", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "picture_url", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "open_video", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "created_by", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "created_time", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "updated_by", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "updated_time", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "del_flag", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "mczt", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "pass", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "in_out_flag", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "temp", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "temp_normal", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "extra", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "health_info", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "GY_RKGXSJ", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "GY_SFYSC" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ], 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "connection":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] { 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "jdbcUrl":"jdbc:mysql://172.20.20.67:3306/kitty?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8", 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "table":[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "door_open_record" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ], 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "username":"root" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] }, 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "name":"mysqlwriter" 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ], 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "setting":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "errorLimit":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "record":100, 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "percentage":0.02 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] }, 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "speed":{ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "byte":1048576, 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] "channel":3 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] } 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.200 [main] INFO PerfTrace - PerfTrace traceId=job_-1, isEnable=false 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.200 [main] INFO JobContainer - DataX jobContainer starts job. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.201 [main] INFO JobContainer - Set jobId = 0 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.533 [job-0] INFO OriginalConfPretreatmentUtil - Available jdbcUrl:jdbc:mysql://172.20.20.57:8066/wuye?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&rewriteBatchedStatements=true. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.791 [job-0] INFO OriginalConfPretreatmentUtil - table:[door_open_record] all columns:[ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] id,uuid,record_time,open_mode,comm_code,open_object,name,phone_num,person_type,open_device,device_place,person_uuid,picture_url,open_video,created_by,created_time,updated_by,updated_time,del_flag,mczt,pass,in_out_flag,GY_RKGXSJ,GY_SFYSC,temp,temp_normal,extra,health_info 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ]. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.798 [job-0] INFO OriginalConfPretreatmentUtil - Write data [ 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] INSERT INTO %s (id,uuid,record_time,open_mode,comm_code,open_object,name,phone_num,person_type,open_device,device_place,person_uuid,picture_url,open_video,created_by,created_time,updated_by,updated_time,del_flag,mczt,pass,in_out_flag,temp,temp_normal,extra,health_info,GY_RKGXSJ,GY_SFYSC) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ], which jdbcUrl like:[jdbc:mysql://172.20.20.67:3306/kitty?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true&tinyInt1isBit=false] 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.798 [job-0] INFO JobContainer - jobContainer starts to do prepare ... 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.799 [job-0] INFO JobContainer - DataX Reader.Job [mysqlreader] do prepare work . 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.799 [job-0] INFO JobContainer - DataX Writer.Job [mysqlwriter] do prepare work . 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.799 [job-0] INFO JobContainer - jobContainer starts to do split ... 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.800 [job-0] INFO JobContainer - Job set Max-Byte-Speed to 1048576 bytes. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.801 [job-0] INFO JobContainer - DataX Reader.Job [mysqlreader] splits to [1] tasks. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.802 [job-0] INFO JobContainer - DataX Writer.Job [mysqlwriter] splits to [1] tasks. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.827 [job-0] INFO JobContainer - jobContainer starts to do schedule ... 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.830 [job-0] INFO JobContainer - Scheduler starts [1] taskGroups. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.832 [job-0] INFO JobContainer - Running by standalone Mode. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.836 [taskGroup-0] INFO TaskGroupContainer - taskGroupId=[0] start [1] channels for [1] tasks. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.840 [taskGroup-0] INFO Channel - Channel set byte_speed_limit to 2000000. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.840 [taskGroup-0] INFO Channel - Channel set record_speed_limit to -1, No tps activated. 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.847 [taskGroup-0] INFO TaskGroupContainer - taskGroup[0] taskId[0] attemptCount[1] is started 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:55.850 [0-0-0-reader] INFO CommonRdbmsReader$Task - Begin to read record by Sql: [select CONCAT(comm_code,id) as id, uuid, record_time, open_mode, comm_code, open_object, name, phone_num, person_type, open_device, device_place, person_uuid, picture_url, open_video, created_by, created_time, updated_by, updated_time, del_flag, mczt, pass, in_out_flag, temp, temp_normal, extra, health_info, created_time as GY_RKGXSJ, case when del_flag=2 then 1 else 0 end as GY_SFYSC from door_open_record where record_time >= '2025-05-19%08:00:00' and record_time < '2025-05-19%10:33:54' 2025-05-19 10:33:55 [AnalysisStatistics.analysisStatisticsLog-53] ] jdbcUrl:[jdbc:mysql://172.20.20.57:8066/wuye?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&rewriteBatchedStatements=true]. 2025-05-19 10:33:56 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:56.927 [0-0-0-reader] INFO CommonRdbmsReader$Task - Finished read record by Sql: [select CONCAT(comm_code,id) as id, uuid, record_time, open_mode, comm_code, open_object, name, phone_num, person_type, open_device, device_place, person_uuid, picture_url, open_video, created_by, created_time, updated_by, updated_time, del_flag, mczt, pass, in_out_flag, temp, temp_normal, extra, health_info, created_time as GY_RKGXSJ, case when del_flag=2 then 1 else 0 end as GY_SFYSC from door_open_record where record_time >= '2025-05-19%08:00:00' and record_time < '2025-05-19%10:33:54' 2025-05-19 10:33:56 [AnalysisStatistics.analysisStatisticsLog-53] ] jdbcUrl:[jdbc:mysql://172.20.20.57:8066/wuye?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&useSSL=false&nullNamePatternMatchesAll=true&useUnicode=true&characterEncoding=UTF-8&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&rewriteBatchedStatements=true]. 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.242 [0-0-0-writer] WARN CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交. 因为:Data truncation: Out of range value for column 'id' at row 1 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.247 [0-0-0-writer] ERROR StdoutPluginCollector - 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'id' at row 1 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1242) ~[mysql-connector-java-5.1.47.jar:5.1.47] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doOneInsert(CommonRdbmsWriter.java:382) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doBatchInsert(CommonRdbmsWriter.java:362) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.startWriteWithConnection(CommonRdbmsWriter.java:297) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.startWrite(CommonRdbmsWriter.java:319) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.plugin.writer.mysqlwriter.MysqlWriter$Task.startWrite(MysqlWriter.java:78) [mysqlwriter-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.taskgroup.runner.WriterRunner.run(WriterRunner.java:56) [datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_242] 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.259 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851990","type":5},{"byteSize":32,"index":1,"rawData":"4d0986595d40485aa9839e0cccec4044","type":5},{"byteSize":8,"index":2,"rawData":1747612856000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871658544258319","type":5},{"byteSize":2,"index":6,"rawData":"周云","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"c68130c53b1441cc9e9205a0df155888","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0C/rBQUOGgqdLiARP_wAADchi_tzQg504.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.260 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851991","type":5},{"byteSize":32,"index":1,"rawData":"d52cf199b8b54901bad84a21f3fa25b1","type":5},{"byteSize":8,"index":2,"rawData":1747612880000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871742111902520","type":5},{"byteSize":3,"index":6,"rawData":"庄华琴","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":2,"type":3},{"byteSize":16,"index":9,"rawData":"0020220987YXJDSQ","type":5},{"byteSize":10,"index":10,"rawData":"中联天玺南出入口门禁","type":5},{"byteSize":32,"index":11,"rawData":"729da5882c6a41d9bfda0949931a1be1","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0C/rBQUN2gqdNeASmFSAAJOMjYE8R8862.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.262 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851992","type":5},{"byteSize":32,"index":1,"rawData":"4bd01f7d35f4437da3e276c6c31a5c5c","type":5},{"byteSize":8,"index":2,"rawData":1747612889000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871741681870967","type":5},{"byteSize":2,"index":6,"rawData":"严巧","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"7f932dde89b64205a0d17d58871f9bad","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0B/rBQUNmgqdNmAQ_S7AAC22NFh6HM442.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.263 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851993","type":5},{"byteSize":32,"index":1,"rawData":"a766ed3cea29444181be6cedd1f816f5","type":5},{"byteSize":8,"index":2,"rawData":1747612931000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871659255470895","type":5},{"byteSize":3,"index":6,"rawData":"华明娟","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"02fb5d620ac3460f8957de4b5b44336a","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0D/rBQUNWgqdQOAeyFkAACw3Hvmovc046.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.264 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851994","type":5},{"byteSize":32,"index":1,"rawData":"9a923175d25b41acbf8515f0d2b1d2ff","type":5},{"byteSize":8,"index":2,"rawData":1747613034000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871745223203681","type":5},{"byteSize":3,"index":6,"rawData":"林清唐","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":0,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"d4d1b42ec6d540b9b459029dec96334a","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0D/rBQUNWgqdWqAEVqIAAC_n9Jyueo433.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.265 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851995","type":5},{"byteSize":32,"index":1,"rawData":"847f99174d4d4d26aaae669dd638e123","type":5},{"byteSize":8,"index":2,"rawData":1747613052000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871710205089306","type":5},{"byteSize":3,"index":6,"rawData":"陈惠钦","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":16,"index":9,"rawData":"0020220996YXJDSQ","type":5},{"byteSize":7,"index":10,"rawData":"北门消防门入口","type":5},{"byteSize":32,"index":11,"rawData":"2e6fdb84fdd44a94939c019a8e0d2b85","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0C/rBQUOGgqdYWAEJkoAAHEBO1Px4w499.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.266 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851996","type":5},{"byteSize":32,"index":1,"rawData":"6befb459b2da4ce1a3f9e7e9f3b9dcb4","type":5},{"byteSize":8,"index":2,"rawData":1747613064000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871741253388198","type":5},{"byteSize":3,"index":6,"rawData":"王枝发","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"fe8e4331e4514d57bec126d6c767cc6c","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0D/rBQUNWgqdYiAQR8YAAC_5wURlHI916.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.268 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851997","type":5},{"byteSize":32,"index":1,"rawData":"bd4ff446847c483ea12dbc1a746ef9e0","type":5},{"byteSize":8,"index":2,"rawData":1747613074000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871666857417929","type":5},{"byteSize":3,"index":6,"rawData":"刘必梅","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"09af342659144542a694fc75c8cd1c6f","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0C/rBQUN2gqdZKAMtxUAADEYp0rtqk024.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.269 [0-0-0-writer] ERROR StdoutPluginCollector - 脏数据: 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] {"exception":"Data truncation: Out of range value for column 'id' at row 1","record":[{"byteSize":22,"index":0,"rawData":"0591202111180387851998","type":5},{"byteSize":32,"index":1,"rawData":"f238007b8c634bb394c0425e9ffc2716","type":5},{"byteSize":8,"index":2,"rawData":1747613150000,"type":7},{"byteSize":4,"index":3,"rawData":1004,"type":3},{"byteSize":16,"index":4,"rawData":"0591202111180387","type":5},{"byteSize":29,"index":5,"rawData":"05912021111803871675924700007","type":5},{"byteSize":3,"index":6,"rawData":"俞玉琴","type":5},{"byteSize":0,"index":7,"rawData":"","type":5},{"byteSize":1,"index":8,"rawData":1,"type":3},{"byteSize":28,"index":9,"rawData":"NYN0300010000020000S1F001436","type":5},{"byteSize":5,"index":10,"rawData":"西门M29","type":5},{"byteSize":32,"index":11,"rawData":"198e3637945e4376a32310eae176b3ef","type":5},{"byteSize":83,"index":12,"rawData":"https://iot.yinxismart.top:8888/group1/M00/02/0C/rBQUN2gqdd6AAFFhAADRKbsR6uM999.jpg","type":5},{"byteSize":0,"index":13,"type":5},{"byteSize":0,"index":14,"type":5},{"byteSize":0,"index":15,"type":7},{"byteSize":0,"index":16,"type":5},{"byteSize":0,"index":17,"type":7},{"byteSize":1,"index":18,"rawData":1,"type":3},{"byteSize":1,"index":19,"rawData":1,"type":3},{"byteSize":1,"index":20,"rawData":1,"type":3},{"byteSize":1,"index":21,"rawData":0,"type":3},{"byteSize":0,"index":22,"type":5},{"byteSize":1,"index":23,"rawData":0,"type":3},{"byteSize":0,"index":24,"type":5},{"byteSize":0,"index":25,"type":5},{"byteSize":0,"index":26,"type":7},{"byteSize":1,"index":27,"rawData":0,"type":3}],"type":"writer"} 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.475 [taskGroup-0] INFO TaskGroupContainer - taskGroup[0] taskId[0] is successed, used[1629]ms 2025-05-19 10:33:57 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:33:57.476 [taskGroup-0] INFO TaskGroupContainer - taskGroup[0] completed it's tasks. 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05.848 [job-0] INFO StandAloneJobContainerCommunicator - Total 361 records, 98167 bytes | Speed 9.59KB/s, 36 records/s | Error 361 records, 98167 bytes | All Task WaitWriterTime 0.001s | All Task WaitReaderTime 1.066s | Percentage 100.00% 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05.849 [job-0] ERROR JobContainer - 运行scheduler 模式[standalone]出错. 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05.849 [job-0] ERROR JobContainer - Exception when job run 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[Framework-14], Description:[DataX传输脏数据超过用户预期,该错误通常是由于源端数据存在较多业务脏数据导致,请仔细检查DataX汇报的脏数据日志信息, 或者您可以适当调大脏数据阈值 .]. - 脏数据条数检查不通过,限制是[100]条,但实际上捕获了[361]条. 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30) ~[datax-common-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.util.ErrorRecordChecker.checkRecordLimit(ErrorRecordChecker.java:58) ~[datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.scheduler.AbstractScheduler.schedule(AbstractScheduler.java:89) ~[datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.schedule(JobContainer.java:535) ~[datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:119) ~[datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.start(Engine.java:86) [datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.entry(Engine.java:168) [datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.main(Engine.java:201) [datax-core-0.0.1-SNAPSHOT.jar:na] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05.850 [job-0] INFO StandAloneJobContainerCommunicator - Total 361 records, 98167 bytes | Speed 95.87KB/s, 361 records/s | Error 361 records, 98167 bytes | All Task WaitWriterTime 0.001s | All Task WaitReaderTime 1.066s | Percentage 100.00% 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05.850 [job-0] ERROR Engine - 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 经DataX智能分析,该任务最可能的错误原因是: 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[Framework-14], Description:[DataX传输脏数据超过用户预期,该错误通常是由于源端数据存在较多业务脏数据导致,请仔细检查DataX汇报的脏数据日志信息, 或者您可以适当调大脏数据阈值 .]. - 脏数据条数检查不通过,限制是[100]条,但实际上捕获了[361]条. 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.util.ErrorRecordChecker.checkRecordLimit(ErrorRecordChecker.java:58) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.scheduler.AbstractScheduler.schedule(AbstractScheduler.java:89) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.schedule(JobContainer.java:535) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:119) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.start(Engine.java:86) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.entry(Engine.java:168) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] at com.alibaba.datax.core.Engine.main(Engine.java:201) 2025-05-19 10:34:05 [AnalysisStatistics.analysisStatisticsLog-53] 2025-05-19 10:34:05 [JobThread.run-165]
----------- datax-web job execute end(finish) -----------
----------- ReturnT:ReturnT [code=500, msg=command exit value(1) is failed, content=null] 2025-05-19 10:34:05 [TriggerCallbackThread.callbackLog-186]
----------- datax-web job callback finish. 如何清空脏数据?

最新推荐

recommend-type

用PLC优化天车操作流程实现节能降耗.doc

用PLC优化天车操作流程实现节能降耗.doc
recommend-type

网络安全基础与攻击防范教学PPT课件

网络安全是信息时代的一项重要课题,随着网络技术的快速发展和广泛应用,网络攻击手段也在不断翻新,因此了解和掌握网络安全的基本概念和防护措施对于每一个网络用户来说都至关重要。 首先,网络安全基本概念涵盖的范围广泛,主要包括了数据的保密性、完整性、可用性以及认证和授权等方面。保密性关注的是信息不被未授权的个人、实体访问或泄露;完整性保证信息在传输或存储的过程中不被未授权的修改;可用性确保授权用户能够及时地获取和使用信息。认证是验证身份的过程,授权则定义了经过认证的用户可以访问哪些资源。 网络安全攻击方式多种多样,常见的有病毒、木马、蠕虫、钓鱼攻击、拒绝服务攻击(DoS/DDoS)、中间人攻击、会话劫持、SQL注入等。病毒是一种可以自我复制并传播的恶意代码,它可能会破坏系统文件、窃取信息甚至影响计算机正常运行。木马通常伪装成合法软件,骗取用户安装后,在后台执行恶意操作。蠕虫与病毒类似,但不需要依附于宿主文件,可以自我复制并传播。钓鱼攻击通过伪造的电子邮件或网站来欺骗用户,获取敏感信息。拒绝服务攻击通过大量的请求导致服务瘫痪。中间人攻击是在通信双方之间拦截和篡改数据。会话劫持是指劫持用户与服务器之间的正常会话。SQL注入攻击则是利用了应用程序对输入数据的处理不当,注入恶意SQL语句到数据库中,从而窃取数据或对数据库进行破坏。 针对这些攻击方式,网络安全的防范措施也相应而生。防火墙是一种重要的安全设备,它可以监控进出网络的数据包,根据预设的安全规则允许或拒绝数据包通过。入侵检测系统(IDS)和入侵防御系统(IPS)能够识别潜在的恶意行为,并做出相应的响应措施。加密技术可以保障数据在传输过程中的安全性,常见的加密算法包括对称加密和非对称加密。 除此之外,安全管理措施也非常重要,比如进行安全审计、制定安全策略、进行安全教育和培训等。安全审计是对系统活动进行记录和分析的过程,帮助发现潜在的安全问题。安全策略是一系列规则和步骤,用于指导组织进行安全管理和决策。而安全教育和培训能够提高用户的安全意识和防范能力,这对于预防社会工程学攻击等尤为重要。 在网络攻击与防范的介绍中,本课件特别强调了安全意识的重要性。安全意识指的是用户对安全威胁的认识和对安全措施的了解,这是预防网络攻击的第一道防线。具有安全意识的用户会更加谨慎地处理邮件、安装软件、访问网站等,从而减少了遭受攻击的风险。 最后,本章还提到了如何通过配置和加固主机来提高安全性。这包括对操作系统和应用程序进行安全配置,关闭不必要的服务,定期更新系统和软件补丁,使用强密码和多因素认证,以及进行数据备份等操作。 通过以上内容的学习,学生们能够对网络安全有一个全面的了解,并在实际操作中采取有效措施来保护自己的网络环境免受攻击。这对于未来无论是从事IT行业,还是作为一个普通的网络用户,都是至关重要的技能。
recommend-type

【性能测试基准】:为RK3588选择合适的NVMe性能测试工具指南

# 1. NVMe性能测试基础 ## 1.1 NVMe协议简介 NVMe,全称为Non-Volatile Memory Express,是专为固态驱动器设计的逻辑设备接口规范。与传统的SATA接口相比,NVMe通过使用PCI Express(PCIe)总线,大大提高了存储设备的数据吞吐量和IOPS(每秒输入输出操作次数),特别适合于高速的固态存储设备。
recommend-type

setSceneRect

### 如何正确使用 `setSceneRect` 函数 在 Qt 图形视图框架中,`QGraphicsView` 和 `QGraphicsScene` 是两个核心组件。为了更好地管理和显示图形项,合理设置场景矩形非常重要。 #### 设置场景矩形的作用 通过调用 `setSceneRect()` 方法可以限定场景的逻辑坐标范围[^1]。这不仅有助于提高渲染效率,还能确保当试图移动超出此边界时不会无限扩展场景尺寸。具体来说: - 场景中的所有操作都将被限制在这个矩形范围内; - 视图自动调整其可视区域以适应这个矩形; - 如果不显式设定,则默认值可能无法满足特定应用需求; ####
recommend-type

提供源文件的FLASH华丽翻书特效教程

标题中的知识点:标题“华丽的翻书效果 FLASH”表明该文件主要讲述了如何在FLASH(Adobe Flash)软件中制作具有华丽翻书效果的动画。FLASH是一种广泛用于创建动画、游戏和各种互动媒体的软件,它允许设计师创建矢量图形和动画,以及交互式内容。翻书效果在这里指的是一种模仿真实书籍翻页效果的动画,使得电子杂志或其他数字媒体内容的展示更为生动和吸引人。 描述中的知识点:描述中提到“现在带源文件的不好找哇,快点吧”,暗示本文件包含了源文件。源文件指的是 FLASH 中创建翻书效果的原始项目文件,这种文件通常可以被打开和编辑,从而允许其他用户理解其结构和设计逻辑。这意味着该文件不仅是一个成品展示,还是一个可以学习和进一步开发的学习资源。这种资源对于想要了解如何创建类似效果的设计师来说是十分宝贵的。 标签中的知识点:标签“flash 电子杂志 翻书 特效 FLASH”进一步细化了知识点。这里提到了电子杂志,表明这种翻书特效常用于电子杂志的交互设计中,增强用户的阅读体验。"翻书"和"特效"再次强调了FLASH软件在制作具有视觉吸引力的动画方面的应用,尤其是模拟翻页这样的具体交互动作。 压缩包子文件的文件名称列表中的知识点:“8inter”这个名称显得较为简短且不具有足够的上下文信息来推断具体知识点,但可以推测这可能是压缩文件的名称,而“inter”可能是指“交互”(interaction)的缩写。如果是这样,则暗示压缩文件可能包含与FLASH交互设计相关的内容。同时,由于文件以数字开头,这可能表明这是一个特定系列或者版本的文件。 总结以上知识点,我们可以得出该文件是关于FLASH中翻书效果的制作教程或者成品展示,并且附带可编辑的源文件,使其成为了一个学习资源。这表明在FLASH的应用中,除了传统的动画制作以外,还可以用来设计交互性更强的视觉效果,如翻书特效,这些特效在电子出版物和交互式广告中尤为常见。此外,由于FLASH技术逐渐被HTML5和CSS3等现代网页技术所替代,拥有 FLASH 源文件变得越来越难,因此本文件更显得珍贵,对于学习和研究 FLASH 动画和特效的设计师和开发者而言,具有较高的参考价值。
recommend-type

【固态硬盘寿命延长】:RK3588平台NVMe维护技巧大公开

# 1. 固态硬盘寿命延长的基础知识 ## 1.1 固态硬盘的基本概念 固态硬盘(SSD)是现代计算设备中不可或缺的存储设备之一。与传统的机械硬盘(HDD)相比,SSD拥有更快的读写速度、更小的体积和更低的功耗。但是,SSD也有其生命周期限制,主要受限于NAND闪存的写入次数。 ## 1.2 SSD的写入次数和寿命 每块SSD中的NAND闪存单元都有有限的写入次数。这意味着,随着时间的推移,SSD的
recommend-type

word32赋值word16

### 将32位数据赋值给16位数据的方法 当需要将32位数据(`word32`)赋值给16位数据(`word16`)时,由于两者长度不同,直接赋值可能会导致数据丢失或溢出。为了确保转换过程中的准确性,通常有两种方法来处理这种类型的转换: #### 方法一:截断高位 如果仅需保留低16位的信息,则可以直接通过掩码操作提取`word32`的低16位作为新的`word16`值。 ```c #include <stdint.h> uint16_t convert_uint32_to_uint16_truncate(uint32_t word32) { return (uint16_t
recommend-type

VC实现简单COM组件,初探COM编程技巧

标题和描述指出了一个关键的IT知识点:COM(组件对象模型)的编程实践,特别是通过VC(Visual C++)环境来编写简单的COM组件。COM是一个由微软提出的组件对象模型,它为软件组件提供了二进制接口,使得这些组件可以在不同的编程语言中通过接口进行交互。COM是Windows操作系统下软件组件通信的基石,广泛应用于Windows应用程序开发。 首先,理解COM的基本概念对于编写COM组件至关重要。COM定义了一组接口规范,包括但不限于: 1. IUnknown接口:所有COM接口都必须直接或间接地继承自IUnknown接口,它提供了接口的查询(QueryInterface)、引用计数增加(AddRef)和减少(Release)的标准方法。 2. IDispatch接口:允许客户程序通过名字和参数类型来动态调用对象的方法。 3. IProvideClassInfo接口:提供类信息,以便对象可以返回类型信息。 在VC中编写COM组件涉及到以下关键步骤和概念: 1. 实现COM接口:编写类并实现COM接口,主要任务是重写IUnknown接口中声明的方法。 2. 类厂(Class Factory):负责创建COM对象的组件,通常需要实现IClassFactory接口。 3. 注册COM组件:创建COM对象前需要注册组件信息,以便系统可以识别和加载。这涉及到编辑注册表或使用注册工具。 4. 引用计数:COM使用引用计数来管理对象的生命周期,开发者必须确保在对象创建、查询接口以及接口引用释放时正确更新引用计数。 5. 唯一标识符(GUIDs):为了确保COM组件的唯一性,在实现COM时,需要为每个接口和组件生成一个全球唯一的标识符(GUIDs),这通常通过UUIDGen工具生成。 为了编写简单的COM组件,开发者需要掌握使用VC的Microsoft Foundation Classes (MFC) 或者使用ATL(Active Template Library)这两种方法。MFC提供了更完整的类库支持,而ATL则更接近于COM的核心概念,是编写轻量级COM组件的推荐方式。使用ATL,开发者可以通过向导快速生成COM类的框架代码。 此外,压缩包子文件名MyStudio可能指示了一个集成开发环境(IDE)或项目文件夹名称。在MyStudio中可能包含了与COM组件相关的各种文件,如头文件(.h)、实现文件(.cpp)、资源文件(.rc)、项目文件(.vcxproj)和解决方案文件(.sln),这些文件共同构成了COM组件的完整代码和配置信息。 在编写COM组件时,开发者还需要考虑线程模型,因为COM支持不同的线程模型,包括单线程公寓(STA)、多线程公寓(MTA)以及中性公寓(neutral apartment)。不同的线程模型对COM对象的调用和同步机制有影响,选择合适的线程模型对于编写高效的COM组件非常关键。 最后,需要注意的是,COM技术虽然功能强大,但是编写和维护相对复杂,对程序员有较高的要求。随着技术的发展,微软也推出了其他组件模型,比如.NET,它们在某些方面简化了组件编程的复杂性,但COM作为一种成熟的技术依然在某些应用场景下不可或缺。希望对想学习COM的人有所帮助的知识点已经详细说明,希望这些信息能对读者在学习和工作中遇到相关问题时提供帮助。
recommend-type

【故障恢复策略】:RK3588与NVMe固态硬盘的容灾方案指南

# 1. RK3588处理器与NVMe固态硬盘的概述 ## 1.1 RK3588处理器简介 RK3588是Rockchip推出的一款高端处理器,具备强大的性能和多样的功能,集成了八核CPU和六核GPU,以及专用的AI处理单元,主要用于高端移动设备、边缘计算和
recommend-type

使用python语言实现一个推箱子小游戏

### Python实现推箱子小游戏 #### 游戏初始化与状态管理 为了创建一个简单的推箱子游戏,首先需要定义游戏的基本结构和初始状态。这可以通过复制给定的游戏状态来完成。 ```python import copy def initialize_game(level_data): gameStateObj = copy.deepcopy(level_data['startState']) # 初始化游戏状态[^1] return gameStateObj ``` #### 游戏页面逻辑设计 游戏页面的主要功能包括显示当前关卡编号、绘制游戏地图以及处理玩家输入。这些