第3章 配置与服务
1 CoreCms.Net.Configuration.AppSettingsHelper
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
namespace CoreCms.Net.Configuration
{
/// <summary>
/// 【应用设置助手--类】
/// <remarks>
/// 摘要:
/// 该类中的方法成员,通过1个指定的根节点中1指定的子节点,获取该子节点所对应的值。
/// </remarks>
/// </summary>
public class AppSettingsHelper
{
#region 拷贝构造方法与变量
/// <summary>
/// 【配置】
/// <remarks>
/// 摘要:
/// .NetCore框架内置配置接口实例(存储着当前程序中所有*.json文件中的数据)。
/// </remarks>
/// </summary>
static IConfiguration Configuration { get; set; }
/// <summary>
/// 【拷贝构造方法】
/// <remarks>
/// 摘要:
/// 通过拷贝构造方法,对.NetCore框架内置配置接口实例(存储着当前程序中所有*.json文件中的数据)。
/// </remarks>
/// </summary>
public AppSettingsHelper(string contentPath)
{
string Path = "appsettings.json";
Configuration = new ConfigurationBuilder().SetBasePath(contentPath).Add(new JsonConfigurationSource { Path = Path, Optional = false, ReloadOnChange = true }).Build();
}
#endregion
/// <param name="sections">数组实例,该实例存储着1个指定的根节点及其1指定的子节点。</param>
/// <summary>
/// 【获取内容】
/// <remarks>
/// 摘要:
/// 通过1个指定的根节点中1指定的子节点,获取该子节点所对应的值。
/// </remarks>
/// <returns>
/// 返回:
/// 1指定的子节点所对应的值。
/// </returns>
/// </summary>
public static string GetContent(params string[] sections)
{
try
{
if (sections.Any())
{
return Configuration[string.Join(":", sections)];
}
}
catch (Exception) { }
return "";
}
}
}
2 CoreCms.Net.Configuration.AppSettingsConstVars
using SqlSugar.Extensions;
namespace CoreCms.Net.Configuration
{
/// <summary>
/// 【应用设置格式化--类】
/// <remarks>
/// 摘要:
/// 获取1个指定的根节点中1指定的子节点,获取该子节点所对应的值,最后把该值赋值给该类中的属性成员。
/// </remarks>
/// </summary>
public class AppSettingsConstVars
{
#region 全局地址================================================================================
/// <summary>
/// 【后端管理地址】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取后端管理地址子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string AppConfigAppUrl = AppSettingsHelper.GetContent("AppConfig", "AppUrl");
/// <summary>
/// 【系统接口地址】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取系统接口地址子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string AppConfigAppInterFaceUrl = AppSettingsHelper.GetContent("AppConfig", "AppInterFaceUrl");
#endregion
#region 数据库================================================================================
/// <summary>
/// 【数据库连接字符串】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取数据库连接字符串子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string DbSqlConnection = AppSettingsHelper.GetContent("ConnectionStrings", "SqlConnection");
/// <summary>
/// 【数据库类型】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取数据库类型子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string DbDbType = AppSettingsHelper.GetContent("ConnectionStrings", "DbType");
#endregion
#region redis================================================================================
/// <summary>
/// 【redis分布式数据库连接字符串】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取redis分布式数据库连接字符串子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string RedisConfigConnectionString = AppSettingsHelper.GetContent("RedisConfig", "ConnectionString");
/// <summary>
/// 【启用redis分布式数据库缓存?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用redis分布式数据库缓存子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly bool RedisUseCache = AppSettingsHelper.GetContent("RedisConfig", "UseCache").ObjToBool();
/// <summary>
/// 【启用redis分布式数据库执行定时任务?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用redis分布式数据库执行定时任务子节点所对应的值。
/// 说明:
/// redis分布式数据库一般也能用于自动触发执行当前程序中自定义的计划任务。
/// </remarks>
public static readonly bool RedisUseTimedTask = AppSettingsHelper.GetContent("RedisConfig", "UseTimedTask").ObjToBool();
#endregion
#region AOP================================================================================
/// <summary>
/// 【启用事务横切?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用事务横切子节点所对应的值。
/// </remarks>
public static readonly bool TranAopEnabled = AppSettingsHelper.GetContent("TranAOP", "Enabled").ObjToBool();
#endregion
#region Jwt授权配置================================================================================
/// <summary>
/// 【JwtBearer身份认证秘钥】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取JwtBearer身份认证秘钥子节点所对应的值。
/// 说明:
/// 为所有令牌(Token)字符串进行加密操作时,提供数据支撑的“秘钥”字符串。
/// </remarks>
/// </summary>
public static readonly string JwtConfigSecretKey = AppSettingsHelper.GetContent("JwtConfig", "SecretKey");
/// <summary>
/// 【JwtBearer身份认证签发机关】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取JwtBearer身份认证签发机关子节点所对应的值。
/// 说明:
/// 用于生成所有令牌(Token)字符串实例,提供数据支撑的“签发机关”。
/// </remarks>
/// </summary>
public static readonly string JwtConfigIssuer = AppSettingsHelper.GetContent("JwtConfig", "Issuer");
/// <summary>
/// 【JwtBearer身份认证订阅者】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取JwtBearer身份认订阅者关子节点所对应的值。
/// 说明:
/// 用于生成所有令牌(Token)字符串实例,提供数据支撑的“订阅者”。
/// </remarks>
/// </summary>
public static readonly string JwtConfigAudience = AppSettingsHelper.GetContent("JwtConfig", "Audience");
#endregion
#region Cors跨域设置================================================================================
/// <summary>
/// 【Cors跨域策略名称】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取Cors跨域策略名称子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string CorsPolicyName = AppSettingsHelper.GetContent("Cors", "PolicyName");
/// <summary>
/// 【启用Cors跨域?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用Cors跨域子节点所对应的值。
/// 说明:
/// 是否应用所有的IP,如设置为true,则取消跨域限制。
/// </remarks>
/// </summary>
public static readonly bool CorsEnableAllIPs = AppSettingsHelper.GetContent("Cors", "EnableAllIPs").ObjToBool();
/// <summary>
/// 【Cors跨域IP集】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取Cors跨域IP集子节点所对应的值。
/// 说明:
/// 在启用跨域限制时,所允许前端App的域名,注意:IP集中和IIS部署时,最好不要使用8080端口,因为前端App启动时的默认端口一般为:8080,从因前后程序使用同1个端口而造成异常。
/// </remarks>
/// </summary>
public static readonly string CorsIPs = AppSettingsHelper.GetContent("Cors", "IPs");
#endregion
#region Middleware中间件================================================================================
/// <summary>
/// 【启用Ip限流自定义中间件?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用Ip限流自定义中间件子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly bool MiddlewareIpLogEnabled = AppSettingsHelper.GetContent("Middleware", "IPLog", "Enabled").ObjToBool();
/// <summary>
/// 【启用记录请求与返回数据自定义中间件?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用记录请求与返回数据自定义中间件子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly bool MiddlewareRequestResponseLogEnabled = AppSettingsHelper.GetContent("Middleware", "RequestResponseLog", "Enabled").ObjToBool();
/// <summary>
/// 【启用用户访问记录日志自定义中间件?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用用户访问记录日志自定义中间件子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly bool MiddlewareRecordAccessLogsEnabled = AppSettingsHelper.GetContent("Middleware", "RecordAccessLogs", "Enabled").ObjToBool();
/// <summary>
/// 【用户访问记录-过滤ip自定义中间件】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取用户访问记录-过滤ip自定义中间件子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string MiddlewareRecordAccessLogsIgnoreApis = AppSettingsHelper.GetContent("Middleware", "RecordAccessLogs", "IgnoreApis");
#endregion
#region 支付================================================================================
/// <summary>
/// 【微信支付回调】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取微信支付回调子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string PayCallBackWeChatPayUrl = AppSettingsHelper.GetContent("PayCallBack", "WeChatPayUrl");
/// <summary>
/// 【微信退款回调】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取微信退款回调子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string PayCallBackWeChatRefundUrl = AppSettingsHelper.GetContent("PayCallBack", "WeChatRefundUrl");
/// <summary>
/// 【支付宝支付回调】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取支付宝支付回调子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string PayCallBackAlipayUrl = AppSettingsHelper.GetContent("PayCallBack", "AlipayUrl");
/// <summary>
/// 【支付宝退款回调】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取支付宝退款回调子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string PayCallBackAlipayRefundUrl = AppSettingsHelper.GetContent("PayCallBack", "AlipayRefundUrl");
#endregion
#region 易联云打印机================================================================================
/// <summary>
/// 【启用易联云打印机?】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取启用易联云打印机子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly bool YiLianYunConfigEnabled = AppSettingsHelper.GetContent("YiLianYunConfig", "Enabled").ObjToBool();
/// <summary>
/// 【易联云打印机ID】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取易联云打印机ID子节点所对应的值。
/// 说明:
/// 一般由开发者所申请的易联云打印机服务的编号值。
/// </remarks>
/// </summary>
public static readonly string YiLianYunConfigClientId = AppSettingsHelper.GetContent("YiLianYunConfig", "ClientId");
/// <summary>
/// 【易联云打印机密钥】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取易联云打印机ID子节点所对应的值。
/// 说明:
/// 一般由开发者所申请的易联云打印机服务的密钥。
/// </remarks>
/// </summary>
public static readonly string YiLianYunConfigClientSecret = AppSettingsHelper.GetContent("YiLianYunConfig", "ClientSecret");
/// <summary>
/// 【易联云打印机设备号】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取易联云打印机设备号子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string YiLianYunConfigMachineCode = AppSettingsHelper.GetContent("YiLianYunConfig", "MachineCode");
/// <summary>
/// 【易联云打印机终端密钥】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取易联云打印机终端密钥子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string YiLianYunConfigMsign = AppSettingsHelper.GetContent("YiLianYunConfig", "Msign");
/// <summary>
/// 【易联云打印机名称】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取易联云打印机名称子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string YiLianYunConfigPrinterName = AppSettingsHelper.GetContent("YiLianYunConfig", "PrinterName");
/// <summary>
/// 【易联打印机设置联系方式】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取易联云打印机设置联系方式子节点所对应的值。
/// </remarks>
/// </summary>
public static readonly string YiLianYunConfigPhone = AppSettingsHelper.GetContent("YiLianYunConfig", "Phone");
#endregion
#region HangFire定时任务================================================================================
/// <summary>
/// 【HangFire登录账号】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取HangFire登录账号子节点所对应的值。
/// 说明:
/// HangFire一般用于自动触发执行当前程序中自定义的计划任务。
/// </remarks>
/// </summary>
public static readonly string HangFireLogin = AppSettingsHelper.GetContent("HangFire", "Login");
/// <summary>
/// 【HangFire登录密码】
/// <remarks>
/// 摘要:
/// 从appsettings.json文件中,获取HangFire登录密码子节点所对应的值。
/// 说明:
/// HangFire一般用于自动触发执行当前程序中自定义的计划任务。
/// </remarks>
/// </summary>
public static readonly string HangFirePassWord = AppSettingsHelper.GetContent("HangFire", "PassWord");
#endregion
}
}
3 重构CoreCms.Net.Core.Config.SqlSugarSetup
using CoreCms.Net.Configuration;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using SqlSugar.IOC;
using System.Reflection;
namespace CoreCms.Net.Core.Config
{
/// <summary>
/// 【SqlSugarCore中间件启动--类】
/// <remarks>
/// 摘要:
/// 通过该类中的方法成员,把SqlSugarCore中间件依赖注入到.Net(Core)框架内置依赖注入容器中。
/// </remarks>
/// </summary>
public static class SqlSugarSetup
{
/// <param name="services">.Net(Core)框架内置依赖注入容器实例。</param>
/// <summary>
/// 【配置服务】
/// <remarks>
/// 摘要:
/// 通过该方法成员,把SqlSugarCore中间件依赖注入到.Net(Core)框架内置依赖注入容器中。。
/// </remarks>
/// </summary>
public static void AddSqlSugarSetup(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
//注入 ORM
SugarIocServices.AddSqlSugar(new IocConfig()
{
//数据库连接
ConnectionString = AppSettingsConstVars.DbSqlConnection,
//判断数据库类型
DbType = AppSettingsConstVars.DbDbType == IocDbType.MySql.ToString() ? IocDbType.MySql : IocDbType.SqlServer,
//是否开启自动关闭数据库连接-//不设成true要手动close
IsAutoCloseConnection = true,
});
//设置参数
services.ConfigurationSugar(db =>
{
db.CurrentConnectionConfig.InitKeyType = InitKeyType.Attribute;
//说明:CoreShop的程序是数据库优先,即必须先生成指定的数据库,本人更为喜欢代码优先所以进行了以下定义来实现代码优先。
//如果指定的数据库软件中不存在指定的数据库,则自动生成该数据库。
db.DbMaintenance.CreateDatabase();
//通过反射操作,获取领域文件夹中的所有实体的类型实例。
//直接获取指定项目中所有类的类型实例。
Assembly assembly = Assembly.Load("CoreCms.Net.Model");
//通过过滤操作,获取领域文件夹中的所有实体的类型实例。
//注意:“Where”过滤操作中“ c.Namespace”最好使用“Contains”,而不要使用“==”。
Type[] _typeArray = assembly.GetTypes()
.Where(c => c.Namespace.Contains("CoreCms.Net.Model.Entities") && c.IsClass)//过滤操作。
.ToArray();
//如果数据库软件对自动生成的数据库支持自动备份操作,则通过下行语句在自动生成该数据库中,根据当前项目中的实体类自动生成相应的表。
//注意:SetStringDefaultLength(stringDefaultLength)必须定义在下行语句中,否则在自动生成表时,该约束定义将不会被映射到表的字段上。
db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(_typeArray);
});
}
}
}
4 CoreCms.Net.Web.Admin\appsettings.json
{
"ConnectionStrings": {
"DbType": "SqlServer", //数据库将支持两种模式【SqlServer,MySql】
"SqlConnection": "Server=.;uid=zz;pwd=zz;Database=CoreShop230628;MultipleActiveResultSets=true;pooling=true;min pool size=5;max pool size=32767;connect timeout=20;Encrypt=True;TrustServerCertificate=True;"
//SqlServer数据库连接字符串,需要开启数据库连接复用【MultipleActiveResultSets=true】
// 如果采用容器化部署Service 要写成mysql的服务名,否则写地址
//"SqlConnection": "Server=127.0.0.1;Port=3306;Database=CoreShop;Uid=CoreShop;Pwd=CoreShop;CharSet=utf8;pooling=true;SslMode=None;Allow User Variables=true;Convert Zero Datetime=True;Allow Zero Datetime=True;"
// Mysql数据库链接字符串,请保持后面的属性别少。经过测试,mysql版本需要5.7或以上
}
}
5 CoreCms.Net.Web.Admin\Program.cs
//把持久化的配置文件“appsettings.json”中的所有数据实例化到“AppSettingsHelper”实例中。
builder.Services.AddSingleton(new AppSettingsHelper(builder.Environment.ContentRootPath));
6 CoreCms.Net.IServices.IBaseServices<T>
7 CoreCms.Net.Services.BaseServices<T>
8 CoreCms.Net.IServices.ISysRoleServices
9 CoreCms.Net.Services.SysRoleServices
10 重构CoreCms.Net.Core.AutoFac.AutofacModuleRegister
using Autofac;
using System.Reflection;
namespace CoreCms.Net.Core.AutoFac
{
/// <summary>
/// 【Autofac模型注入--类】
/// <remarks>
/// 摘要:
/// 通过该类中的方法成员把指定的程序集(*.dll)依赖注入到Autofac容器中。
/// </remarks>
/// </summary>
public class AutofacModuleRegister : Autofac.Module
{
/// <param name="builder">Autofac依赖注入容器实例。</param>
/// <summary>
/// 【载入】
/// <remarks>
/// 摘要:
/// 通过该方法把指定程序集中的所有实例依赖注入到Autofac容器中。
/// </remarks>
/// </summary>
protected override void Load(ContainerBuilder builder)
{
//获取当前程序启动项程序集(*.dll)文件所在目录(文件夹)的绝对路径字符串(这里特指“..\bin\Debug\net7.0”)。
var basePath = AppContext.BaseDirectory;
#region 带有接口层的服务注入
var servicesDllFile = Path.Combine(basePath, "CoreCms.Net.Services.dll");
var repositoryDllFile = Path.Combine(basePath, "CoreCms.Net.Repository.dll");
if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile)))
{
var msg = "Repository.dll和Services.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。";
throw new Exception(msg);
}
// 获取 Service.dll 程序集服务,并注册
var assemblysServices = Assembly.LoadFrom(servicesDllFile);
//支持属性注入依赖重复
builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces().InstancePerDependency()
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
// 获取 Repository.dll 程序集服务,并注册
var assemblysRepository = Assembly.LoadFrom(repositoryDllFile);
//支持属性注入依赖重复
builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces().InstancePerDependency()
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
#endregion
}
}
}
11 CoreCms.Net.Web.Admin.Controllers.SysRoleController
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel;
using CoreCms.Net.IServices;
namespace CoreCms.Net.Web.Admin.Controllers
{
[ApiController]
[Route("[controller]/[action]")]
public class SysRoleController : ControllerBase
{
#region 拷贝构造方法与变量
private readonly ISysRoleServices _sysRoleServices;
/// <summary>
/// 构造函数
/// </summary>
public SysRoleController(ISysRoleServices sysRoleServices)
{
_sysRoleServices = sysRoleServices;
}
#endregion
#region 获取列表============================================================
[HttpPost]
[Description("获取列表")]
public async Task</*AdminUiCallBack*/ bool> GetPageList()
{
//获取数据
var list = await _sysRoleServices.QueryPageAsync(null, "");
return true;
}
#endregion
}
}

