- 博客(80)
- 收藏
- 关注
原创 虚幻引擎Actor不能销毁的问题
今天,在调试虚幻引擎C++脚本的时候,遇到了一个奇怪的问题,无论调用Destroy()函数,还是调用SetLifeSpan(5.f),设置actor的生存时间,actor都不能销毁,并且Destroy函数始终返回false。说明,虚幻引擎里面的这些回调函数,如果是重写父类的方法,尽量在第一行调用父类的逻辑。折腾了几个小时,终于发现问题所在,原来是BeginPlay这个回调函数的问题。我一开始把Super::BeginPlay();这行代码给去掉了,加上就好了。这样actor就能正常销毁。
2025-04-06 11:23:49
125
原创 C#枚举类型携带额外数据的方法
Java里面的枚举类型可以定义很多属性,携带各种数据,然而C#里面的枚举类型只能代表数字,不能在枚举类型里面定义各种属性,导致某些应用场景使用起来不方便,但是可以利用C#里面的Attribute来解决这个问题。通过调用GetAttribute方法,就可以得到对应的Attribute对象,并调用它里面的属性和方法。这个扩展方法需要传入一个泛型,通过反射机制,获取添加在枚举值上面的Attribute对象。当然,也可以自定义Attribute,使枚举类型可以携带任意的数据。然后,可以定义一个扩展方法。
2025-01-18 15:26:59
291
原创 Jetpack Compose自定义输入框
在Jetpack Compose里面有一个TextField控件,用来显示一个输入框,但是输入框内部有一个默认的内边距,使得宽高缩小之后,文字被遮挡甚至消失。我尝试了很多方法,都修改不了TextField里面的内边距,后来通过看书终于找到了一个方法,就是使用BasicTextField。BasicTextField是一个底层的输入框控件,可以自定义输入框的显示方式,其中关键在于decorationBox 参数,可以定制输入框里面的文字和图标如何显示。
2024-10-18 10:09:13
293
原创 使用React Router实现前端的权限访问控制
userName?avatar?authCodes?user,tab,menu这里将用户的用户名、头像、权限码,保存到了全局变量当中,其中authCodes代表权限码的Set集合,里面包含了菜单和按钮的权限码,方便后面进行校验,requestUserInfo函数用来请求后台接口,获取用户信息,并保存到全局变量和本地缓存当中,然后将user对象导出,tab和menu涉及到其他的功能,这里先不讨论。/*** 检查权限* @param access 权限码* @returns true 有权限。
2024-10-14 13:08:26
1424
原创 使用Jetpack Navigation实现页面跳转的方法
其中,NavHost函数是用来设置导航图的,Main和Splash是两个序列化对象,相当于跳转路径,SplashUI 和MainUI是两个可组合函数,就是两个页面,通过调用navController.navigate()函数实现页面跳转,将页面跳转的代码作为Lambda表达式传入SplashUI,popUpTo {inclusive = true}函数用于跳转后在历史堆栈中删除前一个页面,如果不调用,默认不会删除。并且,需要在该文件中添加一个插件,用于实现序列化。这是基本用法,这里做一下记录。
2024-10-14 10:52:07
267
原创 Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题
Layout组件是用来定义root.tsx中的布局的,它会把ErrorBoundary组件当作静态内容给放进去,因此无法动态加载Ant Design组件对应的样式,并且出现一大堆报错,导致CPU空转,温度飙高。这里面使用了Ant Design的Result组件,用来显示404错误信息,结果在测试过程中发现页面卡死,CPU温度飙高,浏览器控制台不停报错,而且页面中样式也没加载出来,排版混乱。其中,App组件用来加载路由组件,HydrateFallback组件是在路由跳转过程中显示加载状态的页面,如骨架屏。
2024-09-21 13:26:39
507
原创 在Remix中设置生产环境根路径的方法
其中,mode用于判断当前的环境,loadEnv方法中的’./'参数代表环境变量配置文件的路径,使用config对象就能获取当前的环境变量,base用来设置静态资源的根路径,basename用来设置路由的根路径。前端项目打包后,部署到生产环境,经常需要修改静态资源的根路径和路由的根路径。最近,在学习Remix的时候找到了方法。首先,在项目根目录下新建.env.development文件。打开vite.config.ts,修改相应的配置如下。和.env.production文件。
2024-09-15 14:40:49
332
原创 ASP.Net Core设置接口根路径的方法
但是,这样做了以后,swagger相关的接口路径并没有发生变化。也就是说,所有的接口都对应两个请求路径,一个是以acl开头的路径,另一个是swagger里面的请求路径。其中,UsePathBase方法添加了一个中间件,设置所有请求的根路径是acl,要注意中间件添加的位置,在MapControllers方法前面,才能生效。使用asp.net core开发微服务项目,需要给每个服务设置不同的根路径,这样既能使用网关转发请求,又方便对单个服务进行测试,保证请求路径的统一。
2024-08-06 15:29:58
628
原创 使用EFCore封装复杂查询结果的通用方法
这里面用到了左外连接查询,也就是查左表中所有数据,查右表中符合连接条件的数据,subRole属于右表的对象,所以可能是空的,如果直接把subRole.Id赋值给RoleId,会导致运行的时候报错,所以需要用as long?EFCore里面有一些方法可以方便的做关联查询,比如include方法,但是生成的SQL语句不尽人意,性能并不是最优的,想做内连接还是外连接,也没法用这个方法来掌控,要想完全掌控SQL语句,就需要用linq表达式来写查询逻辑。封装好了查询逻辑,就可以执行查询。下一步就是封装查询结果。
2024-06-21 18:52:32
543
原创 使用ASP.NET Core封装接口请求参数格式
UserSaveParam类就是用来封装请求参数的格式的,它会把实体类里面所有的属性都继承下来,并且可以定义与实体类里面同名的属性,进行覆盖,加上JsonIgnore特性,表示相应的属性不需要做json解析,也就不会接收到相应的参数值了,其他参数值仍然可以正常接收。还有一种方法,就是把目标对象里面的属性名称保存到HashSet里面,再遍历源对象里面的属性,一一比较属性名是否包含在HashSet里面,再做属性拷贝,性能会好一点,但也就那样。属性拷贝真的有必要吗?2、可以定义一个类,继承实体类,作为请求参数。
2024-06-21 18:24:32
399
原创 使用EFCore封装Service层CRUD代码
Key]set;这个类里面就包含一个主键属性,并且带了一个泛型Key,用来代表主键的类型,因为很多crud操作需要用到主键,因此需要这样定义,其他的实体类需要继承这个基类,比如User类[ Table("sys_user") ] [ Comment("用户表") ] public class User : BaseModel < long > {[ Comment("用户名") ] public string UserName {get;set;
2024-06-21 16:42:10
599
原创 ASP.NET Core自定义认证和授权搭建流程(使用JWT)
return new Result < T >(ResultCode . SUCCESS , "成功" , data);return new Result(ResultCode.SUCCESS, "成功", data);这里面需要定义一个类,继承IAuthenticationHandler接口,并实现AuthenticateAsync、ChallengeAsync、ForbidAsync、InitializeAsync方法if (!else。
2024-06-11 21:47:09
2065
7
原创 使用EFCore和Linq查询语句封装复杂的查询结果
其实,像这种简单的功能,做三张表的左外连接查询就能实现,没必要使用嵌套查询,因此efcore自动生成的SQL语句性能并不是最优的。这里仍然用到了linq中的连接查询,不同的是,使用了一个匿名类来保存查询结果。然后,又通过linq中的分组查询和子查询,对数据库的查询结果进行封装,将它保存到了users这个数组里面。这里用到了linq中的连接查询语法,并使用linq中的嵌套查询来封装User类中的Roles集合,生成的SQL语句如下。这里只用到了2次连接查询,没有用到任何嵌套语句,终于看到了自己想要的结果。
2024-06-10 15:08:49
671
4
原创 使用umi中的useRequest函数获取返回值中的data为空的问题
umi是一个react脚手架,最近有一个功能,需要在组件第一次渲染前请求一次,后面组件重新渲染不需要再次发送请求。要实现这种功能,我决定使用umi里面的一个hook函数,即useRequest。后来经过反复尝试,发现useRequest函数传入的第一个参数必须是一个异步函数,并且这个异步函数的返回值必须是一个包含data属性的对象,否则封装后的响应数据就获取不到。结果发现,categorys值始终为undefined,也就是说,useRequest返回对象的data属性始终为undefined。
2023-12-30 16:25:14
1168
原创 使用cmake构建Qt6.6的qt quick项目,添加应用程序图标的方法
最近,在学习qt的过程中,遇到了一个难题,不知道如何给应用程序添加图标,按照网上的方法也没有成功,后来终于自己摸索出了一个方法。其中/logo.ico代表图标的相对路径,然后另存为logo.rc文件,删除原文件,如下图所示。3、在Qt Creator里面添加logo.rc和logo.ico文件到项目当中,如图所示。1、准备一张图片作为图标,保存到工程目录下面,如logo.ico。2、使用记事本在工程目录下创建logo.txt文件,输入如下内容。其中,logo.rc就是前面创建的文件,用于配置应用图标。
2023-12-09 20:38:46
1437
1
原创 使用ant design pro出现面包屑导航和标题消失的问题
后来,我把这个项目模板用于另外一个项目的前端页面,把整个项目的文件夹复制过去,进行修改,运行以后发现,面包屑导航和标题都消失了,但原来的项目模板是可以显示面包屑导航和标题的。然后,我换了一种方式,使用git从码云上面拉取项目源码,再用npm install下载依赖包,运行以后发现,面包屑导航和标题又出现了,不知道具体原因究竟是什么。前端时间,我用ant design pro搭建了一个后台权限管理的项目模板,里面用到了PageContainer组件,默认会显示面包屑导航和标题,如图所示。
2023-11-01 11:35:40
932
1
原创 form-create-designer整合element-plus使用方法
最近在使用form-create-designer生成表单的时候遇到了很多问题和各种报错,按照官方文档的方法一步步来做,发现行不通,后来经过不断尝试,终于找到了使用方法,这里做一下总结。
2023-08-08 17:44:51
1723
1
原创 springboot2.7.6与springsecurity和JWT整合方案
新版本的springsecurity与旧版本的使用方法有点不一样,最近探索了一下springsecurity与JWT的整合方案,进行一下总结。
2023-07-25 12:51:17
1027
2
原创 springboot配置文件添加自定义配置报错解决方案
前段时间,我在springboot项目的application.yml文件里面添加了一段自定义配置,结果变成了红字,意味着报错,看着很不爽,所以在网上寻找解决方案,终于找到了一个方法。2、然后,在这个文件夹下新建一个配置文件,additional-spring-configuration-metadata.json。其中,name是自定义配置的名称,type是数据类型,description是配置的描述信息。1、首先,在resources文件夹下面新建一个文件夹,META-INF。
2023-07-20 18:15:01
479
原创 分享一个MySQL存储过程
这个案例中,就是将t_menu_btn_authority表的数据查出来,然后循环遍历游标,保存到t_menu_btn_authority_1表里面。前端时间,写了一个MySQL存储过程,用来同步表数据,可以作为参考。
2023-04-11 21:28:10
94
原创 springboot2.7.6整合springsecurity相关配置
这里面的逻辑是,获取当前已认证的用户信息,保存在securityUser对象里面。其中,filterChain方法里面定义了最核心的配置信息,包括登录接口的请求路径,用户名、密码的参数名,登录成功的处理类的对象,登录失败的处理类对象,退出的接口路径,退出时删除cookie,退出的处理类对象,还包括处理跨域的配置等。这里面的逻辑就是,根据用户名查询用户信息,如果结果为空,就抛异常,如果不为空,就把用户信息保存到securityUser里面,并返回这个对象。登录的时候,会调用这个方法。2、这是核心配置方法。
2023-01-30 15:01:56
2111
原创 Java抛出自定义异常,报java.lang.reflect.UndeclaredThrowableException: null的错误
结果运行后,报java.lang.reflect.UndeclaredThrowableException: null,而且前端并没有显示对应的异常内容。需要继承RuntimeException,不要继承Exception,即可。最近项目中使用了自定义异常,并做了全局异常处理,抛出异常的代码如下。后来发现,问题出在FebsException这个自定义异常类上。这样,项目就能正常运行,前端也能显示对应的异常内容。
2022-10-13 10:27:55
7380
1
原创 Java使用KeyStore存储AES对称加密的密钥
其中,KeyStore的类型必须设置JCEKS,否则保存SecretKey这种对称加密的密钥会报错。KeyStore类是Java当中的密钥库,专门用于存储密钥,以下代码用于生成keystore文件。
2022-09-20 14:44:53
1942
原创 Linux中springboot项目在后台启动,并加载外部配置文件命令
其中,./config/application.yml是外部配置文件的路径,log.log是日志文件。
2022-08-30 16:51:43
1439
原创 使用docker容器搭建redis集群(三主三从)
增加如上所示配置,给每个redis节点设置不同的端口号,复制并创建6个配置文件。因为docker是以host模式启动,所以要防止端口冲突。这里挂载了redis的配置文件,并且以host网络模式启动容器,给每个容器挂载不同的配置文件,以此类推,共启动6个容器。4、使用redis-cli执行cluster info和cluster nodes查看集群信息。搭建集群,其中192.168.182.128是宿主机的ip地址。3、进入其中一个容器内部,执行如下命令。1、修改redis的配置文件。......
2022-08-14 18:10:50
673
原创 使用shardingjdbc实现读写分离配置
基于MySQL主从复制实现,其中m0是mysql的主库数据源,s0是mysql的从库数据源,具体配置一定要根据shardingjdbc的版本来写,不同的版本差异很大,查看官方文档一旦选错了版本,运行出现问题,很难发现错在哪里,浪费了很多时间!...
2022-08-03 22:08:23
584
原创 使用docker容器搭建MySQL主从复制
注意,mysql的配置文件开头要加上[mysqld],我就是一开始没加这个东西导致配置怎么改都不生效,浪费了很多时间。重启容器,使配置生效。其中,master_log_file和master_log_pos分别对应上图中的File和Position。3、在/root/docker/mysql/master下创建主节点的配置文件mysql.cnf。4、在/root/docker/mysql/slave下创建从节点的配置文件mysql.cnf。尝试向主节点的表中添加记录,会自动复制到从节点上。...
2022-07-31 00:13:58
281
原创 docker容器不能远程访问的原因
今天在虚拟机里面启动了一个mysql的docker容器,发现在宿主机连接不上,只有进入容器内部才能对它进行访问,网上百度了半天,尝试各种方法都不管用,干脆死马当活马医,重启一下docker引擎试试看,使用如下命令。然后,重启容器,发现竟然可以连接上了,害我浪费了那么多时间,唉!...
2022-07-30 16:09:56
837
2
原创 shardingjdbc水平分库分表配置以及垂直分库配置
值得注意的是,使用druid连接池,连接字符串属性用url,而使用hikari连接池,连接字符串属性要用jdbc-url。2、springboot配置文件如下。
2022-07-20 22:40:09
484
原创 kafka eagle(EFAK)使用中所遇到的坑
1、从官网下载kafka eagle2.1.0,解压后得到如下目录,2、添加环境变量3、进入conf目录,修改system-config.properties文件。因为当前只有一个kafka服务器,所以设置efak.zk.cluster.alias=cluster1,就可以了。修改zookeeper的访问配置cluster1.zk.list=localhost:2181。注释cluster2和cluster3的所有相关配置。配置文件中默认使用mysql保存数据,相关配置如下结果在mysql中创建了
2022-06-04 10:54:43
3927
原创 windows下Kafka的安装配置总结
1、从官网下载kafka,解压后得到如下目录2、进入config目录,修改zookeeper.properties配置文件,设置dataDir=…/…/zk-data,zookeeper启动后会自动创建zk-data文件夹,保存所需数据。确认zookeeper的端口号配置,clientPort=2181。3、修改server.properties文件,设置advertised.listeners=PLAINTEXT://localhost:9092,在生产环境中,localhost改成服务器所在的ip地址
2022-06-04 10:10:01
973
1
原创 补充一条MySql中的sql语句,用于批量插入和更新
MyBatis中的配置文件如下<insert id="insertOrUpdateBatch"> insert into aishu_job(job_id,job_type,job_name,job_desc,client_name,client_ip) values <foreach collection="list" item="job" separator=","> (#{job.jobId},#{job.jobType},#{job.jobN
2022-05-27 10:51:26
423
原创 使用MongoDB导入Json字符串,插入文档
代码如下:String uri = "mongodb://localhost:27017";try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("testdb"); MongoCollection<JsonObject> collection = database.getCollection("test", Jso
2022-05-19 14:02:57
1002
原创 解决OpenFeign远程调用需要传递请求头的问题
这里需要配置一个Bean,代码如下@Configurationpublic class FeignConfiguration { /** * feign拦截器,设置cookie请求头 * @return */ @Bean public RequestInterceptor requestInterceptor(){ return new RequestInterceptor() { @Override
2022-05-04 15:00:07
2087
原创 补充一个md5加密的方法
所需依赖如下<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version></dep
2022-04-06 22:58:46
335
原创 Java调用webservice服务接口步骤详解
1、使用如下命令,生成webservice的Java客户端文件wsimport -s 文件目录 -p 包名 -keep wsdl发布地址生成的文件如下然后,将这些文件复制到工程目录下。2、执行如下代码,就可以调用webservice接口,得到响应数据WsSmsService smsService=new WsSmsServiceService().getWsSmsServicePort();String resXml = smsService.sendSms(xml);其中,xml是传入
2022-04-06 22:51:55
2816
原创 使用RestTemplate获取响应头中的cookie,并在请求头加上cookie
最近在做一个项目,需要使用RestTemplate发送请求,做一次远程登录,需要拿到登录后的cookie,然后加到请求头上面,再次获取数据,代码如下Map<String,Object> params=new HashMap<>();params.put("username",username);params.put("password",password);ResponseEntity<String> entity = restTemplate.postForEn
2022-03-20 21:44:22
11114
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人