首页 文章 精选 留言 我的

精选列表

搜索[事件发布],共10000篇文章
优秀的个人博客,低调大师

nginxWebUI 2.8.7 已经发布,nginx 网页配置工具

功能说明 nginxWebUI是一款图形化管理nginx配置得工具, 可以使用网页来快速配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, 静态html服务器, ssl证书自动申请、续签、配置等, 配置好后可一建生成nginx.conf文件, 同时可控制nginx使用此文件进行启动与重载, 完成对nginx的图形化控制闭环. nginxWebUI也可管理多个nginx服务器集群, 随时一键切换到对应服务器上进行nginx配置, 也可以一键将某台服务器配置同步到其他服务器, 方便集群管理. nginx本身功能复杂, nginxWebUI并不能涵盖nginx所有功能, 但能覆盖nginx日常90%的功能使用配置, 平台没有涵盖到的nginx配置项, 可以使用自定义参数模板, 在conf文件中生成配置独特的参数。 部署此项目后, 配置nginx再也不用上网各种搜索配置代码, 再也不用手动申请和配置ssl证书, 只需要在本项目中进行增删改查就可方便的配置和启动nginx。 演示地址: http://test.nginxwebui.cn:8080 用户名: admin 密码: Admin123 更新说明 1.启动时检查指定目录是否有读写权限 2.更正某些未翻译的文字 3.docker镜像底包切换为Ubuntu,支持x86_64 arm64 armv7架构部署 4.登录名密码进行传输加密 5.修复其他一些bug

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

DWSurvey 开源问卷发布全新 Vue 版本

DWSurvey从2012年至今已经随着前后端技术的更新,同步进行了产品的更新升级,目前已经有多种技术方案。 近日推出了全新的前后分离技术架构版本,大家可以去体验。 版本代号V5.0 技术特点 实现前后端分离 前端框架 Vue、Element Ui、JQuery 后端框架 Spring Boot 数据库 Mysql 后端代码https://gitee.com/wkeyuan/DWSurvey 前端代码https://gitee.com/wkeyuan/dwsurvey-vue

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

Apache Wicket 9.7.0 发布,开源 Java Web 框架

Apache Wicket 是一个开源的面向 Java 组件的 Web 应用框架,为政府、商店、大学、城市、银行、电子邮件提供商等成千上万的 Web 应用和网站提供支持。 Wicket 的开发中使用了语义版本,因此与 9.0.0 相比,9.7.0 版本没有出现 API 中断。 9.7.0 的更新内容包括: 错误修复 用户指南:'determinate' 不是动词,应改为 'to determine' FilePageStore 在 Windows 下失败 改进 添加一些 Web-socket 改进 方便使用 InSessionPageStore 作为持久性存储 使一些与数据化相关的组件更易于重复使用 任务 更新快速启动程序所使用的密钥存储。 更多详情可查看:https://wicket.apache.org/news/2021/12/01/wicket-9.7.0-released.html

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

mica-mqtt 1.2.0 发布完善集群功能

