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…

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

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

基于SpringBoot多数据源解决方案

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

二叉树的最大深度(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…

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

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

基于物联网设计的疫苗冷链物流监测系统

一、前言 1.1 项目开发背景 随着全球经济的发展和物流行业的不断创新&#xff0c;疫苗和生物制品的运输要求变得越来越高。尤其是疫苗的冷链物流&#xff0c;温度、湿度等环境因素的控制直接关系到疫苗的质量和效力&#xff0c;因此高效、可靠的冷链监控系统显得尤为重要。冷…

学习数据结构(1)时间复杂度

1.数据结构和算法 &#xff08;1&#xff09;数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合 &#xff08;2&#xff09;算法就是定义良好的计算过程&#xff0c;取一个或一组的值为输入&#xff0c;并产生出一个或一组…

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议&#xff0c;搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…

Oracle迁移DM数据库

Oracle迁移DM数据库 本文记录使用达梦官方数据迁移工具DTS&#xff0c;将Oracle数据库的数据迁移至达梦数据库。 1 数据准备 2 DTS工具操作步骤 2.1 创建工程 打开DTS迁移工具&#xff0c;点击新建工程&#xff0c;填写好工程信息&#xff0c;如图&#xff1a; 2.2 新建迁…

微服务(一)

文章目录 项目地址一、微服务1.1 分析User的Domian Verb和Nouns 二、运行docker和k8s2.1 Docker1. 编写dockerfile2. 创建docker image3. 运行docker使用指定端口4. 查看当前运行的镜像5. 停止当前所有运行的docker6. 删除不用的docker images7. 将本地的image上传到hub里 2.2 …

分享|instructionfine-tuning 指令微调是提高LLM性能和泛化能力的通用方法

《生成式AI导论》课程中&#xff0c;李宏毅老师提到一篇关于“ instruction fine-tuning” 指令微调的论文&#xff1a; 《Scaling Instruction-Finetuned Language Models》 摘要分享&#xff1a; 事实证明&#xff0c; 在一组以指令形式表达的数据集上微调语言模型可以提…

python生成图片和pdf,快速

1、下载安装 pip install imgkit pip install pdfkit2、wkhtmltopdf工具包&#xff0c;下载安装 下载地址&#xff1a;https://wkhtmltopdf.org/downloads.html 3、生成图片 import imgkit path_wkimg rD:\app\wkhtmltopdf\bin\wkhtmltoimage.exe # 工具路径&#xff0c;安…