当前位置: 首页 > news >正文

SpringBoot学习笔记(二)

配置文件分类

SpringBoot中4级配置文件
1级:file:config/application.yaml 【最高】
2级:file:application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml 【最低】

总结:

1.项目文件分为4种:

  • 项目类路径配置文件:服务于开发人员本机开发于测试
  • 项目类路径config目录种配置文件:服务于项目经理整体调控
  • 工程路径配置文件:服务于运维人员配置涉密线上环境
  • 工程路径config目录中配置文件:服务于运行经理整体调控

2.多层级配置文件间的属性采用叠加并覆盖的形式作用于程序


自定义配置文件

通过启动参数加载配置文件(无需书写配置文件扩展名)

Edit Configrations->Configuration->Program arguments

--spring.config.name=ebank

通过启动参数加载指定文件路径下的配置文件时可以加载多个配置
Edit Configrations->Configuration->Program arguments

--spring.config.location=classpath:/ebank.properties,classpath:/ebank-server.properties

自定义配置文件-重要说明

  • 单服务器项目:使用自定义配置文件需求较低
  • 多服务器项目:使用自定义配置文件需求较高,将所有配置放置在一个目录中,统一管理
  • 基于SpringCloud技术,所有的服务器将不再设置配置文件,而是通过配置中心进行设定,动态加载配置信息

小结:
1.配置文件可以修改名称,通过启动参数设定
2.配置文件可以修改路径,通过启动参数设定
3.微服务开发中配置文件通过配置中心进行设置

总结:

1.SpringBoot在开发和运行环境均支持临时参数修改工程配置
2.SpringBook支持4级配置文件,应用于开发与线上环境进行配置的灵活设置
3.SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
4.基于微服务开发时配置文件将使用配置中心进行管理


多环境开发(yaml版)

spring:profiles:active: pro---   
spring:profiles: proserver:port: 80---   
spring:profiles: devserver:port: 81
---   
spring:profiles: testserver:port: 82
spring:profiles:active: pro---   
server:port: 80spring:   过时格式profiles: pro
spring:profiles:active: pro---   
server:port: 80spring:   推荐格式config:activate:on-profiles: pro

总结:

多环境开发需要设置若干种常用环境,例如开发、生产、测试环境


多环境开发多文件版(yaml版)

多环境开发(YAML版)多配置文件格式

1.主启动配置文件application.yml

spring:profiles:active: dev

2.环境分类配置文件application-pro.yml

server:port: 80

3.环境分类配置文件application-dev.yml

server:port: 81

4.环境分类配置文件application-test.yml

server:port: 82

多环境开发配置文件书写技巧(一)

  • 主配置文件中设置公共配置(全局)
  • 环境分类配置文件中常用于设置冲突属性(局部)

多环境开发多文件版(properties版)

多坏境开发(Properties版)多配置文件格式

主启动配置文件application.properties

spring.profiles.active=pro

环境分类配置文件application-pro.properties

spring.port=80

环境分类配置文件application-dev.properties

spring.port=81

环境分类配置文件application-test.properties

spring.port=82

总结:

properties文件多环境配置仅支持多文件格式


多环境分组管理

多环境开发独立配置文件书写技巧(二)

根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下:

  • application-devDB.yml
  • application-devRedis.yml
  • application-devMVC.yml

使用include属性再激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

spring:profiles:active: devinclude: devDB,devRedis,devMVC

配置文件加载顺序:devDB,devRedis,devMVC,dev 后面的配置文件覆盖前面的配置文件

注意事项
当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

从SpringBoot2.4版开始使用group属性替代include属性,降低了配置书写量

使用group属性定义多种主环境与子环境的包含关系

spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC

配置文件加载顺序:devDB,devRedis,devMVC

总结:

多环境开发使用froup属性设置配置文件分组,便于线上维护管理


多环境开发控制

Maven与SpringBoot多环境兼容

1.maven中设置多环境属性