一、简介 mica-mqtt 基于 t-io 实现的简单、低延迟、高性能 的 mqtt 物联网开源组件。使用详见 mica-mqtt gitee 源码 mica-mqtt-example 模块。 mica-mqtt 更加易于集成到已有服务和二次开发,降低自研物联网平台开发成本。 二、功能 支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。 支持 websocket mqtt 子协议(支持 mqtt.js)。 支持 http rest api,http api 文档详见。 支持 MQTT client 客户端。 支持 MQTT server 服务端。 支持 MQTT 遗嘱消息。 支持 MQTT 保留消息。 支持自定义消息(mq)处理转发实现集群。 MQTT 客户端 阿里云 mqtt 连接 demo。 支持 GraalVM 编译成本机可执行程序。 支持 Spring boot 项目快速接入(mica-mqtt-spring-boot-starter)。 mica-mqtt-spring-boot-starter 支持对接 Prometheus + Grafana。 基于 redis pub/sub 实现集群,详见 mica-mqtt-broker 模块。 三、使用场景 物联网(云端) 物联网(边缘端) 群组类 IM 消息推送 四、待办 优化处理 mqtt session,以及支持部分 mqtt v5.0 新特性。 基于 easy-rule + druid sql 解析,实现规则引擎。 五、更新记录 ✨ mqtt-mqtt-core client IMqttClientConnectListener 添加 onDisconnect 方法。gitee #I4JT1D 感谢 @willianfu 同学反馈。 ✨ mica-mqtt-core server IMqttMessageListener 接口调整,不兼容老版本。 ✨ mica-mqtt-broker 调整上下行消息通道。 ✨ mica-mqtt-broker 添加节点管理,抽象业务层,方便接入,后续版本会对接规则引擎。 ✨ mica-mqtt-broker 调整默认的 Message 序列化方式,不兼容老版本。 ✨ mica-mqtt-broker 优化设备上下线,处理节点停机的情况。 ✨ 抽取 mica-mqtt-model 模块,方便后期支持消息桥接,Message 添加默认的消息序列化。 gitee #I4ECEO ✨ mica-mqtt-model 完善 Message 消息模型,方便集群。 🐛 mica-mqtt-core MqttClient 修复 ssl 没有设置,感谢 @hjkJOJO 同学反馈。 🐛 修复 websocket mqtt.js 需要拆包 gitee #I4JYJX 感谢 @Symous 同学反馈。 📝 完善 mica-mqtt-broker README.md,添加二开说明。 📝 统一 mica-mqtt server ip 文档。 📝 更新 README.md ⬆️ 升级 tio 到 3.7.5.v20211028-RELEASE AioDecodeException 改为 TioDecodeException, 六、重要更新说明 6.1 客户端 IMqttClientConnectListener 添加 onDisconnect 方法 public interface IMqttClientConnectListener { ​ /** * 监听到消息 * * @param context ChannelContext * @param isReconnect 是否重连 */ void onConnected(ChannelContext context, boolean isReconnect); ​ /** * 连接关闭前触发本方法 * * @param channelContext the channelContext * @param throwable the throwable 有可能为空 * @param remark the remark 有可能为空 * @param isRemove is removed */ void onDisconnect(ChannelContext channelContext, Throwable throwable, String remark, boolean isRemove); ​ } 6.2 服务端 IMqttMessageListener onMessage 参数调整 @FunctionalInterface public interface IMqttMessageListener { ​ /** * 监听到消息 * * @param context ChannelContext * @param clientId clientId * @param message Message */ void onMessage(ChannelContext context, String clientId, Message message); ​ } 6.3 Message 对象添加更多属性 为了以后版本更方便的对接规则引擎对 Message 中的属性进行了扩充,并且内置 DefaultMessageSerializer 序列化,基于 ByteBuffer 进行的类协议解析的方式,速度更快,报文更小。 byte[] data = DefaultMessageSerializer.INSTANCE.serialize(message); Message message1 = DefaultMessageSerializer.INSTANCE.deserialize(data); 七、Spring boot 快速接入 7.1 添加依赖 <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-mqtt-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> 7.2 服务端配置示例 mqtt: server: enabled: true # 是否开启,默认:true ip: 0.0.0.0 # 服务端 ip 默认:0.0.0.0 port: 5883 # 端口,默认:1883 name: Mica-Mqtt-Server # 名称,默认:Mica-Mqtt-Server buffer-allocator: HEAP # 堆内存和堆外内存,默认:堆内存 heartbeat-timeout: 120000 # 心跳超时,单位毫秒,默认: 1000 * 120 read-buffer-size: 8092 # 接收数据的 buffer size,默认:8092 max-bytes-in-message: 8092 # 消息解析最大 bytes 长度,默认:8092 debug: true # 如果开启 prometheus 指标收集建议关闭 websocket-enable: true # 开启 websocket 子协议,默认开启 websocket-port: 8083 # websocket 端口,默认:8083 7.3 服务端可实现接口(注册成 Spring Bean 即可) 接口 是否必须 说明 IMqttServerUniqueIdService 否 用于 clientId 不唯一时,自定义实现唯一标识,后续接口使用它替代 clientId IMqttServerAuthHandler 是 用于服务端认证 IMqttServerSubscribeValidator 是 1.1.3 新增,用于服务端订阅校验 IMqttMessageListener 是 消息监听 IMqttConnectStatusListener 是 连接状态监听 IMqttSessionManager 否 session 管理 IMqttMessageStore 集群是,单机否 遗嘱和保留消息存储 AbstractMqttMessageDispatcher 集群是,单机否 消息转发,(遗嘱、保留消息转发) IpStatListener 否 t-io ip 状态监听 7.4 Prometheus + Grafana 监控对接 得益于 t-io 良好的设计,监控指标直接对接的 t-iostat,目前支持下列指标,后期会不断完善。 支持得指标 说明 mqtt_connections_accepted 共接受过连接数 mqtt_connections_closed 关闭过的连接数 mqtt_connections_size 当前连接数 mqtt_messages_handled_packets 已处理消息数 mqtt_messages_handled_bytes 已处理消息字节数 mqtt_messages_received_packets 已接收消息数 mqtt_messages_received_bytes 已处理消息字节数 mqtt_messages_send_packets 已发送消息数 mqtt_messages_send_bytes 已发送消息字节数 关于 mica-mqtt-spring-boot-starter 更多请查看文档:https://gitee.com/596392912/mica-mqtt/tree/master/mica-mqtt-spring-boot-starter 八、普通 java 项目接入 8.1 maven 依赖 <dependency> <groupId>net.dreamlu</groupId> <artifactId>mica-mqtt-core</artifactId> <version>1.2.0</version> </dependency> 8.2 mica-mqtt 客户端 // 初始化 mqtt 客户端 MqttClient client = MqttClient.create() .ip("127.0.0.1") .port(1883) // 默认:1883 .username("admin") .password("123456") .version(MqttVersion.MQTT_5) // 默认:3_1_1 .clientId("xxxxxx") // 默认:MICA-MQTT- 前缀和 36进制的纳秒数 .connect(); // 连接 // 消息订阅,同类方法 subxxx client.subQos0("/test/#", (topic, payload) -> { logger.info(topic + '\t' + ByteBufferUtil.toString(payload)); }); // 取消订阅 client.unSubscribe("/test/#"); // 发送消息 client.publish("/test/client", ByteBuffer.wrap("mica最牛皮".getBytes(StandardCharsets.UTF_8))); // 断开连接 client.disconnect(); // 重连 client.reconnect(); // 停止 client.stop(); 8.3 mica-mqtt 服务端 // 注意:为了能接受更多链接(降低内存),请添加 jvm 参数 -Xss129k MqttServer mqttServer = MqttServer.create() // 默认:0.0.0.0 .ip("0.0.0.0") // 默认:1883 .port(1883) // 默认为: 8092(mqtt 默认最大消息大小),为了降低内存可以减小小此参数,如果消息过大 t-io 会尝试解析多次(建议根据实际业务情况而定) .readBufferSize(512) // 消息监听 .messageListener((context, clientId, message) -> { logger.info("clientId:{} message:{} payload:{}", clientId, message, ByteBufferUtil.toString(message.getPayload())); }) .debug() // 开启 t-io debug 信息日志 .start(); ​ // 发送给某个客户端 mqttServer.publish("clientId","/test/123", ByteBuffer.wrap("mica最牛皮".getBytes())); ​ // 发送给所有在线监听这个 topic 的客户端 mqttServer.publishAll("/test/123", ByteBuffer.wrap("mica最牛皮".getBytes())); ​ // 停止服务 mqttServer.stop(); 九、集群演示视频

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

