sunrays-framework配置重构

文章目录

    • 1.common-log4j2-starter
        • 1.目录结构
        • 2.Log4j2Properties.java 新增两个属性
        • 3.Log4j2AutoConfiguration.java 条件注入LogAspect
        • 4.ApplicationEnvironmentPreparedListener.java 从Log4j2Properties.java中定义的配置读取信息
    • 2.common-minio-starter
        • 1.MinioProperties.java
    • 3.common-mybatis-plus-starter
        • 1.目录结构
        • 2.BaseEntity.java
        • 3.SunRaysBaseServiceImpl.java 删除掉事务注解
        • 4.MyBatisPlusProperties.java 统一配置
        • 5.MybatisPLusAutoConfiguration.java
        • 6.application.yml 提供通用配置
        • 7.pom.xml 排除logging
    • 4.common-openai-starter-demo
        • 1.目录结构
        • 2.OpenAiProperties.java

1.common-log4j2-starter

1.目录结构

CleanShot 2025-01-03 at 19.32.33@2x

2.Log4j2Properties.java 新增两个属性
package com.sunxiansheng.log4j2.config.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;/*** Description: 日志切面配置** @Author sun* @Create 2024/10/24 23:16* @Version 1.0*/
@ConfigurationProperties(prefix = "sun-rays.log4j2")
@Data
public class Log4j2Properties {/*** 是否开启日志切面*/private boolean logAspectEnable = true;/*** 日志存储根目录*/private String home = "./logs";/*** 日志模块(从仓库中最顶级的模块开始) 例如:sunrays-framework/sunrays-demo/common-log4j2-starter-demo*/private String module = "defaultModule";
}
3.Log4j2AutoConfiguration.java 条件注入LogAspect
package com.sunxiansheng.log4j2.config;import com.sunxiansheng.log4j2.aspectj.LogAspect;
import com.sunxiansheng.log4j2.config.properties.Log4j2Properties;
import com.sunxiansheng.log4j2.trace.TraceIdFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;/*** Description: Log4j2自动配置类** @Author sun* @Create 2024/10/24 10:36* @Version 1.0*/
@Configuration
@EnableConfigurationProperties({Log4j2Properties.class}) // 启用配置类
@Slf4j
public class Log4j2AutoConfiguration {/*** 自动配置成功日志*/@PostConstructpublic void logConfigSuccess() {log.info("Log4j2AutoConfiguration has been loaded successfully!");}/*** 条件注入LogAspect** @return*/@Bean@ConditionalOnMissingBean@ConditionalOnProperty(name = "sun-rays.log4j2.log-aspect-enable", havingValue = "true", matchIfMissing = true)LogAspect logAspect() {log.info("LogAspect 成功注入!");return new LogAspect();}/*** 条件注入链路追踪过滤器** @return*/@Bean@ConditionalOnMissingBeanTraceIdFilter traceIdFilter() {return new TraceIdFilter();}
}
4.ApplicationEnvironmentPreparedListener.java 从Log4j2Properties.java中定义的配置读取信息
package com.sunxiansheng.log4j2.listener;import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.context.logging.LoggingApplicationListener;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;/*** Description: 配置文件已加载,Environment 对象已初始化* 使用 ApplicationEnvironmentPreparedEvent 读取 application.yml 文件中的 sun-rays-log4j2.home 和 sun-rays-log4j2.module 配置** @Author sun* @Create 2024/12/13 23:53* @Version 1.0*/
public class ApplicationEnvironmentPreparedListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {@Overridepublic void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {ConfigurableEnvironment environment = event.getEnvironment();// 获取 log.home 属性并提供默认值String logHome = environment.getProperty("sun-rays.log4j2.home", "./logs");if ("./logs".equals(logHome)) {System.err.println("WARNING: sun-rays.log4j2.home 属性未设置,使用默认值: " + logHome);}// 获取 log.module 属性并提供默认值String logModule = environment.getProperty("sun-rays.log4j2.module", "defaultModule");if ("defaultModule".equals(logModule)) {System.err.println("WARNING: sun-rays.log4j2.module 属性未设置,使用默认值: " + logModule);}// 将属性设置为系统属性System.setProperty("log.home", logHome);System.setProperty("log.module", logModule);}/*** 当前监听器的启动顺序需要在日志配置监听器的前面,保证在日志文件初始化之前读取 application.yml 的配置。** @return*/@Overridepublic int getOrder() {return LoggingApplicationListener.DEFAULT_ORDER - 1;}
}

2.common-minio-starter

1.MinioProperties.java
package com.sunxiansheng.minio.config.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;/*** Description: Minio配置** @Author sun* @Create 2024/11/12 23:15* @Version 1.0*/
@ConfigurationProperties(prefix = "sun-rays.minio")
@Data
public class MinioProperties {/*** minio服务地址*/private String endpoint;/*** minio服务用户名*/private String accessKey;/*** minio服务密码*/private String secretKey;
}

3.common-mybatis-plus-starter

1.目录结构

CleanShot 2025-01-04 at 17.28.52@2x

2.BaseEntity.java
package com.sunxiansheng.mybatis.plus.base.entity;import com.baomidou.mybatisplus.annotation.TableField;
import lombok.*;import java.io.Serializable;
import java.util.Date;/*** Description: Entity基类** @Author sun* @Create 2024/10/26 10:35* @Version 1.0*/
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class BaseEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 创建者*/@TableField("create_by")  // 数据库中的字段名private String createBy;/*** 创建时间*/@TableField("create_time")  // 数据库中的字段名private Date createTime;/*** 更新者*/@TableField("update_by")  // 数据库中的字段名private String updateBy;/*** 更新时间*/@TableField("update_time")  // 数据库中的字段名private Date updateTime;
}
3.SunRaysBaseServiceImpl.java 删除掉事务注解
package com.sunxiansheng.mybatis.plus.base.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sunxiansheng.mybatis.plus.base.service.SunRaysBaseService;import java.io.Serializable;
import java.util.List;/*** Description: SunRays-Framework 基础Service实现类** @Author sun* @Create 2024/10/25 17:38* @Version 1.0*/
public class SunRaysBaseServiceImpl<M extends BaseMapper<T>, T, ID extends Serializable>implements SunRaysBaseService<T, ID> {// Mapper字段,私有化处理,不允许子类直接访问,只能通过Setter注入private M mybatisPlusMapper;// Setter方法用于注入MyBatis-Plus Mapperpublic void setMybatisPlusMapper(M mybatisPlusMapper) {this.mybatisPlusMapper = mybatisPlusMapper;}// ============================== 基于事务的CRUD方法 ==============================@Overridepublic boolean existsById(ID id) {T t = mybatisPlusMapper.selectById(id);return t != null;}@Overridepublic boolean exists(T po) {QueryWrapper<T> queryWrapper = new QueryWrapper<>(po);return mybatisPlusMapper.exists(queryWrapper);}@Overridepublic Long count(T po) {QueryWrapper<T> queryWrapper = new QueryWrapper<>(po);return mybatisPlusMapper.selectCount(queryWrapper);}@Overridepublic T listById(ID id) {return mybatisPlusMapper.selectById(id);}@Overridepublic T listOne(T po) {return mybatisPlusMapper.selectOne(new QueryWrapper<>(po));}@Overridepublic List<T> listAll(T po) {QueryWrapper<T> queryWrapper = new QueryWrapper<>(po);return mybatisPlusMapper.selectList(queryWrapper);}@Overridepublic int insertOne(T po) {return mybatisPlusMapper.insert(po);}@Overridepublic int updateById(T po) {return mybatisPlusMapper.updateById(po);}@Overridepublic int update(T po, T condition) {QueryWrapper<T> queryWrapper = new QueryWrapper<>(condition);return mybatisPlusMapper.update(po, queryWrapper);}@Overridepublic int deleteById(ID id) {return mybatisPlusMapper.deleteById(id);}@Overridepublic int deleteBatchByIds(List<ID> ids) {return mybatisPlusMapper.deleteBatchIds(ids);}@Overridepublic int delete(T po) {QueryWrapper<T> queryWrapper = new QueryWrapper<>(po);return mybatisPlusMapper.delete(queryWrapper);}
}
4.MyBatisPlusProperties.java 统一配置
package com.sunxiansheng.mybatis.plus.config.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;/*** Description: MyBatisPlus配置** @Author sun* @Create 2025/1/3 21:36* @Version 1.0*/
@ConfigurationProperties(prefix = "sun-rays.mybatis-plus")
@Data
public class MyBatisPlusProperties {/*** 是否启用sql美化*/private boolean sqlBeautyEnabled = true;
}
5.MybatisPLusAutoConfiguration.java
package com.sunxiansheng.mybatis.plus.config;import com.sunxiansheng.mybatis.plus.config.properties.MyBatisPlusProperties;
import com.sunxiansheng.mybatis.plus.interceptor.SqlBeautyInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;/*** Description: MybatisPLus自动配置类** @Author sun* @Create 2024/10/23 23:00* @Version 1.0*/
@Configuration
@EnableConfigurationProperties({MyBatisPlusProperties.class}) // 启用配置类
@Slf4j
public class MybatisPLusAutoConfiguration {/*** 自动配置成功日志*/@PostConstructpublic void logConfigSuccess() {log.info("MybatisPLusAutoConfiguration has been loaded successfully!");}/*** SQL美化拦截器*/@Bean@ConditionalOnMissingBean@ConditionalOnProperty(prefix = "sun-rays.mybatis-plus", value = "sql-beauty-enabled", havingValue = "true", matchIfMissing = true)public SqlBeautyInterceptor sqlBeautyInterceptor() {log.info("SqlBeautyInterceptor 成功注入!");return new SqlBeautyInterceptor();}
}
6.application.yml 提供通用配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource # druid连接池druid:initial-size: 10          # 初始化连接数(适当减少以节省资源)min-idle: 10              # 最小空闲连接数max-active: 50            # 最大连接数(根据业务需求调整)max-wait: 30000           # 获取连接的最大等待时间(30秒)timeBetweenEvictionRunsMillis: 60000  # 每60秒检查一次空闲连接minEvictableIdleTimeMillis: 300000    # 最小空闲时间5分钟后回收testWhileIdle: true       # 检查空闲连接是否可用testOnBorrow: true        # 检查从连接池获取的连接是否可用removeAbandoned: true     # 启用清理超时连接removeAbandonedTimeout: 180  # 连接超时时间180秒logAbandoned: true        # 记录被清理的连接日志
7.pom.xml 排除logging
<!-- jdbc -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions>
</dependency>