对以上功能更为具体实现和注释见:230728_003CoreShop230628(配置与服务)。
相关文章:
第3章 配置与服务
1 CoreCms.Net.Configuration.AppSettingsHelper using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; namespace CoreCms.Net.Configuration { /// <summary> /// 【应用设置助手--类】 /// <remarks> /// 摘要&#x…...
Arcgis之 KML/KMZ文件转shp
一般我们在Goole Earth上勾画的区域导出后都为KML或者KMZ格式的,但无法在arcgis等软件上直接应用,故需进行一定的转换 1.打开ArcMap,选择ArcToolbox->Conversion Tools->From KML->KML To Layer 得到如下结果(由于本KML…...
python绘制3D条形图
文章目录 数据导入三维条形图bar3d 数据导入 尽管在matplotlib支持在一个坐标系中绘制多组条形图,效果如下 其中,蓝色表示中国,橘色表示美国,绿色表示欧盟。从这个图就可以非常直观地看出,三者自2018到2022年的GDP变化…...
计算从曲线的起点到param指定的点的曲线段的长度
以下方法只能用于继承于AcDbCurve的类型 主要使用两个接口 派生类中此函数的实现应返回, 并将endParam设置为曲线端点的参数。 如果成功则返回Acad::eOk。 默认情况下, 该函数返回Acad::eNotImplemented。 virtual Acad::ErrorStatus getEndParam(double&endParam) cons…...
POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 数据压缩和打包处理与数据更新
开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…...
linux----源码安装如何加入到系统服务中(systemclt)
将自己源码安装的软件加入到系统服务中。例如nginx,mysql 就以nginx为例,源码安装,加入到系统服务中 使用yum安装nginx,自动会加入到系统服务 16-Linux系统服务 - 刘清政 - 博客园 (cnblogs.com) 第一步: 源码安装好nginx之后࿰…...
Unity 使用UnityWebRequest 读取存档 (IOS只能这样做)
打IOS包的时候发现的,不能使用正常的IO流读取,不然会读取不到数据,只能使用UnityWebRequest 读取 代码如下 public IEnumerator ReadArchive(Action<bool, string> ac, string filepath ""){UnityWebRequest request Unit…...
Caused by: org.springframework.beans.factory.
问题解决:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name IUserRepository defined in app.test4.OpportunityMatching.IUserRepository defined in EnableJpaRepositories declared on JpaRepositoriesRegistrar.Enable…...
【docker 安装】 与【docker-compose 安装】
不同的操作系统需要不同的docker安装文件:具体下载位置: Docker: https://download.docker.com/linux/static/stable/ docekr-compose:https://github.com/docker/compose/releases 1. 验证客户机器是否有docker 和docker-compose docker -…...
意外:WPS编程新工具,不用编程,excel用户:可以不用VBA啦
来来来,拓宽一下视野! 别总以为excel和WPS只能用VBA编程,也别总是想着ACCESS这些老生常谈的工具。其实对于电子表格高级用户来讲,不会VBA,不用ACCESS,也一样可以解决复杂问题或者高级应用。 尤其是WPS用户…...
GAMES101 笔记 Lecture12 Geometry3
目录 Mesh Operations: Geometry ProcessingMesh Subdivision (曲面细分)Mesh Simplification(曲面简化)Mesh Regularization(曲面正则化) Subdivision(细分)Loop Subdivision(Loop细分)如何来调整顶点位置呢?Loop Subdivision Result (Loop细分的结果) Catmull-Cla…...
Java的内部类
内部类的概念 在 Java 中,内部类是定义在另一个类或者方法的内部的类。内部类可以访问外部类的所有成员和方法,同时可以被外部类和其他类所访问。内部类可以分为四种类型:静态内部类、成员内部类、局部内部类和匿名内部类。 静态内部类 静…...
电赛培训(高频电路类赛题)学习总结
此篇文章基于全国电子设计大赛培训网的官网的高频电路类赛题总结的知识点。 高频电路赛题的相关理论知识点 (1)高频电路的单位 a.1kHz1000Hz不等于1KHz(大写的K是错误的) b.S是西门子,电导的单位,s是秒&…...
Rust ESP32C3开发
Rust ESP32C3开发 系统开发逐步使用Rust语言,在嵌入式领域Rust也逐步完善,本着学习Rust和ESP32的目的,搭建了ESP32C3的环境,过程中遇到了不少问题,予以记录。 ESP-IDF开发ESP32 这一部分可跳过,是使用C开…...
【Spring Cloud Gateway 新一代网关】—— 每天一点小知识
💧 S p r i n g C l o u d G a t e w a y 新一代网关 \color{#FF1493}{Spring Cloud Gateway 新一代网关} SpringCloudGateway新一代网关💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客&a…...
Java 中的关键字 final 和 static
一、关键字 final final 修饰符可以用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。 1.1 final 变量 final 有"最后的、最终的"的含义…...
Spring Cloud OpenFeign 全教程
1. 声明式 REST 客户端: Feign Feign 是一个声明式的 Web Service 客户端。它使编写 Web Service 客户端更容易。要使用 Feign,需要创建一个接口并对其进行注解。它有可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解。Feign 还支持可插拔的…...
LLaMA模型论文《LLaMA: Open and Efficient Foundation Language Models》阅读笔记
文章目录 1. 简介2.方法2.1 预训练数据2.2 网络架构2.3 优化器2.4 高效的实现 3.论文其余部分4. 参考资料 1. 简介 LLaMA是meta在2023年2月开源的大模型,在这之后,很多开源模型都是基于LLaMA的,比如斯坦福大学的羊驼模型。 LLaMA的重点是比…...
了解Unity编辑器 之组件篇Effects(十一)
一、Halo:是一个可用于游戏对象的特效组件,它可以在对象周围添加一个光晕效果 Color属性: 用于设置Halo的颜色。你可以通过选择颜色面板中的颜色来指定光晕的外观。选择适当的颜色可以使光晕与游戏场景中的其他元素相匹配或突出显示。 Size属性: 用于设…...
笔记整理-SpringBoot中的扩展点
SpringBoot有哪些扩展点 aware 感知类接口 aware系列的扩展接口,允许spring应用感知/获取特定的上下文环境或对象。bean生命周期控制类接口 bean生命周期类的接口,可以控制spring容器对bean的处理。app生命周期控制类接口 app生命周期控制类接口…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