BeetlSQL 3.12.2 发布,流行的 Java DAO 工具

修复了合并社区提交带来的翻页Bug,影响sqlserver的jdbc sql的翻页功能 模板SQL生成使用了SoftReferenceWriter,性能略有提高 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.12.2-RELEASE</version> </dependency> BeetlSQL 自主研发自 2015 年,目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,写起数据库访问代码特别顺滑,不亚于 MyBatis。你不想写 SQL 也好,或者想更好地写 SQL 也好,BeetlSQL 都能满足这要求,目前支持的数据库如下 传统数据库:MySQL (包括支持MySQL协议的各种数据库), MariaDB ,Oralce ,Postgres (包括支持 Postgres 协议的各种数据库), DB2 , SQL Server ,H2 , SQLite , Derby ,神通,达梦,华为高斯,人大金仓,PolarDB,GBase8s,GreatSQL 等 大数据:HBase,ClickHouse,Cassandar,Hive,GreenPlum 物联网时序数据库:Machbase,TD-Engine,IotDB SQL查询引擎:Drill,Presto,Druid 内存数据库:ignite,CouchBase 阅读文档源码和例子在线体验性能测试 例子1,内置方法,无需写SQL完成常用操作 UserEntity user = sqlManager.unique(UserEntity.class,1); user.setName("ok123"); sqlManager.updateById(user); UserEntity newUser = new UserEntity(); newUser.setName("newUser"); newUser.setDepartmentId(1); sqlManager.insert(newUser); 输出日志友好,可反向定位到调用的代码 ┏━━━━━ Debug [user.selectUserAndDepartment] ━━━ ┣ SQL: select * from user where 1 = 1 and id=? ┣ 参数: [1] ┣ 位置: org.beetl.sql.test.QuickTest.main(QuickTest.java:47) ┣ 时间: 23ms ┣ 结果: [1] ┗━━━━━ Debug [user.selectUserAndDepartment] ━━━ 例子2 使用SQL String sql = "select * from user where id=?"; Integer id = 1; SQLReady sqlReady = new SQLReady(sql,new Object[id]); List<UserEntity> userEntities = sqlManager.execute(sqlReady,UserEntity.class); //Map 也可以作为输入输出参数 List<Map> listMap = sqlManager.execute(sqlReady,Map.class); 例子3 使用模板SQL String sql = "select * from user where department_id=#{id} and name=#{name}"; UserEntity paras = new UserEntity(); paras.setDepartmentId(1); paras.setName("lijz"); List<UserEntity> list = sqlManager.execute(sql,UserEntity.class,paras); String sql = "select * from user where id in ( #{join(ids)} )"; List list = Arrays.asList(1,2,3,4,5); Map paras = new HashMap(); paras.put("ids", list); List<UserEntity> users = sqlManager.execute(sql, UserEntity.class, paras); 例子4 使用Query类 支持重构 LambdaQuery<UserEntity> query = sqlManager.lambdaQuery(UserEntity.class); List<UserEntity> entities = query.andEq(UserEntity::getDepartmentId,1) .andIsNotNull(UserEntity::getName).select(); 例子5 把数十行SQL放到sql文件里维护 //访问user.md#select SqlId id = SqlId.of("user","select"); Map map = new HashMap(); map.put("name","n"); List<UserEntity> list = sqlManager.select(id,UserEntity.class,map); 例子6 复杂映射支持 支持像mybatis那样复杂的映射 自动映射 @Data @ResultProvider(AutoJsonMapper.class) public static class MyUserView { Integer id; String name; DepartmentEntity dept; } 配置映射,比MyBatis更容易理解,报错信息更详细 { "id": "id", "name": "name", "dept": { "id": "dept_id", "name": "dept_name" }, "roles": { "id": "r_id", "name": "r_name" } } 例子7 最好使用mapper来作为数据库访问类 @SqlResource("user") /*sql文件在user.md里*/ public interface UserMapper extends BaseMapper<UserEntity> { @Sql("select * from user where id = ?") UserEntity queryUserById(Integer id); @Sql("update user set name=? where id = ?") @Update int updateName(String name,Integer id); @Template("select * from user where id = #{id}") UserEntity getUserById(Integer id); @SpringData/*Spring Data风格*/ List<UserEntity> queryByNameOrderById(String name); /** * 可以定义一个default接口 * @return */ default List<DepartmentEntity> findAllDepartment(){ Map paras = new HashMap(); paras.put("exlcudeId",1); List<DepartmentEntity> list = getSQLManager().execute("select * from department where id != #{exlcudeId}",DepartmentEntity.class,paras); return list; } /** * 调用sql文件user.md#select,方法名即markdown片段名字 * @param name * @return */ List<UserEntity> select(String name); /** * 翻页查询,调用user.md#pageQuery * @param deptId * @param pageRequest * @return */ PageResult<UserEntity> pageQuery(Integer deptId, PageRequest pageRequest); @SqlProvider(provider= S01MapperSelectSample.SelectUserProvider.class) List<UserEntity> queryUserByCondition(String name); @SqlTemplateProvider(provider= S01MapperSelectSample.SelectUs List<UserEntity> queryUserByTemplateCondition(String name); @Matcher /*自己定义个Matcher注解也很容易*/ List<UserEntity> query(Condition condition,String name); } 你看到的这些用在Mapper上注解都是可以自定义,自己扩展的 例子8 使用Fetch 注解 可以在查询后根据Fetch注解再次获取相关对象,实际上@FetchOne和 @FetchMany是自定义的,用户可自行扩展 @Data @Table(name="user") @Fetch public static class UserData { @Auto private Integer id; private String name; private Integer departmentId; @FetchOne("departmentId") private DepartmentData dept; } /** * 部门数据使用"b" sqlmanager */ @Data @Table(name="department") @Fetch public static class DepartmentData { @Auto private Integer id; private String name; @FetchMany("departmentId") private List<UserData> users; }

资源下载

更多资源
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文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册