4.common-openai-starter-demo

1.目录结构

CleanShot 2025-01-04 at 17.45.18@2x

2.OpenAiProperties.java
package com.sunxiansheng.openai.config.properties;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;/*** Description: OpenAI配置属性类** @Author sun* @Create 2024/12/14 11:44* @Version 1.0*/
@Data
@ConfigurationProperties(prefix = "sun-rays.openai")
public class OpenAiProperties {/*** OpenAI API Key*/private String apiKey;/*** OpenAI API URL 有默认值*/private String apiUrl = "https://api.openai.com/v1/chat/completions";
}

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

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

相关文章

相互作用感知的蛋白-小分子对接模型 - Interformer 评测

Interformer 是一个应用于分子对接和亲和力预测的深度学习模型&#xff0c;基于 Graph-Transdormer 架构的模型&#xff0c;利用相互作用&#xff08;氢键、疏水&#xff09;感知的混合密度网络&#xff08;interaction-aware mixture den sity network&#xff0c; MDN&#x…

Ceisum无人机巡检直播视频投射

接上次的视频投影&#xff0c;Leader告诉我这个视频投影要用在两个地方&#xff0c;一个是我原先写的轨迹回放那里&#xff0c;另一个在无人机起飞后的地图回显&#xff0c;要实时播放无人机拍摄的视频&#xff0c;还要能转镜头&#xff0c;让我把这个也接一下。 我的天&#x…