<profiles><profile><id>dev_env</id><properties><profile.active>dev</profile.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>pro_env</id><properties><profile.active>pro</profile.active></properties></profile><profile><id>test_env</id><properties><profile.active>pro</profile.active></properties></profile>
</profiles>

2.SpringBoot中引用Maven属性

spring:profiles:active: @profile.active@"dev": devDB,devMVC"pro": proDB,proMVC

3.执行Maven打包指令,并在生产的boot打包文件.jar文件中查看对应信息

总结:

1.当Maven与SpringBoot同时对多环境进行控制时,以Maven为主,SpringBoot使用@…@占位符读取Maven对应的配置属性值

2.基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效

日志

日志基础

步骤:代码中使用日志工具记录日志

1.Maven设置多环境属性

@RestController
@RequestMapping("/books")
public class BookController extends BaseController {private static final Logger log = LoggerFactory.getLogger(BookController.class);@GetMappingpublic String getById(){System.out.println("springboot is running...");log.debug("debug...");log.info("info...");log.warn("warn...");log.error("error...");return "springboot is running...";}
}

2.设置日志输出级别

# 开启debug模式,输出调试信息,常用于检查系统运行状况
debug: true# 设置日志级别,root表示根节点,即整体应用日志级别
logging:level:root: debug

3.设置日志组,控制指定包对应的日志输出级别,也可以直接控制指定包对应的日志输出级别

logging:# 设置日志组group:# 自定义组名,设置当前组中所包含的包ebank: com.luxifa.controllerlevel:root: warn# 为对应组设置日志级别ebank: debug# 为对应包设置日志级别com.luxifa.controller: debug

总结:

1.日志用于记录开发调试与运维过程消息
2.日志的级别共6种,通常使用4种即可,分别是DEBUG,INFO,WARN,ERROR
3.可以通过日志组或代码包的形式进行日志显示级别的控制


快速创建日志对象

使用lombok提供的注解@Slf4j简化开发,减少日志对象的声明操作

@Slf4j
@RestController
@RequestMapping("/books")
public class BookController {@GetMappingpublic String getById() {System.out.println("springboot is running...");log.debug("debug info...");log.info("info info...");log.warn("warn info...");log.error("error info...");return "springboot id running...";}
}

总结:

基于lombok提供的@Slf4j注解为类快速添加日志对象


日志输出格式控制

2023-02-20 16:39:40.334 INFO 2336 --- [       main] com.luxifa.SpringbootLogApplication Started SpringbootLogApplication in 1.281 seconds(JVM...)

2023-02-20 16:39:40.334 : 时间

INFO:级别

2336:PID 进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序

main:所属线程

com.luxifa.SpringbootLogApplication:所属类/接口名 当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除

Started SpringbootLogApplication in 1.281 seconds(JVM…):日志信息

设置日志输出格式

logging:pattern:console: "%d - %m%n"
  • %d”: 日期
  • %m:消息
  • %n:换行
logging:pattern:console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"

总结:

日志输出格式设置规则


日志文件

文件记录日志(运维实用)

设置日志文件

logging:file:name: server.log

日志文件详细配置

loging:file:name: server.loglogback:rollingpolicy:max-file-size: 3KBfile-name-pattern: server.%d{yyyy-MM-dd}.%i.log

总结:

1.日志记录到文件
2.日志文件格式配置


热部署

手动启动热部署

开启开发者工具

<denpendency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</denpendency>

激活热部署:Ctrl+F9 或者 Build->Build Project

关于热部署

  • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
  • 重载(Reload):jar包,加载位置base类加载器

总结:

1.开启开发者工具后启用热部署
2.使用构建项目操作启动热部署(Ctrl+F9)
3.热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源

自动启动热部署

步骤:

1.setting->Build,Excution,Deployment->Compiler->Build project automaticaly 勾选

2.Ctrl+Alt+Shift+/ 快捷键 然后在弹出的页面中 Registry->compiler.automake.allow.when.app.running 勾选

激活方式:Idea失去焦点5秒后启动热部署

热部署范围配置

默认不触发重启的目录列表

  • /META-INF/maven
  • /META-INF/reesources
  • resources
  • static
  • public
  • templates

