首页 文章 精选 留言 我的

精选列表

搜索[AI注解],共10000篇文章
优秀的个人博客,低调大师

MessagePack Java 0.6.X 不使用注解(annotations)来序列化

如果你不能添加@Message到你的定义对象中但是你还是希望进行序列化。你可以使用register 方法来在类中启用序列化对象。 如下的代码所示: MessagePack msgpack =newMessagePack();msgpack.register(MyMessage2.class); 例如,如果MyMessage2 类被包含到了外部的库中了。你没有办法比较容易的编辑源代码,添加@Message到源代码中。 register 方法能够允许为MyMessage2 自动创建一个serializer 和deserializer 对。 你可以在执行方面后序列化对象MyMessage2。 https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X

优秀的个人博客,低调大师

java配置SSM纯注解整合Redis开发高并发抢红包项目

前言: 前段时间学习点Redis,这次结合ssm实现一个高并发抢红包的项目。跟以前不一样的: 基于java配置SSM,而并非XML.为什么要这样呢?找了点网络上的答案: 在使用Spring开发时,我们经常会看到各种各样xml配置,过于繁多的xml配置显得复杂烦人。 在Spring3之后,Spring支持使用JavaConfig来代替xml配置, 这种方式也得到越来越多人的推荐,甚至在Spring Boot的项目中,基本上已经见不到xml的影子了。 抢红包的记录使用Lua保存到Redis内存中,最后再异步使用批量事务插入到Mysql。目的:Redis内存响应速度比Mysql硬盘响应速度快。 这个项目的目的也是为了实现上面的两个内容。具体的项目我已经放到Github上了:有兴趣的朋友可以下载看看,里面也都写好了注释,如果有不明白的,可以联系我QQ:1115106468 一起交流 https://github.com/jjc123/Grab_RED_PACKET/blob/master/README.md 问题:此项目中高并发为了使用Redis? 如果使用Mysql直接保存,也可以,那如何解决数据不一致的问题?可以使用乐观锁和悲观锁,此次项目中我使用的是Lua+Redis,看一下这三者区别:悲观锁:使用数据库的锁机制,并发的过程中同时只能有一个线程操作数据,其他得不到资源的线程就会被挂起,过程中会频繁得被挂起和恢复,导致cpu频繁切换现场上下文。可以通过for update语句锁行如果是使用主键查询如where id=#{id}是锁行,如果是非主键查询要考虑是否对全表加锁。可以消除数据不一致性,但是性能会下降,因为他是阻塞性的,而且需要大量的恢复过程。乐观锁:不会阻塞并发,是非阻塞锁,他是具有CAS原理,但是会有ABA问题(CAS和ABA具体百度,更详细),可以通过添加版本号,但是会导致多次请求服务失败的概率大大提高,可以通过重入的方法(按时间戳或者次数限定)来提高成功率,但是会导致大量SQL被执行,容易引发性能瓶颈。Lua+Redis:正是因为上面集中方法的局限性,所以选择Redis去实现高并发,因为Lua具有原子性,消除了数据不一致。而且Redis是保存在内存中的,响应速度极快。注意:为了不影响最后抢一个红包的响应时间,在最后一次操作数据的时候,开启一个新的线程,批量处理数据插入Mysql。而且最后还会删除Redis中批量处理的数据。 现在正是开始这个高并发的抢红包项目吧! 首先我们先配置数据库: 两个表:T_RED_PACKET存红包信息T_USER_RED_PACKET存用户抢红包信息 create table T_RED_PACKET( id int(12) not null auto_increment, user_id int(12) not null, amount decimal(16,2) not null, send_date timestamp not null, total int(12) not null, unit_amount decimal(12) not null, stock int(12) not null, version int(12) default 0 not null, note varchar(256) null, primary key clustered(id) ); create table T_USER_RED_PACKET( id int(12) not null auto_increment, red_packet_id int(12) not null, user_id int(12) not null, amount decimal(16,2) not null, grab_time timestamp not null, note varchar(256) null, primary key clustered (id) ); insert into T_RED_PACKET(user_id,amount,send_date,total,unit_amount,stock,note) values(1,200000.00,now(),20000,10.00,20000,'20万元金额,2万个小红包 每个10元'); 注意: amount :金额 要用decimal而不是double send_date :发红包时间 stock:剩余的红包数 primary key clustered (id) 是设置主键和聚集索引 题外话:Ubuntu下设置MySQL字符集为utf8 1.mysql配置文件地址/etc/mysql/my.cnf 2.在[mysqld]在下方添加以下代码[mysqld]init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshake 3.重启mysql服务sudo service mysql restart 4.检测字符集是否更新成utf8. 进入mysql,mysql -u root -p,输入show variables like '%character%' 查看字符集 Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ 配置Redis: 注意:redis的数据即使电脑关机下次打开redis的时候还会存在 进入redis的src然后./redis-server ../redis.conf &指定配置文件启动而且是后台启动再打开新的客户端:./redis-cli127.0.0.1:6379> hset red_packet_2 stock 20000 (保存红包库存 也可以用来直接修改)(integer) 0127.0.0.1:6379> hset red_packet_2 unit_amount 10 (保存单个红包库存)(integer) 0题外话: hget red_packet_2 stock hash获取该键的值 ltrim red_packet_list_2 1 0 清空list对应键的值 RPUSH red_packet_list_2 c list添加单个元素 LRANGE red_packet_list_2 0 -1 获取对应list的所有值 LLEN red_packet_list_2 获取list长度 这些外部内容已经配置好了,具体的项目我也放到了github上 有兴趣的朋友可以看看。 需要注意的是ubuntu每次开机运行项目的时候老是我的端口被占用:查看端口:sudo netstat -lnp | grep 8082杀死占用端口进程:sudo kill-9 进程号 注意:使用jdbc批量处理的时候需要:url添加rewriteBatchedStatements=true 我的测试数据:url添加rewriteBatchedStatements=true 开始保存数据 耗时:5917插入数量:20000 url不添加rewriteBatchedStatements=true 开始保存数据 耗时:13315插入数量:20000 所以批量处理一定要加上rewriteBatchedStatements=true

