- 博客(63)
- 资源 (3)
- 收藏
- 关注
原创 SpringBoot-JPA: 类型参数 ‘S‘ 的推断类型 ‘S‘ 不在其界限内;应扩展xxx
今天修改后台,增加一个新的Entities, 新建JPARepository时偷懒,从原来的Repository拷贝过来代码,结果忘记修改Entity类名,然后代码错误提示”类型参数 ‘S‘ 的推断类型 ‘S‘ 不在其界限内;应扩展xxx “,网上搜索了半天,有让降JPA版本的,大多数也不明白问题所在。后来再检查代码,才发现新增的那个Repository的形参没有改过来。
2024-03-29 16:15:16
215
原创 Springboot JPA实现多数据源配置
要实现一个MES系统的web-API接口,MES系统是购买的商业软件,厂商的接口报价过高,因此由内部IT团队开发实现这个接口。考虑到系统的追溯性,因此设计一个中间库,第三方报工系统传过来的数据同时存放在中间库和MES系统里。搜索查阅了很多博文及实验后,终于实现了多数据库的访问,调试时遇到了几个问题,在搜索后也找到了解决方案并修正。这样就完成了多数据源的配置,以后在相应的db目录下创建相关的entity和repository。
2024-02-20 07:57:11
682
原创 在一个4亿条记录的表上增加自增长列
公司系统的数据库容量每天增长50G,而这个系统采用的是CS架构,无法将计算应用分流。接入的终端数量从最初的100来设备,增加到目前的接近千台设备,后续还会呈增加的状态;现在每隔个1两周,系统就像我们的半边天每个月的那几天一样,要闹下情绪。停摆了几次之后,实在受不了,就分析数据库中的表占用比例,分析这些大表对应的业务。经过分析,发现有三个表占用了整个数据库空间的70%左右;有两个表的记录每天增长在1500W记录左右。我们这个仅仅是一个制造工厂的一个小小管理系统呀,按照这个速率增长下去,整个数据库的硬盘空间
2022-03-19 16:36:51
859
原创 DORM框架的第一个测试用例
因为很早前学习了Java的Hibernate(现在纳入Spring家族里作为JPA的唯一实现存在),对于对象持久化框架产生了浓厚的兴趣,甚至有一段时间尝试写一个Delphi版的ORM框架出来;写了一部分后因为不可言说的原因就放弃了。后来因为工作转向运维支持和其他开发语言,就没有再深入去了解Delphi的ORM框架。最近因为工作需要,再次回到Delphi上来,然后对ORM这个曾经投入了极大热情的东东也再次有了了解的兴趣。上网搜索了下“Delphi ORM框架”,找到几个ORM框架:EntityDac:
2021-10-31 21:31:44
442
原创 FireDAC连接SQL Server的设置
使用FDConnection控件连接数据库,在Params属性里设置Database:数据库名称DriverID:MSSQLPassword:连接数据库的用户密码Server:数据库服务器的名称或IP地址UserName:连接数据库的用户名也可以使用另外一种方式来连接数据库,就是使用FDManager来实现连接,使用FDManager还可以实现连接池的效果。具体实现方法是给FDManager的ConnectionDefs定义连接参数,例子如下:var Def: IFDSt.
2021-10-31 18:31:05
1001
原创 一个失败的软件开发管理案例
前段时间受到一个朋友的邀请,参观并考察了他公司的开发管理,并向我陈述了现在的管理困境:软件版本多,不同的软件版本使用了不同的架构,不同的软件版本又共用了
2021-06-05 13:36:45
1417
2
原创 应用程序自动更新的实现(delphi)
前段时间,在现场调试程序,因为系统已经投入运行,然后用户端有十几个。每次修改了bug后,都要跑到每个用户端去拷贝一次,实在忍受不了。就实现了应用程序版本检查及更新的功能。实现思路如下:1.下载更新使用单独的更新程序: 从服务端下载程序文件,然后覆盖旧版本。2. 主程序启动时检查版本(从服务端获取最新版本信息,比较自身版本信息),如果版本不一致则启动更新程序,并结束主程序的运行。因为我这个项目的服务端已经采用了ftp技术,因此只需要在服务端建立一个程序更新目录即可.更新程序的实现如..
2021-05-07 17:28:57
2316
4
原创 Delphi中使用Imageen控件将图像文件转换成PDF
因为项目客户要求,要将扫描产生的图像文件转存为PDF。Imageenio有一个方法savetopdf。这个方法可以生成一个PDF,不过生成的PDF文档体积比原来的图片文件大了10几倍,图像文件不到1M,产生的PDF却有接近20M。之所以这样是没有设置输出的PDF参数。Iamgeenio 有个params参数,这个参数里可以设置输出到PDF的压缩率,纸张大小等参数。调整后再次输出PDF,大小与原图像文件大小差不多。...
2021-04-20 18:07:31
2084
原创 idFtp操作时报错:Accept timed out
因为项目需要上传下载大量的文件,因此打算架设一个ftp服务器,然后客户端使用idFtp来操作。procedure TForm1.connect;begin IdFtp.Host := '127.0.0.1'; IdFtp.port := 21; IdFTP.Username := 'ftpuser'; IdFTP.Password := '123'; IdFtp.Connect;end;procedure TForm1.getList(dir: stri
2021-04-10 21:54:36
1550
原创 企业信息化系统建设中的运维视角
在传统的企业信息化系统设计里,系统设计者基本都是从终端用户视角出发设计系统。根据终端用户来设计交互界面。在企业信息化系统投入运行后,系统运行状况如何?如何发现异常?异常信息如何发送给相关人员?用什么方式发送?这些从运维视觉出发的考量一般都被系统设计者忽略了,或者当作不重要的功能放在迭代实现的最后面。最终结果导致系统投入运行后,因为没有支持运维视角的功能,导致需要客户提供专业的运维人员每天人工来检查系统的运行状况。如果某天运维忘记了某项检查,例如硬盘存储空间不够了,这下完蛋了,系统宕机。运维人员紧急加班,
2021-04-06 13:27:39
198
原创 信息管理系统开发框架设计(九) - 程序运行框架
在前面我设计了读取系统配置信息的config模块,与DBMS交互的DBHelper模块,写日志的Logger模块,MVC模块,这些基本都是独立存在的积木块,我们需要搭建一个组装平台,例如我们如何指定运行的主程序界面?如何加载与管理各个业务模块,每个业务模块就是一个MVC的实例?如何方便的加入新的业务模块?我们可以参考下Delphi的Application的实现逻辑,在Project的source里,如果第一行调用Application.CreateForm...
2020-06-09 10:01:11
351
原创 信息管理系统开发框架设计(八) - MVC - 控制器
在MVC模式里controller处于一个核心的位置,它要负责接受从view发来的用户交互请求,将用户请求转发给商业对象进行处理,然后从商业对象获取处理结果,选择合适的视图呈现给用户。也即controller有监听view的用户操作并及时响应 调用model进行用户的交互信息处理,然后将处理结果以恰当的方式(对话框,或者新的视图等)呈现给用户。如何监听view的操作?在delphi的VCL控件里封装了很多的事件,我们需要在controller里处理这些事件,然后在创建view时,把事件方法赋值给
2020-05-23 20:14:51
248
原创 信息管理系统开发框架设计(七) - MVC框架 - View
在efframework中,view部分的实现其实就是一个delphi的form。分析信息管理的基础功能,界面可以分为2类型:信息列表界面: 提供一个信息列表(可以用一个表格呈现), 提供用户对信息进行操作的各种可视化功能组件(如菜单、按钮等)),基本功能有新增,修改,删除,查看。通过这些可视组件,用户发起操作请求,相应的controller监听到请求后,可能呈现信息编辑界面View给用户进行信息编辑/查阅,或者调用关联的model执行用户请求(如删除当前信息行)。 信息编辑界面: 提供用
2020-05-19 23:56:03
365
原创 信息管理系统开发框架设计(六) - MVC框架 - model设计
作为信息系统最关键的部分,model这个商业对象需要实现以下功能:1.通过数据库访问接口(即efframework的DBHelper)实现数据持久化(即保存到DBMS中)2. 从数据库从提取某个商业对象的持久化数据并映射到商业对象实例。3.实现商业逻辑,例如保存前的数据校验,其他model的关联更新等在delphi完全面向对象的设计里,我们可以很容易的实现以上逻辑。在面向业务层面,model需要提供以下几个操作接口:1.提供公共属性对应用户输入栏位,这些栏位与DBMS中的table对
2020-05-18 22:42:25
344
原创 信息管理系统开发框架设计(五) - MVC框架
MVC是很流行的的一种web开发模式。通过对不同功能的划分,可以分块开发,让前端设计人员专注于界面开发,让后端开发人员专注于业务对象的开发。为了将前端界面与后端业务对象解耦,于是引进了控制器来连接前端用户界面与后端业务对象。其实这种开发模式也可以运用到CS方案的开发中。让用户界面模块专注于界面的设计,至于对用户的请求做何种响应处理,那是业务对象干的事情,控制器负责监听操作界面的用户请求并转发给对应的业务对象,或者将业务对象的数据绑定到用户操作界面上。从头解释下MVC的概念及思路:M:即Model
2020-05-18 06:05:23
1008
原创 信息管理系统开发框架设计(四) - 数据库访问模块
这个模块本质上就是一个TDataModule,我采用了 ado来作为访问数据库的组件。为了隔离其他模块对ado组件的依赖,我在其他实现模块中使用TClientDataSet来作为操作的数据集。实现了以下方法:execSql -执行一条更新SQL代码,不需要返回结果,如果有异常就自动抛出。getData - 执行一条select SQL代码,同时返回OleVariant类型的数据集,这个数据...
2020-05-10 10:11:05
665
原创 信息管理系统开发框架设计(三)- 日志管理
java中有一个log4j的日志管理包,可以很方便的实现对日志的管理。在delphi平台,作者没有发现类似的实现类,不过delphi中要实现类似的功能比较简单,封装下日志相关的逻辑规则即可。与日志管理相关的有如下几点:1.日志文件存放路径2.日志文件名称3.日志类型管理4.日志的可捕捉类型配置5.写日志6.调用接口关于日志文件名称、存放路径以及日志捕捉类型...
2020-05-10 09:22:23
535
原创 信息管理系统开发框架设计(二)- 配置文件管理模块
一个应用程序一般都会存在使用配置文件进行一些基础的动态配置信息,从而避免为每个客户编译不同版本的,从而增加应用程序的灵活性;比如在配置文件中存储访问数据库的一些信息(如连接字符串),或者配置系统捕捉日志的类型,日志文件的类型存放位置等等信息。因此配置文件的读取操作就较为普通。配置文件一般会采用ini/xml/json类型来做配置,当然这些文件基本都是文本文件类型,因此也可以根据需要自定义其他类...
2020-05-08 17:19:41
432
原创 信息管理系统开发框架设计(一)-efinfo framework
工作这么多年,基本都在信息管理系统的开发与实施里兜兜转转。工作时也写过一些框架性的东西,因为要结合旧代码,很少系统性的思考。因为这次疫情的影响,难道有这么多的空闲时间来回顾过往的工作经历。也就有了整理一个开发框架的想法。我本人使用的delphi居多,delphi的开源框架其实也不少,如cnpack,remobjects, 但很少有关于信息管理系统的整体架构性的开发框架。何谓整体架构性的开发框架...
2020-05-08 17:02:37
755
原创 DBGrid的输入焦点控制
在Delphi中,默认切换输入控件的输入焦点的按键是Tab,这个默认有点不符合输入习惯,大多数人习惯按Enter来切换到下一个输入单元。在dbgrid这个控件中,当前输入焦点列的设置是通过selectedIndex来控制的。如果我们想在用户按Enter后切换到下一列,可以在dbgrid的keypress事件里添加处理逻辑:if key = #13 thenbegin ifdbg...
2020-04-25 10:42:29
406
原创 delphi之comboBox的事件CloseUp与select
delphi的comboBox的事件里有CloseUp与select,这两个有什么区别?两者都是发生在comboBox下来列表点选之后。不过CloseUp事件发生在将选择的内容赋值给ComboBox.text之前,而select则是发生在ComboBox.text赋值之后。...
2020-04-04 15:35:26
1902
原创 我之“谁养鱼”的逻辑推理题试答
推理结果: 项目|顺序 1 2 3 4 5 国籍 挪威 丹麦 英国 德国 瑞典 颜色 黄色 蓝色 红色 绿色 白色 饮料 开水 茶 牛奶 咖啡 啤酒 香烟 Dunhill blend Paul...
2018-12-02 11:22:09
1363
转载 一道有挑战性的逻辑推理题 - 谁养鱼?
已知条件:有五間房子排成一列 所有房屋的外表顏色都不一樣 所有屋主都來自不同的國家 所有屋主都養不同的寵物 所有屋主都喝不同的飲料 所有屋主都抽不同的煙其他提示請看下圖,請問誰養魚?...
2018-12-02 11:21:00
957
1
原创 一个有趣的足球赛推理题及本人的推理
以下是一场足球赛成绩表:场数:该队总共比过的场数胜 :该队胜利的场数败 :该队失败的场数平手:该队平手的场数进球:该队在所有比赛中进球数总合失球:该队在所有比赛中让对方进球数总合积分:胜加2分,平手加1分,败加0分已知,下面这张成绩表没有一个数字是正确的 场数 胜 败 平手 进球 失球 积分 红队 4 ...
2018-12-02 11:17:49
1741
1
原创 Android App多语言支持
在res目录下添加Values目录,IDE会提示选择语言及适用地区,比如选择了中文简体,系统会自动产生一个目录Values-zh;然后在这个目录里新建一个strings.xml文档,用于配置该语言需要对应的字符串。如果要支持多种语言,必须为每种语言建立对应的Value目录,而且必须翻译所有的需要多语言支持的变量。变量的配置就是在resources节点里添加string子节点,属性name即为变量名...
2018-11-29 14:32:39
581
原创 Android App Project结构
1. Mainifest目录:存放项目的配置文件AndroidMainifest.xml2.Java目录:存放源代码,用于实现业务逻辑3.res目录:存放项目资源,一般包括4个字目录:drawable:存放用户自定义形状和背景选择器,xml文件类型 layout:存放界面布局文件,xml文件类型 mipmap:存放原生图标文件(png, gif, jpg) values:存放资源...
2018-11-28 23:17:18
426
原创 Android Studio 3.2.1 开发教程的一个小更正
从今天开始学习Android App开发。《基于Android Studio的应用程序开发教程》一书中的第一个例子,创建时要求选择“Blank Activity",找了半天没有看到,选择了"Empty Activity",IDE自动生成的源文件又对不上,然后尝试了下”Basic Activity",这下对上了!估计是新版本改了原来的称呼。记录一下不同之处。...
2018-11-28 11:36:37
783
原创 RouterOS使用指南-ADSL定时断线重拨
RouterOS-ADSL定时断线重拨利用系统的定时器功能来实现,如下:在系统(System)-定时功能(Scheduler)里添加一个Schedule,输入开始时间(Start Time),间隔时间(Interval),然后在事件(On Event)里写入以下语句:/interface disable pppoe-out1/interface enable pppoe-out1
2017-06-30 08:40:15
8161
原创 javascript关闭showmodalDialog窗体
dialog窗体1.在head中添加标签2..返回按钮的onclick=“ window.opener=window.self;self.close(); ”
2016-10-05 16:46:10
2330
原创 MS SQL 2008 R2删除过期的备份-TSQL命令
SQL命令-调用系统存储过程xp_delete_file来实现EXECUTE master.dbo.xp_delete_file 0,N'E:\DATA_Backup',N'bak',N'2013-08-19'(也可采用Maintenance Plan创建SSIS包来实现,类型为Maintenance Cleanup Task)
2013-08-21 14:29:47
849
原创 TrueType字体文件解析
在使用一些老外写的报表工具或控件时,总是会遇到中文乱码的问题;呵呵,这不我最终也遇上了,在我们的产品中使用了一个叫做eDocEngineer的报表输出控件;然后在中文平台上输出PDF等文档时,中文无法输出。经调试发现原来是TrueType字体文件解析时出了问题。老外对于TrueType字体的解析基本上只考虑了扩展名为ttf的情况,也即一个字体文件里只有一个字体,没有考虑到True Type Col
2010-01-27 10:32:00
11558
转载 加壳exe的方法--delphi实现
EXE文件加密器的原理:建立两个文件,一个用来添加资源到另外一个EXE文件里面,称为添加程序。另外一个被添加的EXE文件称为头文件。该程序的功能是把添加到自己里面的文件读出来。Windows下的EXE文件结构比较复杂,有的程序还有校验和,当发现自己被改变后会认为自己被病毒感染而拒绝执行。所以我们把文件添加到自己的程序里面,这样就不会改变原来的文件结构了。我们先写一个添加函数,该函数的功能是
2009-09-08 09:01:00
4374
原创 家庭理财系统 -- 功能清单
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font
2009-02-20 14:29:00
1515
TM8控件-使用手册.zip
2021-05-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人