自定义不参与重启排除项

devtools:restart:# 设置不参与热部署的文件或文件夹excude: public/**,static/**

关闭热部署

方式一:

devtools:restart:# 设置不参与热部署的文件或文件夹excude: public/**,static/**,config/application.ymlenbled:false

方式二:

设置高优先级属性禁用热部署

public static void main(String[] args) {System.setProperty("spring.devtools.restart.enabled","false");SpringApplication.run(SSMPAllication.class);
}

配置高级

@Confiturationproperties

使用@ConfigurationProperties为第三方绑定属性

application.yml中:

datasource:driverClassName: com.mysql.jdbc.Driver123

主程序:

@SpringBootApplication
public class SpringbootConfigurationApplication {@Bean@ConfigurationProperties(prefix = "datasource")public DruidDataSource datasource(){DruidDataSource ds = new DruidDataSource();return ds;}public static void main(String[] args) {ConfiguravleApplicationContext ctx = SpringApplication.run(SpringbootConfigurationApplication.class,args);DruidDataSource ds = ctx.getBean(DruidDataSource.class);System.out.println(ds);}
}

控制台:

com.mysql.jdbc.Driver123

@EnableConfigurationProperties注解可以将使用@ConfigurationProperties注解对应的类加入Spring容器

application.yml中:

servers:ipAddress: 192.168.0.1port: 2848timeout: -1
//Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String ipAddress;private int port;private long timeout;
}
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class DemoApplication {public static void main(String[] args) {ConfigurableApplicationContext ctx = SpringApplication.run(SpringbootApplication.class,args);}}

注意事项:

@EnableConfigurationProperties与@Component不能同时使用


解除使用@ConfigurationProperties注释警告

Spring Boot Configuration Annotation Processor not configuref       Open Docementation...

pom.xml中添加如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

宽松绑定/松散绑定

@ConfigurationProperties绑定属性支持属性名宽松绑定

不管是驼峰模式、下划线模式、中划线模式、常量模式都能绑定

驼峰模式:

servers:ipAddress: 192.168.1.1port: 2345timeout: -1

下划线模式:

servers:ip_address: 192.168.1.1port: 2345timeout: -1

中划线模式:

servers:ip-address: 192.168.1.1port: 2345timeout: -1

常量模式:

servers:IP_ADDRESS: 192.168.1.1port: 2345timeout: -1
//Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String ipAddress;private int port;private long timeout;
}
@SpringBootApplication
@EnableConfigurationProperties(ServerConfig.class)
public class SpringbootConfiurationApplication {public static void main(String[] args) {SpringApplication.run(SpringbootConfigurationApplication.class,args);}
}

注意事项:

宽松绑定不支持注解@Value引用单个属性的方式
@ConfigurationProperties(prefix = “servers”) 绑定前缀命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符

总结:

1.@ConfigurationProperties绑定属性支持属性名宽松绑定
2.@value注解不支持松散绑定
3.绑定前缀命名规则


常用计量单位绑定

常用计量单位

SpringBoot支持JDK8提供的时间与空间计量单位

servers:ipAddress: 192.168.0.2port: 2345timeout: -1serverTimeOut: 3dataSize: 10
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {private String ipAddress;private int port;private long timeout;@DurationUnit(ChronoUnit.MINUTES)private Duration serverTimeOut;@DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize;
}

数据校验

bean属性校验

步骤:开启Bean数据校验

servers:ipAddress: 192.168.0.2port: 2345timeout: -1

1.添加JSR303规范坐标与Hibernate校验框架对应坐标

<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId>
</dependency><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId>
</dependency>

2.对Bean开启校验功能

@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServerConfig {private String ipAddress;private int port;private long timeout;
}

3.设置校验规则

@Component
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServerConfig {@Max(value = 400,message = "最大值不能超过400")private String ipAddress;private int port;private long timeout;
}

总结:

启动Bean属性校验

  • 导入JSR303与Hibernate校验框架坐标
  • 使用@Validated注解启动校验功能
  • 使用具体校验规则范数据校验格式