【方法论】ChatGPT与DeepSeek的联合应用,提升工作效率的新解决方案

标题&#xff1a;ChatGPT与DeepSeek的联合应用&#xff0c;提升工作效率的新解决方案 【表格】ChatGPT与DeepSeek联合应用流程 阶段工具主要任务优势备注初稿生成ChatGPT基于用户输入生成初步内容高效、快速生成内容&#xff0c;适应多种主题适合生成长篇文章、报告、分析等验…

第29篇:Python开发进阶:数据库操作与ORM

第29篇&#xff1a;数据库操作与ORM 目录 数据库操作概述 什么是数据库数据库管理系统&#xff08;DBMS&#xff09;常见的数据库类型 Python中的数据库操作 使用sqlite3模块连接到MySQL数据库连接到PostgreSQL数据库 SQL基础 数据库基本操作表的创建与管理数据的插入、查询、…

庆祝2025到来:C++编程的新篇章

作者&#xff1a;w(&#xff9f;Д&#xff9f;)w吓洗宝宝了 发布时间&#xff1a;2025年1月19日00:00 引言 新年伊始&#xff0c;万象更新。在这充满希望的2025年&#xff0c;我们迎来了新的机遇和挑战。作为C编程爱好者的一员&#xff0c;我感到无比激动和自豪。C作为一种强…

2024年终总结——今年是蜕变的一年

2024年终总结 摘要前因转折找工作工作的成长人生的意义 摘要 2024我从国企出来&#xff0c;兜兜转转还是去了北京&#xff0c;一边是工资低、感情受挫&#xff0c;一边是压力大、项目经历少&#xff0c;让我一度找不到自己梦寐以求的工作&#xff0c;我投了一家又一家&#xff…

【漫话机器学习系列】065.梯度(Gradient)