优秀的个人博客,低调大师

mybatis-table-modify 1.5.3,通过注解自动管理库表结构的工具

项目介绍 本项目 Fork 自A.C.Table,之前在其他项目中用到了 A.C.Table, 并对功能进行了改造。因为该 A.C.Table 项目近期发生了停更,所以打算把这些功能给开源出来,同时继续将这个项目完善下去。 项目地址:https://gitee.com/bootx/mybatis-table-modify,非常欢迎看看项目介绍留以及个Star呀🤺🤺🤺 更新说明 新增: 拆分为Maven多模块项目 新增: 支持MP的字段忽略配置 新增: 支持简单索引方式 优化: 无字段的对象不进行创建 优化: 支持配置是否开启快速失败 优化: 与MybatisPlus一起使用时拦截器拦截的问题 fix: 注释为空时触发多次更新问题 fix: @DbComment 标注在实体类上不生效问题 功能说明 支持自动创建和更新数据库表结构 支持指定表的名称、字符集、引擎类型、注释等信息 支持指定表字段的类型、排序、非空、自增、默认值、长度等信息 支持配置索引,包括指定字段、类型、注释等,可以快速索引 支持多种更新模式:创建和更新表、只创建不更新、删除后重新创建、不进行任何操作 路线图 1.5.1 主要目标:调整项目结构,去除除表维护相关的其他功能,代码暂时只适配 Spring Boot 项目 1.5.2 主要目标:拆分为 Maven 多模块项目,为后期非 Spring Boot 的项目接入做准备 1.5.3 主要目标 拆分为Maven多模块项目,支持非Spring Boot的项目接入 支持MP的字段忽略配置 支持简单索引方式(MySql),与标准索引无法一起使用 新增追加模式 空对象不进行创建 1.5.x 目标: 支持 SQL Server 数据库的表维护 支持 Oracle 数据库的表维护 支持达梦数据库的表维护 提供接入其他类型数据库的插件机制 1.6.x 目标: 支持非 Spring 中间件的项目接入 支持多数据源中间件 使用说明 添加 pom 依赖 <dependency> <groupId>cn.bootxe</groupId> <artifactId>mybatis-table-modify-mysql-boot-starter</artifactId> <version>${latest.version}</version> </dependency> 最新版本 配置要建表的路径 无论是使用 MyBatis 还是 MyBatis Plus,需要保证项目中的mapper被扫描到,否则会报错无法启动,项目中mapper文件所在的路径为classpath*:cn/bootx/mybatis/table/modify/impl/*/mapper/*TableModifyMapper.xml mybatis-table: # 更新类型 update-type: create # 扫描包路径, 可以用 ,和 ; 分隔 scan-package: cn.bootx.**.entity # 是否开启快速失败模式, 出现错误项目直接中止启动 fail-fast: false 🥂 Bootx 项目合集 Bootx-Platform 单体版脚手架 Bootx-Cloud 微服务版脚手架 Dax-Pay 支付开发平台 Mybatis-Table-Modify 数据库表结构管理 Bpm-Plus 工作流开发平台 🍻 鸣谢 感谢 JetBrains 提供的免费开源 License: 🍷License Apache License Version 2.0

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册