相关文章:

SpringBoot学习笔记(二)

配置文件分类 SpringBoot中4级配置文件 1级&#xff1a;file&#xff1a;config/application.yaml 【最高】 2级&#xff1a;file&#xff1a;application.yml 3级&#xff1a;classpath&#xff1a;config/application.yml 4级&#xff1a;classpath&#xff1a;application.…...

亚马逊云科技SageMaker:实现自动、可视化管理迭代

现如今&#xff0c;AI正在成为跨时代的技术&#xff0c;在数字经济发展中登上舞台&#xff0c;发挥关键作用。在Gartner发布的《2022年新兴技术成熟度曲线》*报告中&#xff0c;AIGC&#xff08;即AI Generated Content&#xff0c;人工智能自动生成内容&#xff09;被列为2022…...

汽车 Automotive > CAN Transceivers收发器选择

参考&#xff1a;https://www.nxp.com/products/interfaces/can-transceivers/3-3-v-5-v-io-can-transceivers:33VIO-CAN3.3 V / 5V IO CAN收发器组合TJA1042高速CAN收发器&#xff0c;具有待机模式&#xff0c;适用于所有类型的高速CAN网络&#xff0c;在需要低功耗模式的节点…...

AI将如何影响程序员的未来,以及如何不被AI所替代。

随着人工智能技术的不断发展&#xff0c;越来越多的工作被自动化和智能化所取代&#xff0c;其中程序员这个职业也不例外。然而&#xff0c;我们需要客观地分析AI在未来对程序员的影响&#xff0c;并且给出建议&#xff0c;以便程序员能够保持竞争力&#xff0c;不被AI所取代。…...

nginx 常用配置之 pass_proxy

大家好&#xff0c;我是 17。 今天和大家聊聊 pass_proxy 代理。 pass_proxy 代理 在前端代理主要是为了跨域。虽然前端跨域有多种方法&#xff0c;各有利弊&#xff0c;但用代理来跨域对开发是最友好的。用代理可以不用修改产品代码切换线上线下&#xff0c;非常安全。pass…...

Linux中驱动模块加载方法分析

如何管理驱动模块 由于Linux驱动模块众多&#xff0c;系统对模块加载顺序有要求&#xff0c;一些基础模块在系统启动时需要很早就被加载&#xff1b;开发者加入自己的模块时&#xff0c;需要维护一个模块初始化列表&#xff0c;上面两方面的做起来很困难&#xff0c;为了科学地…...

yarn 通过 resolutions,指定子孙依赖包版本号,解决froala-editor 版本问题

前端开发项目过程中会使用到各种依赖包。但是这些依赖包虽然好用&#xff0c;但是一味使用最新版本可能会出现各种奇葩问题&#xff0c;因此我们经常会针对一些依赖包指定一个稳定版本。 常用版本 版本号注释“1.0.2”必须切到1.0.2版“>1.0.2”必须大于1.0.2版“>1.0.…...

Elasticsearch7.8.0版本进阶——多文档操作流程

目录一、多文档操作1.1、多文档操作的概述1.2、多文档操作与单文档模式区别二、用单个 mget 请求取回多个文档2.1、用单个 mget 请求取回多个文档的图解2.2、用单个 mget 请求取回多个文档的步骤三、bulk API 的模式请求取回多个文档3.1、bulk API 的模式请求取回多个文档的图解…...

Scala函数式编程(第五章:函数基础、函数高级详解)

文章目录第 5 章 函数式编程5.1 函数基础5.1.1 函数基本语法5.1.2 函数和方法的区别5.1.3 函数定义5.1.4 函数参数5.1.5 函数至简原则&#xff08;重点&#xff09;5.2 函数高级5.2.1 高阶函数5.2.2 匿名函数5.2.3 高阶函数案例5.2.4 函数柯里化&闭包5.2.5 递归5.2.6 控制抽…...

ZED相机快速使用指南