梯度&#xff08;Gradient&#xff09; 在数学和机器学习中&#xff0c;梯度是一个向量&#xff0c;用来表示函数在某一点的变化方向和变化率。它是多变量函数的一阶偏导数的组合。 梯度的定义 设有一个标量函数 &#xff0c;它对 ​ 是可微的&#xff0c;则该函数在某一点的…

Python 合并 Excel 单元格

合并 Excel 单元格是 Excel 数据处理和表格设计中的一项常用操作。例如&#xff0c;在制作表格标题时&#xff0c;经常会将多个单元格合并&#xff0c;使标题能够跨列显示&#xff0c;更加醒目和美观。此外&#xff0c;当对数据进行分类时&#xff0c;为了使同一类别的数据在视…

基于SpringBoot多数据源解决方案

最近在学习SpringBoot的时候&#xff0c;需要同时用两个不同的数据库连接服务&#xff0c;在网上学习了之后&#xff0c;下文以连接一个MySQL数据库和一个SqlServer数据库为例。 配置数据源连接信息 在配置文件中&#xff0c;配置对应的数据库连接信息&#xff0c;相比于单数…

LLM - 大模型 ScallingLaws 的指导模型设计与实验环境(PLM) 教程(4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145323420 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与…

二叉树的最大深度(C语言详解版)

一、摘要 嗨喽呀大家&#xff0c;leetcode每日一题又和大家见面啦&#xff0c;今天要讲的是104.二叉树的最大深度&#xff0c;思路互相学习&#xff0c;有什么不足的地方欢迎指正&#xff01;好啦让我们开始吧&#xff01;&#xff01;&#xff01; 二、题目简介 给定一个二…

穿心莲内酯(andrographolide)生物合成CYP72-文献精读106

Two CYP72 enzymes function as Ent-labdane hydroxylases in the biosynthesis of andrographolide in Andrographis paniculata 两种CYP72酶在穿心莲&#xff08;Andrographis paniculata&#xff09;中作为Ent-labdane羟化酶&#xff0c;在穿心莲内酯&#xff08;andrograp…

[SaaS] 内容创意生产平台

1.即梦 2.讯飞绘镜 typemovie 3.Krea.ai 4.Pika 5.runway 6.pixVerse 7.

DiffuEraser: 一种基于扩散模型的视频修复技术

视频修复算法结合了基于流的像素传播与基于Transformer的生成方法&#xff0c;利用光流信息和相邻帧的信息来恢复纹理和对象&#xff0c;同时通过视觉Transformer完成被遮挡区域的修复。然而&#xff0c;这些方法在处理大范围遮挡时常常会遇到模糊和时序不一致的问题&#xff0…

[c语言日寄]assert函数功能详解

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

【数据结构】_链表经典算法OJ:分割链表(力扣—中等)

目录 1. 题目描述及链接 2. 解题思路 2.1 思路1 2.2 思路2 2.3 思路3&#xff08;本题采取该解法&#xff09; 3. 题解程序 1. 题目描述及链接 题目链接&#xff1a;面试题 02.04. 分割链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个链表…

基于vue和elementui的简易课表

本文参考基于vue和elementui的课程表_vue实现类似课程表的周会议列表-CSDN博客&#xff0c;原程序在vue3.5.13版本下不能运行&#xff0c;修改两处&#xff1a; 1&#xff09;slot-cope改为v-slot 2&#xff09;return background-color:rgb(24 144 255 / 80%);color: #fff; …

【Unity3D】实现Decal贴花效果,模拟战旗游戏地形效果

目录 一、基础版 二、Post Process 辉光Bloom效果 矩形渐隐 涉及知识点&#xff1a;Decal贴花、屏幕后处理Bloom、屏幕空间构建世界空间、ChracterController物体移动、Terrain地形创建 一、基础版 Unity 2019.4.0f1 普通渲染管线&#xff08;非URP、非HDRP&#xff09; UR…

kotlin内联函数——runCatching

1.runCatching作用 代替try{}catch{}异常处理&#xff0c;用于捕获异常。 2.runCatching函数介绍 参数&#xff1a;上下文引用对象为参数返回值&#xff1a;lamda表达式结果 调用runCatching函数&#xff0c;如果调用成功则返回其封装的结果&#xff0c;并可回调onSuccess函…

数据结构与算法学习笔记----求组合数

数据结构与算法学习笔记----求组合数 author: 明月清了个风 first publish time: 2025.1.27 ps⭐️一组求组合数的模版题&#xff0c;因为数据范围的不同要用不同的方法进行求解&#xff0c;涉及了很多之前的东西快速幂&#xff0c;逆元&#xff0c;质数&#xff0c;高精度等…