- 06 SpringBoot 配置文件详解-application.yaml
KinMan谨漫
springbootjavaspring
SpringBoot提供了大量的自动配置,极大地简化了spring应用的开发过程,当用户创建了一个SpringBoot项目后,即使不进行任何配置,该项目也能顺利的运行起来。当然,用户也可以根据自身的需要使用配置文件修改SpringBoot的默认设置。SpringBoot默认使用以下2种全局的配置文件,其文件名是固定的。application.propertiesapplication.ymlapp
- python学习笔记
浅夏入秋^_^
Python编程语言python学习开发语言
python学习笔记第1-3章基础知识https://www.jetbrains.com/help/pycharm/小技巧:如果在编辑器中未选择任何内容,按⌘C可将文本光标处的整行复制到剪贴板。按两次⌃Space可调用代码补全功能的特殊变体,这样您可以从没有在当前文件中声明的命名空间补全XML标记名称。如果命名空间尚未声明,则会自动生成声明。使用代码|检查代码可对整个项目或自定义范围运行代码分析,
- linux 监控 开源软件,利用开源软件打造Linux应用软件平台之监控子系统
呆呆小逗比
linux监控开源软件
它山之石,可以攻玉。监控子系统是每一个高级应用软件平台必不可少的一个子系统,这个子系统应具备的基本功能包括:各进程的运行状态,系统资源的占用状况,重要配置文件的改变情况,重要目录的异动,常用服务的对外提供情况等。一种可行的实现方法是自己写一大堆的脚本,然后加入crond服务去定时做这些监控,另一条捷径是利用开源软件Monit。本文介绍如何利用Monit去快速构建一个具备上述功能的软件平台的监控子系
- android自定义控件不显示,解决Android Studio Design界面不显示layout控件的问题
叶江流
android自定义控件不显示
AndroidStudio更新到3.1.3后,发现拖到Design中的控件在预览界面中不显示;解决办法:在Styles.xml中的parent="..."中的Theme前添加Base@color/colorPrimary@color/colorPrimaryDark@color/colorAccent补充知识:AndroidStudioXML文件之style标签详解前言:Android的样式一般定
- 从零开始,掌握Django Web开发
ivwdcwso
开发django前端pythonweb开发
1.Django简介Django是一个强大的PythonWeb框架,它使开发人员能够快速构建安全、可扩展的Web应用程序。让我们深入了解Django的特性和优势。1.1什么是Django?Django是一个高级PythonWeb框架,于2005年首次发布。它由新闻网站的开发人员创建,旨在处理快节奏的新闻编辑室环境中的挑战。Django遵循"不要重复自己"(DRY)和"约定优于配置"的原则。Djan
- Jetson Nano部署TensorRT加速的YOLO V8
Hylan_J
学习项目YOLOgithubarm开发
JetsonNano部署YOLOV8刷JetPack镜像Step1:格式化SD卡Step2:下载镜像文件Step3:烧录镜像文件Python环境配置Solution1:更改默认的Python环境Solution2:使用conda管理Python环境YOLOV8部署Step1:源码下载Step2:trtexec环境变量设置Step3:pt权重文件导出为ONNX格式Step4:ONNX文件生成engi
- Spring boot面试题----Spring Boot核心注解有哪些
指尖下的技术
Java面试题springboot后端java
一、@SpringBootApplication功能:这是一个组合注解,相当于同时使用了@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。它是SpringBoot应用程序的入口点,通常添加在应用程序的主类上,例如:@SpringBootApplicationpublicclassMyApplication{publicstatic
- Goland项目内引入字符串标红的解决办法
liynet
java前端服务器
当我在go项目内引入某个模块比如:import("log""xxx.com/bird/models")时,Goland会提示错误并标红这个引用,实际这个引用就走go.mod中配置着,但Goland就是不认,问了AI才知道解决办法如此简单,如下图:打开GoLand的设置(Settings/Preferences)导航到Go->GoModules,确保"EnableGomodulesintegrati
- 生产环境中常用的设计模式
Dolphin_Home
生产环境_场景抽象代码规范SpringBoot设计模式
生产环境中常用的设计模式设计模式目的使用场景示例单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点-日志记录器-配置管理器工厂方法模式定义一个创建对象的接口,让子类决定实例化哪个类-各种工厂类(如视频游戏工厂模式创建不同类型的角色)抽象工厂模式解决一个系列的工厂,用于创建一组相关或依赖的对象-GUI组件库-汽车组装线建造者模式分离对象的构建过程和表示,允许逐步构造一个复杂对象-构建复杂对
- 艾编程coding老师课堂笔记:SpringBoot源码深度解析
艾编程前端技术
spring编程语言
思想:有道无术,术尚可求,有术无道,止于术!Spring开源框架,解决企业级开发的复杂性的问题,简化开发AOP,IOCSpring配置越来多,配置不方便管理!Javaweb---Servlet+tomcat+Struct2SpringMVCSPRINGboot.....所有的技术框架:从一个复杂的场景慢慢的衍生出来一种规范!简单的配置!==SpringBoot:自动配置!==Springboot怎
- SSH config
MaximusCoder
大学ssh经验分享
背景起因就是我发现大部分人对SSH只会基本的sshuser@ip的方式登录服务器,至多再会个配置免密,而对SSHconfig几乎不了解。事实上SSH可以灵活批量配置服务器信息,配置跳板等等。本文努力普及一些使用细节,希望有一天大家都熟练了SSHconfig,以后我就可以直接给别人发送SSHconfig配置项而不需要作任何解释了。SSHconfigSSHconfig作用就是可以把SSH相关的信息都记
- spring-mvc源码分析v3.3.0
想花
springmvcjava
分析下springboot内嵌tomcat启动流程,即springboot-mvcorg.springframework.bootspring-boot-starter-web3.3.0环境信息Java22SpringBootv3.3.0ApacheTomcat/10.1.24spring-boot-starter-web3.3.0测试项目主要文件结构:@RestControllerpublicc
- Android控件底色蓝色无法修改、高版本无法安装app、找不到xml、找不到java文件、目录不显示等问题
轩哥.
问题解决记录android
一、控件底色蓝色问题在修改控件时发现无法修改颜色运行时呈现蓝色如下图:解决方法:去res/values/themes/下修改成:parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge"如果你的应用使用了这个主题,那么它将遵循MaterialDesign的指导原则,并且会适配系统的日/夜模式设置。二、高版本无法安装app当安装时出
- Ubuntu系统,root账户设置远程登录
笑醉踏歌行
系统运维ubuntulinux运维
要允许在Ubuntu系统上通过SSH以root用户身份进行远程登录,需要进行如下设置步骤1:设置root用户密码如果尚未设置root用户的密码,首先需要设置一个密码。在本地终端或者通过已有的非root用户SSH登录后执行:sudopasswdroot系统会提示你输入新的密码,并确认一次。步骤2:编辑SSH配置文件打开SSH守护程序(sshd)的配置文件:sudonano/etc/ssh/sshd_
- linux 安装jupyter教程 自定义配置 jupyter忘记密码重置密码
0x8g1T9E
dockerpythonDMMLDL
第一步检查Python环境python-V第二步通过pip安装jupyterpipinstalljupyter 第三步生成jupyter配置文件#root客户:jupyternotebook--generate-config--allow-root#非root客户jupyternotebook--generate-config值得一提的是:windows环境下,并没有jupyter_noteboo
- springboot毕设 基于java的在线学习交流平台 程序+论文
明思计算机毕设
springboot课程设计后端
本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和全球教育资源的日益丰富,在线学习已成为人们获取知识、提升技能的重要途径。特别是在近年来,受各种因素影响,线上教育需求激增,促使在线学习交流平台不断涌现。这些平台旨在打破传统教育的时空限制,为学习者提供更加灵活、个性化的学习体验。然而,当前市场上的在线学
- 参数校验 Spring Validation框架
唯手熟
javaspringboot
后端参数校验解决:校验前端传入的参数是否符合预期1、引入依赖使用SpringValidation框架 org.springframework.boot spring-boot-starter-validation 3.1.4 2、校验类型直接属性校验对象属性校验2.1直接属性校验在参数接收时,直接使用正则表达式对属性进行限制。控制层添加注解@Va
- 高级java每日一道面试题-2025年01月16日-框架篇[Mybatis篇]-说说Mybatis的缓存机制?
java我跟你拼了
java每日一道面试题javamybatis缓存一级缓存二级缓存工作原理全局配置
如果有遗漏,评论区告诉我进行补充面试官:说说Mybatis的缓存机制?我回答:在Java高级面试中,MyBatis的缓存机制是一个重要的话题。MyBatis是一个流行的Java持久化框架,它提供了强大的数据库访问能力和灵活的SQL映射配置。为了提高查询性能并减少数据库访问次数,MyBatis引入了缓存机制。下面将对MyBatis的缓存机制进行详细解释:MyBatis缓存机制概述MyBatis的缓存
- 【宝藏级】PyEcharts 超详细的使用指南
奇怪的大象
前端htmlechartspython前端
Python可视化神器-pyecharts手册pyecharts简介优点:安装:官方文档:pyecharts快速开始在`Notebook`中创建一个条形图:链式调用:配置选项:全局配置项`AnimationOpts`:画图动画配置项`InitOpts`:初始化配置项`ToolBoxFeatureOpts`和`ToolboxOpts`:工具箱配置项`TitleOpts`:标题配置项`DataZoom
- 使用spring boot写一个学生管理系统
db_hkq_2039
springboot后端java
目录前言二、博客地址三、实现步骤3.1创建SpringBoot项目3.2连接数据库3.3代码层级3.3.1model层3.3.2Repository层3.3.3service层3.3.4控制层controller3.3.5视图层3.3.6BootStrap4.1登录4.2增4.3删4.4查4.5改4.6分页总结前言学生管理系统是一种常见的应用程序,它可以用于管理学生、学院、班级等信息,是许多企业和
- 【星闪开发连载】WS63E开发板开箱与程序烧录
神一样的老师
星闪技术物联网windows
前几天一直在外地,今天才有机会拿到开发板。此次星闪体验官活动,每人两款板子,一款是星闪派物联网开发套件,另一款是单独一个核心板。物联网套件的配置和润和的智能家居配置差不多,看上去连底板都是一样的,只有核心板不同。套件和核心板配置正好组成一队星闪通信设备。目前基于星闪的手机还很少见,海思也没有开放手机侧的资料,所以暂时只能做星闪设备之间的测试。给开发板加电之后,发现并没有像家居套件那样有演示程序,所
- 安装 Erlang:一步步教你安装和配置 Erlang 环境
AzProcessgroup
erlangc#开发语言
Erlang是一种功能强大的编程语言和运行时环境,特别适用于构建高可靠性、并发性和分布式性能的应用程序。在本文中,我将为您提供安装和配置Erlang环境的详细步骤。步骤1:下载Erlang安装包首先,让我们从Erlang官方网站下载适用于您的操作系统的最新版本的Erlang安装包。您可以在https://www.erlang.org/downloads找到可用的安装包。选择与您的操作系统和体系结构
- 简化云上操作,阿里云客户端——您的云端全能助手
运维云计算客户端
背景当您创建了云服务器或容器实例之后,以下操作往往是非常常见的:连接并登陆到服务器,大展身手一番,比如配置基础开发环境、部署应用服务、查看各种性能指标等等;可见连接并登陆到服务器是多么高频而基础的操作。而在使用业界通用的登陆工具时,这样的场景是否熟悉。场景一登陆密码忘了,试了几个常用的密码都是错的,奔溃啊。还好我吃一堑,长一智,把每台实例的密码经过加密算法加密后,记在了宝贝笔记本上,并放在了神秘加
- springMVC---resultful风格
sin2201
springMVCmvc
目录一、创建项目pom.xml二、配置文件1.web.xml2.spring-mvc.xml三、图解四、controller一、创建项目pom.xml4.0.0com.qcbyspringMVC141.0-SNAPSHOTwar88UTF-85.0.2.RELEASEorg.springframeworkspring-context${spring.version}org.springframew
- IDEA--Python
connorcheng
开发环境intellij-ideajavaide
1.安装Python插件打开IntelliJIDEA,进入File->Settings(或者直接按Ctrl+Alt+S)。在弹出的窗口中,选择Plugins。在搜索框中输入Python,找到并安装Python插件。2.配置Python解释器要在IntelliJIDEA中开发Python,需要配置Python解释器。您可以使用系统安装的Python解释器,也可以配置虚拟环境。使用系统Python解释
- 云原生周刊:Docker 的替代方案
云计算
开源项目推荐DitoDito是一个用Go语言编写的高级Layer7反向代理服务器,提供灵活的中间件支持、后端连接的自定义证书处理、动态配置重载,以及与Redis的分布式缓存和速率限制功能。其主要特性包括高效处理HTTP和HTTPS请求、支持WebSocket代理、动态配置热重载、分布式速率限制和缓存、以及自定义TLS证书管理等。Dito的设计注重灵活性和可扩展性,允许用户根据自身需求进行定制,满足
- Ubuntu 16.04.3 LTS操作系统安全加固
-一脸懵逼-
ubuntu安全linux
Ubuntu16.04.3LTS操作系统安全加固操作系统下载链接:https://releases.ubuntu.com/16.04/ubuntu-16.04.3-desktop-amd64.iso操作系统版本:Ubuntu16.04.3LTS安全基线策略1.配置口令复杂度策略限制口令为8位以上数字、字母、特殊字符组合;2.配置登录失败处理策略,连续登录失败5次后锁定用户10分钟;3.配置不仅仅通
- outlook在XP系统无法链接服务器,解决win10专业版下Outlook将不会响应或无法连接
weixin_39516956
•点击邮件•单击显示配置文件。•在TE103999994中,打开“应用程序”菜单,选择“控制面板”>“邮件”>“显示配置文件”。•选择添加,然后在配置文件名称框中,•键入配置文件名称,然后单击“确定”。•输入您在Outlook中使用的主要电子邮件帐户的电子邮件地址和密码,然后按照以下步骤创建配置文件。•转到显示配置文件对话框•选择“提示要使用的配置文件”。•启动Outlook并选择新的配置文件。如
- next-auth v5 结合 Prisma 实现登录与会话管理
曹天骄
javascript
1.安装依赖npminstallnext-authprisma@prisma/client2.配置Prisma模型在prisma/schema.prisma文件中定义User和Account模型(next-authv5推荐使用自定义模型)。modelUser{idString@id@default(uuid())emailString@uniquenameString?imageString?ha
- 华为路由器/交换机配置Console口AAA认证以及Telnet登录
qq_2661138306
信息与通信网络协议
一、Console口登录Console口是路由器/交换机的本地管理接口,通常用于设备初始配置和管理。本文将介绍console登录的两种配置方式1、密码模式配置成这种模式后Console登录只需要输入密码。配置方法一[Huawei]user-interfaceconsole0 [Huawei-ui-console0]authentication-modepassword Pleaseconfigur
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include