mysql decimal 报错( Out of range value for column)

decimal 位数的坑 1、场景还原 -- 查询数据库版本 mysql> select version(); ±----------+ | version() | ±----------+ | 5.7.32 | ±----------+ 1 row in set (0.02 sec) 数据库中 invoiceAmount 字段设置的类型为 decimal(10,4) 然后保存数据时提交数据为 1234567,然后就报错了。Out of range value for column ‘invoice_amount’ at row 1 就很纳闷,明明设置的是 10 位数呀,这也就 7 位,怎么就报错了呢。 2、原因分析 decimal(10, 4) -- 这个设置表示的是小数位加上整数位总共为 10 位.醉了,也是。所以调整了位数为 20 位,就 OK 了 3、示例演示一下 3.1 创建脚本 mysql> show create table bcus_test_decimal; +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | bcus_test_decimal | CREATE TABLE `bcus_test_decimal` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `invoice_amount` decimal(10,4) NOT NULL DEFAULT '0.

解决geotools处理矢量数据格式转换NPE异常

1.背景简介 项目中需要实现矢量数据的shp文件转成geojson的需求,计划通过geotools工具来实现。 geotools:GeoTools是一个开源的Java库,用于处理地理空间数据和执行空间分析。它提供了丰富的GIS(地理信息系统)功能和工具,可以处理包括矢量数据、栅格数据、影像数据等不同类型的地理数据,支持空间对象操作、地图投影和坐标转换、空间查询和空间分析等能力。 2.引入依赖 <dependency> <groupId>org.geotools</groupId> <artifactId>gt-shapefile</artifactId> <version>29.0</version> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-geojson</artifactId> <version>29.0</version> </dependency> 3.代码示例 下面这段代码实现将shp文件转化成geojson格式的文件: @SneakyThrows @Test public void shpToGeo() { // shp文件 File file = new File("D:\\test\\shp\\city.shp"); Map<String, Object> map = new HashMap<>(); map.put("url", URLs.fileToUrl(file)); DataStore dataStore = DataStoreFinder.getDataStore(map); String typeName = dataStore.getTypeNames()[0]; SimpleFeatureSource featureSource = dataStore.getFeatureSource(typeName); // geojson文件 File geojsonFile = new File("D:\\test\\shp\\city.geojson"); SimpleFeatureCollection featureCollection = featureSource.getFeatures(); FileOutputStream geoJsonOutputStream = new FileOutputStream(geojsonFile); // 写入数据 new FeatureJSON().writeFeatureCollection(featureCollection, geoJsonOutputStream); } 4.

Spring-boot-2.6.3集成nacos报NoClassDefFoundError问题解决

报错 项目基于spring-boot-2.6.3,后来需要接入nacos作为注册中心,接入nacos后报错如下: 报错信息表明运行环境中找不到ConfigurationBeanFactoryMetadata这个类。 报错分析 从报错信息来看是项目启动过程中需要初始化ConfigurationPropertiesRebinderAutoConfiguration这个Bean,这个Bean引用了ConfigurationBeanFactoryMetadata这个类,这个类找不到(NoClassDefFoundError)。 首先来看一下ConfigurationBeanFactoryMetadata这个类,这个类出现在spring-boot这个包中,如下所示: 不过,在spring-boot-2.4.X及以上版本中,这个类被删掉了。 下面来看一下,报错项目的相关依赖版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.3</version> <relativePath/> </parent> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.0.3.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.0.3.RELEASE</version> </dependency> 项目上用的spring-boot版本是2.6.3,也就是说在该版本下,ConfigurationBeanFactoryMetadata这个类已经被删除了,项目启动过程中在初始化ConfigurationPropertiesRebinderAutoConfiguration这个bean(准确的说是初始化ConfigurationPropertiesRebinderAutoConfiguration的configurationPropertiesBeans这个方法返回的bean)的时候,由于找不到ConfigurationBeanFactoryMetadata这个类,就报了NoClassDefFoundError这个错误。 解决过程 网络上比较多的解决方法: spring-boot版本降级 这个方法比较粗暴,也比较简单,既然2.4.X及以上版本把ConfigurationBeanFactoryMetadata这个类删除了,那么,把spring-boot降到2.3.X及以下版本,自然就找得到这个类了。如果采用这种办法,那么项目就无法接入spring-boot新版本的功能,项目spring-boot版本永远只能停留在低版本,除非等待nacos在新版中解决该问题。很显然这种办法很low。 手动加上ConfigurationBeanFactoryMetadata 既然新版本删除了org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata这个类,那么手动把它加到项目中去,理论上就可以解决这个问题。具体参考: https://blog.csdn.net/demontxy/article/details/122187321 该解决方式很简单,就是在自己项目上新建一个包(org.springframework.boot.context.properties与ConfigurationBeanFactoryMetadata的包保持一致),然后在该包下新建一个类ConfigurationBeanFactoryMetadata类(保持和低版本,如spring-boot-2.3.X内的类一致),然后将该类的bean注入到Spring上下文,ConfigurationPropertiesRebinderAutoConfiguration这个类会从Spring容器中去取这个 bean: @Bean @ConditionalOnMissingBean( search = SearchStrategy.CURRENT ) public ConfigurationPropertiesBeans configurationPropertiesBeans() { ConfigurationBeanFactoryMetadata metaData = (ConfigurationBeanFactoryMetadata)this.context.getBean(ConfigurationBeanFactoryMetadata.BEAN_NAME, ConfigurationBeanFactoryMetadata.class); ConfigurationPropertiesBeans beans = new ConfigurationPropertiesBeans(); beans.setBeanMetaDataStore(metaData); return beans; } 这种方法本人尝试过,依然会报异常,不过报的错是NoSuchBeanDefinitionException这个异常,表示Spring上下文没有找到ConfigurationBeanFactoryMetadata这个类的bean,目前猜测原因是bean加载顺序导致的,也就是说初始化ConfigurationPropertiesRebinderAutoConfiguration的configurationPropertiesBeans时,applicationContext(spring上下文)还没有初始化ConfigurationBeanFactoryMetadata这个类的bean。 改造nacos源码 这种方法是一般是由于引入如下nacos依赖引起的: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.3</version> </parent> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <version>0.

程序员面试,面试官问 「你接受加班吗 」,怎么回答比较好?

说到加班,就不得不提一提程序员行业了。程序员加班是常态,但面试时你冷不丁的来一句你接受加班吗?无疑会问倒不少人。很多码农经过 3 轮的技术面拷打,各种八股文都倒背如流,但是一到 hr 面的一些软问题上就发懵了,毫无思路,这类问题看起来没有技术难度,但也困惑了不少码农 比如,有同学面试到hr面了,hr经常会问怎么看待加班? 很多同学可能就干脆回答能接受加班,这个回答没错,但是理论不够充分,能以让 hr 信服。 添加图片注释,不超过 140 字(可选) 基本认知 其实不难分析出如下几点: 1.问加班的团队十有八九要加班,不然难不成是想找到不喜欢加班的人一起吐槽加班?所以大的方向一定是要接受加班; 2.不能说喜欢加班,面试官也不傻,真正喜欢加班的人凤毛麟角,谁不是生活所迫才加班,这里他只能想确认你是能接受的,因为团队如果很忙,那招进来一个不愿意加班的很麻烦,你需要能接受,并且不带抵触情绪 3.也有可能通过这个问题,看看你的应变能力,这个可能性小,但是也不是没有,我们只要回答的有理有据就可以。 回答套路 先看下开头截图中一位小伙伴的说辞: 加班是互联网的常态,我现在也没女朋友,也没太多其他爱好,在百度实习的时候我也是每天最后一个走的。我想毕业前几年,我应该都还是很愿意接受加班的。 套路很简单:先有方向,再编理由。 方向就是接受加班。 理由呢,要去想我接受加班怎么证明呢?怎么说才更真诚呢这里有一个感性理由,没女朋友,没其他爱好。再加了一个理性案例,我在百度加班就很凶,这样一套组合拳打下去就很有说服力。 当然,这肯定不是唯一的回答,只要你说得有理有据,就是好的回答。 最后 不能小瞧这种面试中的送命题,关于加班,大的方向一定是要表示接受,只要表示接受就大差不差,然后在大方向下整点论据就更进一步了。 最后,技术只是面试的一部分,这类软性问题其实影响也很好,无论是技术问题还是软性问题,我们都要明白,只有通过这些问题展现我们的思考能力、沟通能力、协作能力才能凸显出我们的价值。 当然如果你都到不了HR面这一轮还是好好补技术吧! 金九银十已到,想在这两个月找工作的话,现在就得准备起来了。如果你不知道面试如何准备,不知道会被问哪些问题,不知道这些问题如何回答。我出的Java面试宝典你一定要了解一下。 其内容涵盖:计算机基础、Java、JVM、spring、算法、微服务、分布式、大厂面经、技术脑图等等...共1700+页 质量非常高!!! 不管最近要不要去面试,建议大家都保存一份!!学完之后不论是 厂内晋升 还是 跳槽涨薪 都不在话下! 内容如下: 大厂面试题真题解析(38页) JVM(183页) 多线程(221页) Mysql(216页) Spring(338页) Spring Boot(41页) 经典面试题(35页) Spring Cloud(50页) Dubbo(55页) Mybtis+Redis(27页) Linux+网络(66页) MQ+Kafka+Zookeeper(40页) Netty(21页) 大数据+hadoop(31页) 算法(38页) 设计模式+项目+高并发(41页) 注:篇幅有限,资料已整理成文档,文末查看! 一、算法(大厂必备)2023版 含:红黑树,B+树,贪心算法,哈希分治法,七大查找算法,动态规划,一致性算法,数据结构等... 二、设计模式(工欲善其事必先利其器)2023版 含:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式,适配器模式,装饰器模式,代理模式等23种设计模式... 三、Netty + MQ + kafka(底层原理+面试题)2023版 含:Netty常用场景,高性能设计,架构设计,经典面试题等... 四、zookeeper + Dubbo(技术干货+面试题)2023版 含:zookeeper集群,应用场景,分布式锁,Dubbo核心功能,集群配置,负载均衡,常见面试题等.

线程池自定义线程工厂并实现三个线程循环输出1-100

构建自定义线程工厂 自定义线程工厂能够自定义业务名称以及线程名称的显示,能够帮助我们更快的定位错误,比原本自带的无意义的线程id更加符合规范。 package multipleThread.src; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; public final class NamingThreadFactory implements ThreadFactory { //原有的线程工厂 public final ThreadFactory threadFactory; //线程名称 public final String name; //原子类,用于保证多个线程创建递增的名称id private final AtomicInteger ThreadNum=new AtomicInteger(1); public NamingThreadFactory(ThreadFactory threadFactory,String name) { this.threadFactory = threadFactory; this.name=name; } @Override public Thread newThread(Runnable r){ Thread t=threadFactory.newThread(r); t.setName(name+"[#"+ThreadNum.getAndIncrement()+"]"); return t; } } 线程池3个核心线程依次循环输出1-100 使用线程池相比于创建三个线程分别启动更加贴合实际业务,代码也更加简洁具有较好的维护性,可以轻易的扩展到n个线程循环输出xxxx通过execute继承了Runnable的类重写run方法实现 package multipleThread.src; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ThreadPool { //最大数 public static final int MAX_VALUE = 100; //volatile保证变量可见性 public static volatile int cnt = 1; //同步锁,保证原子性 public static Object lock = new Object(); public static void main(String[] args) { //创建自定义线程池,核心线程数为3,这样新建的线程会优先分配到核心线程数中,保证依次出现 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 4, 0L, TimeUnit.

redis || 内存策略

Redis内存回收 Redis之所以性能强,最主要的原因就是基于内存存储。然而单节点的Redis其内存大小不宜过大,会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置Redis的最大内存: # 格式: # maxmemory <bytes> # 例如: maxmemory 1gb 当内存使用达到上限时,就无法存储更多数据了。为了解决这个问题,Redis提供了一些策略实现内存回收: -- 内存过期策略 -- 内存淘汰策略 过期策略 可以通过expire命令给Redis的key设置TTL(存活时间): 可以发现,当key的TTL到期以后,再次访问name返回的是nil,说明这个key已经不存在了,对应的内存也得到释放。从而起到内存回收的目的。 过期策略-DB结构 Redis本身是一个典型的key-value内存存储数据库,因此所有的key、value都保存在之前学习过的Dict结构中。不过在其database结构体中,有两个Dict:一个用来记录key-value;另一个用来记录key-TTL。 typedef struct redisDb { dict *dict; /* 存放所有key及value的地方,也被称为keyspace*/ dict *expires; /* 存放每一个key及其对应的TTL存活时间,只包含设置了TTL的key*/ dict *blocking_keys; /* Keys with clients waiting for data (BLPOP)*/ dict *ready_keys; /* Blocked keys that received a PUSH */ dict *watched_keys; /* WATCHED keys for MULTI/EXEC CAS */ int id; /* Database ID,0~15 */ long long avg_ttl; /* 记录平均TTL时长 */ unsigned long expires_cursor; /* expire检查时在dict中抽样的索引位置.

windows安装稳定版MySql-8.0.19.msi详细步骤(附安装包mysql+workbench)

1.双击 mysql-installer-community-8.0.19.0.msi,启动 MySQL 安装程序 2.如果弹框提示警告信息,证明电脑需要安装额外的 .NET Framework 依赖包。此时,先退出 MySQL 的安装程序, 然后双击 NDP452-KB2901907-x86-x64-AllOS-ENU.exe,启动 .NET Framework 4.5.2 的安装程序。 3.一定要按照下图中标注的顺序点击按钮 保持默认选项,点击next 点击Execute 检查依赖项 如图显示正在安装依赖 点击同意,安装c++依赖项 安装完成,点击关闭 一点要勾选协议,然后点击install 安装完毕后点击finish退出 点击next 此时,会弹出如下警告窗,直接点击 Yes 开始安装mysql 点击execute 设置网络模式这里可以保持默认,不用修改 将 MySQL 的默认 root 用户密码,这里可以设置一个自己的密码,一定要记住这个密码,以后会用到,然后点击next 将 MySQL 配置为 Windows 的服务 ,这里保持默认就行 点击next 这里保持默认,不用改 测试。输入刚才设置的密码点击check 

2023 高教社杯 数学建模国赛(B题)深度超全剖析|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 更新!!! 让我们来看看B题! 问题 1: 多波束测深的覆盖宽度及相邻条带之间重叠率的数学模型 首先,让我们建立多波束测深的覆盖宽度(W)和相邻条带之间重叠率(R)的数学模型。 覆盖宽度(W)的计算: 覆盖宽度是指从测线的中心线到其侧边的距离,可以使用以下公式计算: W = 2 * D * tan(a) 其中, W 是覆盖宽度。D 是海水深度,已知为70 m。a 是坡度,已知为1.5度(需要将其转换为弧度)。 相邻条带之间的重叠率(R)的计算: 重叠率是指相邻两条测线之间的覆盖宽度重叠的部分与总覆盖宽度的比率。可以使用以下公式计算: R = 1 - (d / W) 其中, R 是相邻条带之间的重叠率。 d 是相邻两条测线的间距,负值表示距离中心点的左侧,正值表示距离中心点的右侧。 W 是覆盖宽度,已在上面的公式中计算出。 现在,我们可以使用这些公式计算表1中所列位置的指标值。首先将坡度从度转换为弧度: 坡度 a = 1.5 度 = 1.5 * π / 180 弧度 然后,使用海水深度 D = 70 m 和多波束换能器的开角 a = 120度(需要转换为弧度)来计算每个位置的覆盖宽度和相邻条带之间的重叠率。 计算后,将结果以表1的格式放在正文中,并保存到result1.xlsx文件中。确保计算时将角度转换为弧度以获得正确的结果。 表1的计算结果,包括覆盖宽度和与前一条测线的重叠率。我还将提供每个位置的计算公式解释。 | 测线距中心点处的距离/m | 海水深度/m | 覆盖宽度/m | 与前一条测线的重叠率/% |

ES6-ES12所有特性详解

目录 ES6 (ECMAScript 2015): 1. 块级作用域变量声明 (let 和 const): 2. 箭头函数: 3. 解构赋值: 4. 参数默认值: 5. 模板字符串: 6. 增强的对象字面量: 7. 类和模块: ES7 (ECMAScript 2016): 1.Array.prototype.includes: 判断数组是否包含指定的元素。 ES8 (ECMAScript 2017): 1.Async/Await: 异步函数用于更简化和清晰地处理异步操作。 ES9 (ECMAScript 2018): 1.Rest/Spread 属性: 用于展开数组和对象。 ES10 (ECMAScript 2019): 1.Array.prototype.flat 和 Array.prototype.flatMap: 用于扁平化数组和映射数组。 ES11 (ECMAScript 2020): 1.可选链操作符: 安全地访问对象属性,避免出现未定义或空值的异常。 ES12 (ES2021): 1.Promise.any: 接受一个 Promise 数组,返回其中第一个成功的 Promise。 ES6 (ECMAScript 2015) 到 ES12 (ECMAScript 2021) 是一系列 JavaScript 的版本,每个版本都引入了许多新的语法和功能。下面是每个版本中的一些主要特性的实例和解析: ES6 (ECMAScript 2015): 1.

Python的pandas库来实现将Excel文件转换为JSON格式的操作

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Python案例分享专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Python的pandas库来实现将Excel文件转换为JSON格式的操作 文章目录 1、使用Flask将数据转为JSON数据提供给客户端2、使用pandas库实现Excel文件转换为JSON格式 1、使用Flask将数据转为JSON数据提供给客户端 如果您想创建一个本地接口来提供商品信息,您可以考虑使用Python以及一些流行的库来实现这个目标。以下是一些步骤和建议: 准备数据: 首先,确保您的Excel表包含商品信息,并将其保存为一个常见的数据格式,如CSV文件。这将使数据更容易在Python中处理。 安装Python: 如果您还没有安装Python,可以从Python官方网站下载并安装Python的最新版本。 选择Web框架: 为了创建本地接口,您可以选择一个Python的Web框架,如Flask或Django。对于初学者来说,Flask可能更容易入手。您可以使用以下命令安装Flask: pip install Flask 创建Flask应用: 使用Flask,您可以创建一个简单的Web应用程序,将商品信息作为JSON数据提供给客户端。以下是一个简单的示例: 插入代码 复制代码 from flask import Flask, jsonify import pandas as pd app = Flask(__name__) # 读取CSV文件 data = pd.read_csv('商品信息.csv') @app.route('/api/products', methods=['GET']) def get_products(): # 将CSV数据转换为JSON格式 products = data.to_dict(orient='records') return jsonify(products) if __name__ == '__main__': app.run(debug=True) 这个示例创建了一个Flask应用,它可以在访问/api/products端点时返回商品信息的JSON数据。 运行应用程序: 保存上述代码为一个Python文件(例如app.py),然后在命令行中运行它: python app.py 这将启动本地Web服务器,并使您的接口在http://127.0.0.1:5000/api/products上可用。 测试接口: 使用浏览器或工具如Postman来测试您的接口。访问http://127.0.0.1:5000/api/products应该返回商品信息的JSON数据。 这只是一个简单的示例,您可以根据需要扩展和自定义接口。此外,如果您希望接口支持其他操作(如添加、编辑、删除商品信息),您可以在Flask应用中添加相应的路由和处理程序。 2、使用pandas库实现Excel文件转换为JSON格式 使用Python的pandas库来实现将Excel文件转换为JSON格式的操作。以下是一个简单的示例代码:

【python学习】基础篇-常用函数-format() 输出与字符串格式化操作 文字对齐、填充值、标志设置、格式化、类型转换、千位符(数字分组)等

1、语法 format spec 格式控制符可以分为文字对齐、填充值、标志设置、格式化、类型转换、千位符(数字分组)等主要应用。 format()可以对数据进行格式化处理操作,语法如下: format(value,format_spec) value 为要转换的数据, fommat spec 为格式化解释, 当参数 format spec 为空时,等同于函数 str(value)的方式。 format spec 可以设置非常复杂的格式转换参数,实现比较完备的数据格式处理模板。fomat spec的编写方式如下形式: format_spec ::=[[fill]align][sign][#][@][width][,][.precision][typel] 2、format()函数实现数据编号 对数据进行编号,也是对字符串格式化操作的一种方式,使用format()函数可以对字符串进行格式化编号。 实现时只需设置填充字符(编号通常设置0), 设置对齐方式时可以使用<、>和符号表示左对齐、右对齐和居中对齐, 对齐填充的符号在“宽度”范围内输出时填充即可。 例如:对数字1进行3 位编号靠右对齐 #向右对齐,空位补0,长度为3 print(format(1,'0>3')) #输出结果为:001 #向左对齐,空位补0,长度为3 print(format(1,'0<3')) #输出结果为: 100 3、十进制整数,参数"d"和"n" #8位整数显示,不足部分整数前用空格填充 print(format(81,'8d')) # 格式化为8位带符号整数显示,补位空格放到符号前 print(format(-81,'8d')) # 格式化为8位正整数,用空格补位 print(format(81,'=8d')) # 格式化为8位负整数,不足部分在负号后填充 print(format(-81,'=8d')) # 右对齐,宽度为18个空格 print(format(81,'>10')) # 左对齐,宽度为18个空格 print(format(81,'<10')) # 用0填充空格,宽度为10个空格 print(format(81,'010')) #输出结果 81 -81 81 - 81 81 81 0000000081 4、浮点数类型, 可以提供的参数有“e”,“E”,“f”,“F”,“g”,"G“,"n”,“%”和None输出格式。 用f表示浮点类型,并可以在其前边加上精度控制

招聘信息数据分析及可视化|以51JOB为例进行

作者主页:编程千纸鹤 作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 文末获得源码 项目编号:BS-Python-012 一,环境介绍 语言环境:Python3.7 数据库:Mysql: mysql5.7 开发工具:IDEA或PyCharm 使用技术:Python+Flask+Echart+BeautifulSoup 二,项目简介 本项目基于爬虫实现对51JOB网站的爬取,并将数据存入MYSQL数据库。利用Flask开发WEB应用程序,读取MYSQL数据进行分析,利用Echart进行数据分析展示。 三,系统展示 岗位分布 薪资分布 学历分布 经验要求 公司类型 四,核心代码展示 from bs4 import BeautifulSoup # 导入beautifulsoup库 import re # 导入re库以使用正则表达式 import urllib.request, urllib.error from urllib import parse from clean_Data import CleanData import time class CrawlingData: # 第page页的岗位列表 def get_jobPage(self, key, page): try: # 定义爬取岗位的第一页url #url = "https://search.51job.com/list/000000,000000,0000,00,9,99," + key + ',2,' + str(page) + '.html' #url = 'https://search.

redis.clients.jedis.exceptions.JedisDataException: ERR Syntax error, try CLIENT (LIST | KILL ip:port

目录 1.报错分析 2.检查redis是否连接 3.使用Lettuce 1.报错分析 这个报错问题主要先看你的application.properties文件当中的配置redis是否正确,我的是这样的, # Redis服务器配置 spring.data.redis.host=127.0.0.1 spring.data.redis.port=6379 spring.data.redis.password=111111(没有设置密码就不要这段就行) # Redis连接池配置 spring.redis.pool.max-active=8 spring.redis.pool.max-wait=-1 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.data.redis.timeout=30000 如果你的Redis连接池配置在application.properties文件中应该是正确的。但是,由于您仍然遇到了Redis连接问题,可能还有其他原因导致了这个错误。 2.检查redis是否连接 首先,确保Redis服务器正常运行并且可以从您的应用程序所在的主机访问。您可以使用以下命令来测试Redis服务器是否正常运行。 使用命令: redis-cli ping 如果Redis服务器没有运行,请确保启动它。 接下来,请检查应用程序代码,特别是与Redis相关的部分,确保没有发送不正确的Redis命令。确保使用的Redis客户端库版本与您的应用程序和Redis服务器兼容。 3.使用Lettuce 如果问题仍然存在,您可以尝试切换到使用Lettuce作为Redis客户端,因为它是Spring Boot 2.x 默认支持的Redis客户端。以下是如何在pom.xml中添加Lettuce依赖的示例: <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </dependency> 您可以将Redis连接工厂配置修改为适用于Lettuce的方式: RedisConfig.java import java.time.Duration; /** * Redis 配置类 */ @Configuration @EnableCaching public class RedisConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(); lettuceConnectionFactory.setHostName("127.0.0.1"); lettuceConnectionFactory.setPort(6379); lettuceConnectionFactory.setPassword("111111"); System.out.println("Redis 连接工厂:" + lettuceConnectionFactory.toString()); return lettuceConnectionFactory; } 将使用Lettuce作为Redis客户端,并且不再依赖于Jedis。在切换到Lettuce后,再次运行您的应用程序,看看是否仍然遇到相同的问题.

aarch64架构pip安装h5py 2.10.0 build失败以及解决AttributeError: ‘str‘ object has no attribute ‘decode‘

安装h5py原因 from tensorflow.python.keras.models import load_model load_model加载str的话报错:AttributeError: ‘str’ object has no attribute ‘decode’。查找资料得知要按照低版本的h5py。 安装h5py2.10.0的问题 问题截图: 依赖的HDF5,Cython安装好了,也没有用。 后来发现pip默认给我安装的Cython是3.8.0,查看Github,发现tf1.15.0依赖的Cython是0.28.4, protobuf 3.8.0。 所以换成0.28.4 对于h5py的低版本,pip自动给我下载的压缩包我发现不是真正的Source code,最后都build失败了。所以最后去GitHub上自己手动选择压缩包去下载,碰运气,居然安装好了。 安装成功后,load_model可以加载成功,不再报错。事后觉得,好像HDF5库不安装也没有关系,主要是Cython版本要对,我试过了。 另外就是,安装了HDF5库以后,可能会导致下面的问题,但我没能复现出来,后来莫名奇妙又好了。

解决js+canvas使用ttf格式字体,首次加载不生效。

一、如何使用ttf格式字体? 1. 将ttf放到项目文件夹或其他位置 2. 在CSS中定义一个新的字体 @font-face { font-family: 'CXGDT'; // 定义字体名称 src: url('./assets/CXGDT.ttf'); // 文件路径 } 3.在HTML元素中使用该字体。 <p style="font-family: 'CXGDT';">这段文字使用了自定义字体。</p> 二、解决首次加载时不生效 1.原因:字体未加载完导致的 2.解决方法: document.fonts.load('24px CXGDT').then(() => { // 利用canvas绘制图形 });

第十一章 Odoo 12开发之看板视图和用户端 QWeb

本文为最好用的免费ERP系统Odoo 12开发手册系列文章第十一篇。 QWeb 是 Odoo 使用的模板引擎,它基于 XML 来生成 HTML 片断和页面。通过 QWeb可生成内容丰富的看板(Kankan)视图、报表和 CMS 网页。本文中我们将学习QWeb 语法以及如何使用 QWeb 来创建我们自己的看板视图和自定义报表。 本文主要内容有: 看板是什么?设计看板视图QWeb 模板语言看板视图的继承添加自定义 CSS 和 JavaScript 开发准备 我们将继续使用第十章 Odoo 12开发之后台视图 – 设计用户界面完成的library_checkout插件模块。相应代码请见 GitHub仓库。本章完成后的代码也请参见GitHub仓库。 了解看板 Kanban 是一个日语词汇,字面意思榜单,与精益制造和准时化生产相关联,由丰田工业工程师大野耐一(Taiichi Ohno)引入。最近看板的概念应用于更多领域,并且随着敏捷方法的施行在软件工业内流行起来。 看板让我们能够可视化工作队列,它以列来进行组织,每列代表工作进程的一个阶段。工作项以放在看板对应列的卡片来表示。新的工作项从最左边的列开始,并开始向右移动直至最右边列,代表工作完成。 看板的简单化或视觉效果让其对简单的业务流程有着优异的支持。一个基本的看板示例包含三列,如下图所示:待办、在办和完成。当然它可以扩展为你需要的其它指定流程: 对许多业务用例,看板都是管理相应流程的更有效方式,与 Odoo 11之前的更重的工作流引擎形成鲜明对比。Odoo 在支持经典的列表和表单视图的同时还支持看板视图,这易于我们实施这种类型的视图。下面就让我们一起来学习如何使用看板视图。 看板视图 现在我们要为借阅模型添加一个看板视图。每个借阅是一个卡片,看板将会被组织成阶段列。在前面的文章中,我们已经添加了stage_id阶段字段。 此前在表单视图我们大部分时候使用 Odoo 独有的 XML 元素,比如<field>和<group>,有时也会使用 HTML 元素,如<h1>或<div>,但用得较少。在看板视图中则恰恰相反,展示模板基于 HTML,仅支持两个 Odoo 独有的元素:<field>和<button>。 最终呈现在网页客户端中的内容是由 QWeb 模板动态生成的。QWeb 引擎处理特殊的 XML 标签和属性来进行生成。这样可以很好地控制如何渲染内容,但也让视图设计更为复杂。看板视图设计灵活性很强,我们将尽力以直接易懂地方式介绍快速创建看板视图的知识。查看与所需相似的看板视图来获取创意然后创建自己的看板是一种不错的方法。 我们将学习两种使用看板视图的方式。一种是卡片列表,它用于联系人、产品、雇员通讯录或应用等。联系人看板视图长这样: 但这不是真正的看板,看板应是一个组织成不同列的卡片,当然看板视图也支持这种布局。可能过 CRM 或项目应用来查看示例。访问CRM > Sales > My Pipeline可得到如下结果: 这两种布局的最大区别是卡片按列的组织方式。这通过 Group By 功能实现,与列表视图中相似。通常分组是通过stage字段实现。看板视图的一个非常有用的功能是可以在列之间拖放卡片,自动分配分组视图字段的对应值。从两个示例中的卡片我们可以看到一些分别。其实它们的设计非常灵活,设计看板卡片不只有一种方式。这两个示例为我们提供设计的一些基础。

第十二章 Odoo 12开发之报表和服务端 QWeb

本文为最好用的免费ERP系统Odoo 12开发手册系列文章第十二篇。 报表是业务应用非常有价值的功能,内置的 QWeb 引擎是报表的默认引擎。使用 QWeb 模板设计的报表可生成 HTML 文件并被转化成 PDF。也就是说我们可以很便捷地利用已学习的 QWeb 知识,应用到业务报表中。本文中我们将为图书馆应用添加一个报表,复习 QWeb生成报表的关键技巧。包括像汇总一类计算、翻译和纸张样式打印。 本文主要内容有: 安装wkhtmltopdf创建业务报表QWeb 报表模板在报表中展示数据渲染图片报表汇总定义纸质格式在报表中启用语言翻译使用自定义 SQL 建立报表 开发准备 我们将继续使用library_app插件模块进行学习,该模块在第三章 Odoo 12 开发之创建第一个 Odoo 应用中初次创建,然后在第五章 Odoo 12开发之导入、导出以及模块数据和第六章 Odoo 12开发之模型 – 结构化应用数据中进行了改进。相关代码请参见 GitHub 仓库。本文完成后代码也请参见GitHub 仓库。 安装wkhtmltopdf 要正确地生成报表,应安装wkhtmltopdf工具的推荐版本,该工具的名称表示Webkit HTML to PDF。Odoo使用它来将渲染的 HTML 页面转化为 PDF 文档。有些版本的wkhtmltopdf库已知存在问题,比如不打印页面头部和底部,所以需挑选使用的版本。从Odoo 10开始,官方支持了0.12.5版本,这也是官方推荐的版本。 小贴士:官方Odoo项目有一个 wiki 页面,保持了对于wkthtmltopdf使用的信息和推荐。可通过 GitHub 进行查看。 不幸的是你的主机系统,不论是Debian/Ubuntu或其它系统,所提供的安装包版本都不太一致。所以我们应下载和安装对于当前操作系统和 CPU 类型的推荐版本包。下载链接请见 GitHub。 首先应确保系统中所安装的不是错误的版本: 1 wkhtmltopdf --version 如果上述命令打印的结果不是我们需要的版本,应对其进行卸载。在Debian/Ubuntu系统中,使用的命令如下: 1 sudo apt-get remove --purge wkhtmltopdf 下一步我们需要下载适合我们系统的安装包并进行安装。通过GitHub下载链接进行查看。对于0.12.5,最新 Ubuntu 安装版本是针对Ubuntu 14.04 LTS稳定版,但对其后的Ubuntu系统应该同样生效。我们在最近发布的Ubuntu 64系统中进行安装,下载命令如下:

第十三章 Odoo 12开发之创建网站前端功能

本文为最好用的免费ERP系统Odoo 12开发手册系列文章第十三篇。 Odoo 起初是一个后台系统,但很快就有了前端界面的需求。早期基于后台界面的门户界面不够灵活并且对移动端不友好。为解决这一问题,Odoo 引入了新的网站功能,为系统添加了 CMS(Content Management System)内容管理系统。这使得我们无需集成第三方 CMS 便可创建美观又高效的前端。本文中我们将学习如何利用 Odoo 自带的网站功能开发面向前端的插件模块。 本文主要内容有: 学习项目 – 自助图书馆第一个网页创建网站 开发准备 我将用第十一章 Odoo 12开发之看板视图和用户端 QWeb中最后编辑的library_checkout插件模块,代码请见GitHub 仓库。本文完成后的代码也请参见GitHub 仓库。 学习项目 – 自助图书馆 本文中我们将为图书会员添加一个自助服务功能。可供会员分别登录账号来访问他们的借阅请求列表。这样我们就可以学习网站开发的基本技术:创建动态页面、在页面间传递参数、创建表单以及处理表单数据验证。对这些新的图书网站功能,我们要新建一个插件模块library_website。 大家应该已经轻车熟路了,首先创建插件的声明文件ibrary_website/__manifest__.py,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 { 'name': 'Library Website', 'description': 'Create and check book checkout requests.', 'author': 'Alan Hou', 'depends': [ 'library_checkout' ], 'data': [ 'security/ir.model.access.csv', 'security/library_security.xml', 'views/library_member.xml', ], } 网站功能将会依赖于library_checkout。我们并没有添加对website核心插件模块的依赖。website插件为创建完整功能的网站提供了有用的框架,但现在我们仅探讨核心框架自带的基础网站功能,尚无需使用website。我们想要图书会员通过登录信息在图书网站上访问自己的借阅请求。为此需要在图书会员模型中添加一个user_id字段,需要分别在模型和视图中添加,下面就开始进行网站的创建: 1、添加library_website/models/library_member.py文件 1

第一章 使用开发者模式快速入门 Odoo 12

本文为最好用的免费ERP系统Odoo 12开发手册系列文章第一篇。 Odoo提供了一个快速应用开发框架,非常适合创建商业应用。这类应用通常用于保留业务记录,增删改查操作。Odoo 不仅简化了这类应用的创建,还提供了看板、日历、图表等视图的丰富组件,用于创建好看的用户界面。 本文主要内容有: 引入本文使用的学习项目:to-do (任务清单)应用理解 Odoo 的结构、版本和发布,了解使用 Odoo 的相关知识准备一个 Odoo 的基本工作环境,有如下选项: 在线OdooWindows 一键安装包Docker激活开发者模式,在用户界面中展示所需使用的工具修改已有模型,添加字段,常用自定义快速入门创建自定义数据模型,为我们的应用添加新的数据结构配置权限,让指定用户组访问应用的功能创建菜单项,在用户界面中展示新的数据模型创建用户界面的基本组件:列表、表单、搜索视图 引入 to-do 列表应用 TodoMVC 项目提供一个多 JavaScript 框架实现的 to-do 简单应用类比。下面我们就用 Odoo 来创建一个简单的 to-do 应用。 使用这个应用我们可以添加新的 to-do 项,然后标记完成。比如可在项目中添加买鸡蛋,然后在购买后勾选已完成。To-do 项目应仅对当前用户可见,因而每个人可以获取自己的 to-do 列表。对于一个简易 to-do 应用这已足够,但为增加点趣味性,我们还将允许 to-do 列表项目包含一组和任务相关的用户,即工作小组。 就该应用我们应考虑以下几层: 数据层:通过模型实现逻辑层:通过自动化编码实现展示层:通过视图实现 对于数据层,我们需要一个 To-do 项目模型,我们还将利用内置的 partner(或 contacts)模型来支持工作组的功能。当然还要记得在新的模型中配置访问权限。 逻辑层中我们使用框架处理增删改查(CRUD)基本操作,要使用框架的功能,我们需要在开发者模块中使用 Python 代码。对于初学者,可以使用用户界面开发者菜单自动化工具来实现业务逻辑,后面的例子中会进行说明。 展示层中我们将为应用添加菜单项,以及 to-do 模型的视图。业务应用的基本视图是用于查看已有记录的列表视图、深入查看记录细节的表单视图。为增强易用性,我们还可以在列表视图中的搜索框预置过滤项。可用搜索选项也被视为一个视图,因而通过搜索视图可进行实现。 以下是创建 to-do 列表应用的步骤 创建 to-do 项的新模型,然后添加菜单让其可见为 to-do 项模型创建列表和表单视图,新模型包含如下字段 Description: text 类型Is Done?标记:布尔型 应用的具体功能包含添加执行同一任务的一组用户,因此需要一个表示用户的模型。所幸 Odoo 自带就有这样的模型 – partner 模型(res.partner),它可用于存储个人、公司和地址。并且仅有指定的人可被选择加入工作团队,因此我们需要修改 partner 模型添加Is Work Team?