1、安装SDK ZED SDK 3.8 - Download | Stereolabs 2、安装ros GitHub - stereolabs/zed-ros-wrapper: ROS wrapper for the ZED SDK 其他教程&#xff1a;ZED2相机SDK安装使用及ROS下使用_可即的博客-CSDN博客 3、官方文档 Get Started with ZED | Stereolabs 4、标定参…...

树莓派4b配置OpenWrt联网

文章目录前言一、下载固件二、配置wan口三、简单介绍1、修改无线名称、设置密码2、下载软件包总结前言 树莓派4b内置wifi模块&#xff0c;加一个千兆网口 好像有一种办法&#xff0c;通过无线wifi链接其他wifi通网&#xff0c;然后把这个网口作为lan口&#xff0c;连接电脑使…...

不同语言下的定时器,你都掌握了吗?

我们大家都对定时器不陌生&#xff0c;无论是现实中还是项目中&#xff0c;都离不开定时。在现实中&#xff0c;它叫闹钟&#xff0c;在项目上&#xff0c;它叫定时器&#xff0c;即定时触发某件事情。它能帮助我们在某一个既定的时间节点上&#xff0c;来提醒我们做一些事情&a…...

华为OD机试 - 水仙花数(Python) | 机试题+算法思路+考点+代码解析 【2023】

水仙花数 题目 所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身, 例如153 = 1^3 + 5^3 + 3^3,153是一个三位数 输入 第一行输入一个整数N, 表示 N 位的正整数 N 在3-7之间包含3,7 第二行输入一个正整数M, 表示需要返回第M个水仙花数 输出描述 返…...

在onBindViewHolder设置View的translation失败或错乱的问题

这个问题&#xff0c;可以换成“为什么在onCreate里面修改一些子View不生效&#xff0c;错位&#xff0c;乱”等问题。 本质原因肯定是在没有把整个ViewGroup渲染完成之前&#xff0c;操作了部分子View&#xff0c;导致了位置偏移等。 解决办法也很简单&#xff0c;通过调用Vi…...

【2.21】MySQL索引、动态规划、学习方法

索引常见面试题 什么是索引 索引的定义就是帮助存储引擎快速获取数据的一种数据结构&#xff0c;形象的说就是索引是数据的目录。存储引擎&#xff0c;说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。索引和数据就是位于存储引擎。…...

华为OD机试题 - 二叉树层次遍历(JavaScript)| 包含代码编写思路

最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 华为OD机试题 最近更新的博客使用说明二叉树层次遍…...

力扣解法汇总1140. 石子游戏 II

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 爱丽丝和鲍勃继续他们的石子游戏。许多堆石子 排成一行&#xff0c;每堆都有正整…...

Kerberos认证原理与使用教程

Kerberos认证原理与使用教程 一、Kerberos 概述 二、什么是 Kerberos ​ Kerberos 是一种计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端…...

内存取证常见例题思路方法-volatility (没有最全 只有更全)

目录 1.从内存文件中获取到用户hacker 的密码并且破解密码&#xff0c;将破解后的密码作为 Flag值提交; 2.获取当前系统的主机名&#xff0c;将主机名作为Flag值提交; 3.获取当前系统浏览器搜索过的关键词&#xff0c;作为Flag提交; 4.获取当前内存文件的 ip地址 5.当前系…...

10 种主数据模型设计示例分享,推荐收藏

主数据模型是主数据管理的基础&#xff0c;一个完整的、可扩展的、相对稳定的主数据模型对于主数据管理的成功起着重要的作用。规划、创建主数据模型的过程&#xff0c;是梳理主数据管理体系的过程&#xff0c;目的是建立一个良好的资源目录结构&#xff0c;划分合理的资源粒度…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码&#xff0c;在知识库增加一个tab页"HELLO WORLD"&#xff0c;完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...

VUE3 ref 和 useTemplateRef

使用ref来绑定和获取 页面 <headerNav ref"headerNavRef"></headerNav><div click"showRef" ref"buttonRef">refbutton</div>使用ref方法const后面的命名需要跟页面的ref值一样 const buttonRef ref(buttonRef) cons…...