sunrays-framework 微调

文章目录

    • 1.common-log4j2-starter 动态获取并打印日志存储的根目录的绝对路径以及应用的访问地址
        • 1.目录
        • 2.log4j2.xml 配置LOG_HOME
        • 3.LogHomePrinter.java 配置监听器
        • 4.spring.factories 注册监听器
        • 5.测试
          • 1.common-log4j2-starter-demo 配置
          • 2.启动测试
    • 2.common-minio-starter 删除桶名的配置参数
        • 1.MinioProperties.java
        • 2.删除
    • 3.common-mybatis-plus-starter 修改代码生成器
        • 1.修改ServiceImpl的Java模板,调用框架提供的方法使用super而不是this
        • 2.导出模板
    • 4.common-test-starter 排除logging

1.common-log4j2-starter 动态获取并打印日志存储的根目录的绝对路径以及应用的访问地址

1.目录

CleanShot 2024-11-16 at 16.30.44@2x

2.log4j2.xml 配置LOG_HOME
        <!-- 日志存储的根目录 --><Property name="LOG_HOME">./logs</Property>
3.LogHomePrinter.java 配置监听器
package com.sunxiansheng.log4j2.listener;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;import java.io.File;
import java.net.InetAddress;/*** 动态获取并打印日志存储的根目录的绝对路径以及应用的访问地址** @author sunxiansheng*/
public class LogHomePrinter implements ApplicationListener<ApplicationReadyEvent> {private static final Logger logger = LoggerFactory.getLogger(LogHomePrinter.class);@Overridepublic void onApplicationEvent(ApplicationReadyEvent event) {try {// 获取 LoggerContextLoggerContext context = (LoggerContext) LogManager.getContext(false);// 获取 Log4j2 的当前配置Configuration config = context.getConfiguration();// 获取 LOG_HOME 属性值String logHome = config.getStrSubstitutor().replace("${LOG_HOME}");if (logHome == null || logHome.isEmpty()) {logger.warn("未配置 LOG_HOME 属性,使用默认值或未定义!");} else {// 获取 LOG_HOME 的绝对路径File logHomeDir = new File(logHome).getCanonicalFile();logger.info("日志存储的根目录为: {}", logHomeDir.getAbsolutePath());}// 获取 Spring 环境Environment environment = event.getApplicationContext().getEnvironment();// 获取访问地址String ip = InetAddress.getLocalHost().getHostAddress();String port = environment.getProperty("server.port", "8080");String contextPath = environment.getProperty("server.servlet.context-path", "");if (!contextPath.startsWith("/")) {contextPath = "/" + contextPath;}// 打印访问路径logger.info("应用访问地址: http://{}:{}{}", ip, port, contextPath);} catch (Exception e) {logger.error("获取日志存储根目录或应用访问地址时发生错误", e);}}
}
4.spring.factories 注册监听器
org.springframework.context.ApplicationListener=\
com.sunxiansheng.log4j2.listener.LogHomePrinter
5.测试
1.common-log4j2-starter-demo 配置
log:aspect:enable: true # 开启自定义的日志切面trace:enable: true # 开启自定义的日志追踪
server:port: 8082
2.启动测试

CleanShot 2024-11-16 at 16.33.29@2x

CleanShot 2024-11-16 at 16.33.50@2x

2.common-minio-starter 删除桶名的配置参数

1.MinioProperties.java

CleanShot 2024-11-16 at 15.17.13@2x

2.删除

CleanShot 2024-11-16 at 15.19.22@2x

3.common-mybatis-plus-starter 修改代码生成器

1.修改ServiceImpl的Java模板,调用框架提供的方法使用super而不是this
## 引入宏定义
$!{define.vm}## 设置保存名称与保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "ServiceImpl.java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))## 拿到主键
#if(!$tableInfo.pkColumn.isEmpty())#set($pk = $tableInfo.pkColumn.get(0))
#end## 包声明
#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.service.impl;
#end## 导入相关类
import com.sunxiansheng.mybatis.plus.base.service.impl.SunRaysBaseServiceImpl;
import $!{tableInfo.savePackageName}.convert.${tableInfo.name}Converter;
import $!{tableInfo.savePackageName}.entity.po.${tableInfo.name};
import $!{tableInfo.savePackageName}.entity.req.${tableInfo.name}Req;
import $!{tableInfo.savePackageName}.entity.vo.${tableInfo.name}Vo;
import $!{tableInfo.savePackageName}.mapper.${tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.mapper.plus.${tableInfo.name}PlusMapper;
import com.sunxiansheng.mybatis.plus.page.PageResult;
import com.sunxiansheng.mybatis.plus.page.SunPageHelper;
import $!{tableInfo.savePackageName}.service.${tableInfo.name}Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;/*** $!{tableInfo.comment}($!{tableInfo.name})Service实现类:实现业务逻辑* 注意:使用this来调用框架自动生成的方法,使用注入的xxxMapper来调用手写的方法** @author $!{author}* @since $!time.currTime()*/
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableInfo.name}ServiceImplextends SunRaysBaseServiceImpl<$!{tableInfo.name}PlusMapper, $!{tableInfo.name}, $pk.type>implements $!{tableInfo.name}Service {// ============================== 注入Mapper ==============================@Resourceprivate $!{tableInfo.name}Mapper ${tool.firstLowerCase($!{tableInfo.name})}Mapper;// ============================== 框架生成(auto-generation) ==============================/*** 构造器注入父类的MyBatis-Plus Mapper** @param mybatisPlusMapper 父类需要的Plus Mapper*/public $!{tableInfo.name}ServiceImpl($!{tableInfo.name}PlusMapper mybatisPlusMapper) {super.setMybatisPlusMapper(mybatisPlusMapper);}// ============================== 框架生成(auto-generation) ==============================// ============================== 自定义Service实现 ==============================@Override@Transactional(rollbackFor = Exception.class) // 开启事务public PageResult<$!{tableInfo.name}Vo> listPage($!{tableInfo.name}Req $!tool.firstLowerCase($!{tableInfo.name})Req) {// req转换为po$!{tableInfo.name} po = $!{tableInfo.name}Converter.INSTANCE.convertReq2Po($!tool.firstLowerCase($!{tableInfo.name})Req);// 分页查询PageResult<$!{tableInfo.name}Vo> paginate = SunPageHelper.paginate($!tool.firstLowerCase($!{tableInfo.name})Req.getPageNo(),$!tool.firstLowerCase($!{tableInfo.name})Req.getPageSize(),// 调用框架自动生成的方法使用super.xxx !!!() -> super.count(po),(offset, limit) -> {// 调用自定义的方法使用注入的xxxMapper.xxx !!!// 查询数据,并转换为voList<$!{tableInfo.name}> ${tool.firstLowerCase($!{tableInfo.name})}List =${tool.firstLowerCase($!{tableInfo.name})}Mapper.queryPage(po, offset, limit);return $!{tableInfo.name}Converter.INSTANCE.convertPoList2VoList(${tool.firstLowerCase($!{tableInfo.name})}List);});return paginate;}
}
2.导出模板

CleanShot 2024-11-16 at 16.53.58@2x

4.common-test-starter 排除logging

CleanShot 2024-11-16 at 16.56.57@2x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch上

安装ElasticSearch Lucene&#xff1a;Java语言的搜索引擎类库&#xff0c;易扩展&#xff1b;高性能&#xff08;基于倒排索引&#xff09;Elasticsearch基于Lucene&#xff0c;支持分布式&#xff0c;可水平扩展&#xff1b;提供Restful接口&#xff0c;可被任何语言调用Ela…

element-ui textarea备注 textarea 多行输入框

发现用这个组件&#xff0c;为了给用户更好的体验&#xff0c;要加下属性 1. 通过设置 autosize 属性可以使得文本域的高度能够根据文本内容自动进行调整&#xff0c;并且 autosize 还可以设定为一个对象&#xff0c;指定最小行数和最大行数。:autosize"{ minRows: 3, ma…

.netframwork模拟启动webapi服务并编写对应api接口

在.NET Framework环境中模拟启动Web服务&#xff0c;可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器&#xff0c;或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…

路由环路的产生原因与解决方法(1)

路由环路 路由环路就是数据包不断在这个网络传输&#xff0c;始终到达不了目的地&#xff0c;导致掉线或者网络瘫痪。 TTL &#xff08;生存时间&#xff09;&#xff1a;数据包每经过一个路由器的转发&#xff0c;其数值减1&#xff0c;当一个数据包的TTL值为0是&#xff0c;路…

Leetcode3097:或值至少为 K 的最短子数组 II

题目描述&#xff1a; 给你一个 非负 整数数组 nums 和一个整数 k 。 如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k &#xff0c;那么我们称这个数组是 特别的 。 请你返回 nums 中 最短特别非空 子数组的长度&#xff0c;如果特别子数组不存在&#xff0c;那么返…

Android CustomTextField

在 Compose 中开发用户界面时&#xff0c;需要处理输入框和键盘的交互&#xff0c;例如在键盘弹出时调整布局位置&#xff0c;避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能。 功能概述 本例实现了一个简单的输入框。当输入框获得焦点或输入文字时&…

《CPython Internals》阅读笔记:p221-p231

《CPython Internals》学习第 12天&#xff0c;p221-p231 总结&#xff0c;总计 11 页。 一、技术总结 无。 二、英语总结(生词&#xff1a;2) 1.at a time idiom. separately(单独地) in the specified groups(一次)。示例&#xff1a; (1) I can only do one thing at …

WORD转PDF脚本文件

1、在桌面新建一个文本文件&#xff0c;把下列代码复制到文本文件中。 On Error Resume Next Const wdExportFormatPDF 17 Set oWord WScript.CreateObject("Word.Application") Set fso WScript.CreateObject("Scripting.Filesystemobject") Set fdsf…

Alluxio数据流转方案在联通智网的应用

分享嘉宾 陈得泳 - 中国联通大数据平台 SRE 工程师&#xff0c;致力于基于开源生态构建稳定、高效、安全、低成本的大数据集群。 观看完整分享回放 业务背景 统一底座和安全基座位于不同IDC&#xff1b;统一底座&#xff1a;承接 O 域全域网络数据&#xff0c;包括移动网信…

搜维尔科技提供完整的人形机器人解决方案以及训练系统

问题&#xff1a;从灵巧手收集的数据是否也会在大脑大模型中训练&#xff0c;或是在专门用于手部控制的单独模型中训练&#xff1f; Q: If the data collected from dexterous hands will be trained as well in the brain large model, or in a separate model dedicated for…

打造餐饮品牌的产品矩阵:美味与策略的完美融合-中小企实战运营和营销工作室博客

打造餐饮品牌的产品矩阵&#xff1a;美味与策略的完美融合-中小企实战运营和营销工作室博客 在竞争激烈的餐饮市场中&#xff0c;打造一个成功的餐饮品牌&#xff0c;关键在于构建一个强大且富有吸引力的产品矩阵。这不仅涉及到研发出令人垂涎欲滴的美味佳肴&#xff0c;更需要…

前端大数据处理 - Web Worker

前言 先了解一个概念&#xff1a;页面假死 浏览器有GUI渲染线程与JS引擎线程&#xff0c;这两个线程是互斥的关系 当js有大量计算时&#xff0c;会造成 UI 阻塞&#xff0c;出现界面卡顿、掉帧等情况&#xff0c;严重时会出现页面卡死的情况&#xff0c;俗称假死 在前端开发…

无缝过渡:将 Ansys 子结构模型转换为 Nastran

了解如何将 Ansys 子结构模型无缝转换为 Nastran&#xff0c;以满足有效载荷动态模型要求 Ansys 子结构模型的优势 Ansys 子结构模型为从事大型装配体结构分析和仿真的工程师和分析师提供了多项优势。 这些模型通过将复杂结构划分为更小、更易于管理的子结构&#xff0c;可以…

C++中string笔记杂谈

string 类库中的size_type是一种怎样的自定义类型 在 C 的 string 类库中&#xff0c;size_type 是一种无符号整数类型&#xff0c;用于表示字符串的大小&#xff08;长度&#xff09;。 它被定义为能够容纳字符串可能的最大长度的无符号整数类型。 比如说&#xff0c;如果一…

【Flink系列】4. Flink运行时架构

4. Flink运行时架构 4.1 系统架构 Flink运行时架构——Standalone会话模式为例 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager是一个Flink集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。也就是说&#xff0c;每个应用都应该被…

AI刷题-饭馆菜品选择问题、构造回文字符串问题

目录 一、饭馆菜品选择问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、构造回文字符串问题 问题描述 测试样例 解题思路&#xff1a; 解题思路 具体步骤 最终代码&#xff1a;…

使用redis-cli命令实现redis crud操作

项目场景&#xff1a; 线上环境上redis中的key影响数据展示&#xff0c;需要删除。但环境特殊没办法通过 redis客户端工具直连。只能使用redis-cli命令来实现。 操作步骤&#xff1a; 1、确定redis安装的服务器&#xff1b; 2、找到redis的安装目录下 ##找到redis安装目…

31.Java Callable 接口与 FutureTask 类

一、Callable 接口 1、概述 目前我们学习了有两种创建线程的方法&#xff0c;一种是通过继承 Thread 类&#xff0c;另一种是 通过实现 Runnable 接口创建线程&#xff0c;但是&#xff0c;Runnable 缺少的一项功能是&#xff0c;当线程 终止时&#xff08;即 run 方法完成时…

Springboot项目Jackson支持多种接收多种时间格式

前言 在springboot项目中经常会使用Jackson框架,当前端给后端传输时间类型时,我们一般需要先配置好时间格式,否则后端无法接收。以下是一些配置方法 统一配置 spring:jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss这种配置就是要求前端统一传输的格式是yyyy-…

讲一下ZooKeeper的持久化机制?

大家好&#xff0c;我是锋哥。今天分享关于【讲一下ZooKeeper的持久化机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲一下ZooKeeper的持久化机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务&…