SpringBoot3学习记录(有ssm基础)

目录

一、SpringBoot3 介绍

SpringBoot3 简介

SpringBoot3 快速入门

入门总结

1.为什么依赖不需要写版本

2.Startrer(启动器)是什么

3.@SpringBootApplication

二、SpringBoot3 配置文件

统一配置管理

使用yaml配置文件(推荐)

读取配置文件

多环境配置和使用

三、SpringBoot3 整合 SpringMVC

实现过程

SpringMvc相关的配置:

静态资源处理

自定义拦截器

四、SpringBoot3 整合 Druid

操作过程

五、SpringBoot3 整合 Mybatis

1.Mybatis整合步骤

2.mybatis整合实践

3.声明式事务整合配置

4.AOP整合配置

六、SpringBoot3 项目打包和运行


一、SpringBoot3 介绍

SpringBoot3 简介

spring的配置文件或配置类太过繁琐,当编写微服务项目时,每有一个子项目,都需要编写对应的配置文件或配置类等。而SpringBoot能帮我们简单,快速地创建一个独立,生产级别的Spring应用(SpringBoot底层是Spring),大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术。

简单来说,SpringBoot整合了Spring,简化了开发。

SpringBoot主要目的:

  • 为所有spring开发提供更快捷、可广泛访问的入门体验
  • 设置合理的默认值,也可以根据需求进行适当的调整
  • 提供一系列大型项目通用的非功能性程序(如内置服务器、安全性、指标、运行检查等)
  • 约定大于配置,基本不需要主动编写配置文件或配置类

总结:简化开发,简化配置,简化整合,简化部署,简化监控,简化运维。

SpringBoot3 系统要求:

maven        3.6.3+

Tomcat        10.0+

Servlet        9.0+

JDK             17+

SpringBoot3 快速入门

场景:通过浏览器发送 /hello 请求,返回“Hello,SpringBoot 3”

操作步骤:

1.创建Maven工程:springboot_mvc

2.添加依赖 (SpringBoot父工程依赖,web启动器依赖)

    <parent>
<!--        只要把它作为父工程,此项目就是一个springboot工程--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version></parent><dependencies>
<!--        web启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

3.编写启动引导类(SpringBoot项目运行的入口)

@SpringBootApplication
public class Main {public static void main(String[] args) {SpringApplication.run(Main.class,args);//自动创建ioc容器,启动tomcat服务器软件}
}

4.编程处理类(controller)

@Controller
@RequestMapping("hello")
@ResponseBody
public class HelloController {@GetMappingpublic String hello(){return "Hello,SpringBoot 3";}}

5.启动项目

运行Main就行

入门总结

1.为什么依赖不需要写版本

        父项目spring-boot-starter-parent的父工程spring-boot-dependencies(版本仲裁中心)中把常见的依赖版本都声明好了。

2.Startrer(启动器)是什么

        SpringBoot提出了Starter的概念,它是一组预定义的依赖项集合,旨在简化Spring项目的配置和构建过程。Starter包含了一组相关依赖项,以便在启动项目时自动引入需要的库,配置和功能,

(注意:不仅仅是导入库)。

像上面项目中导入了spring-boot-starter-web这个启动器,以往要web开发需要导入依赖:spring-webmvc,servlet,json等,还要写对应的配置文件或配置类。但web启动器内部帮我们导入web相关的依赖,还帮我们导入一些相应的web配置。 

Start启动器有两种:官方提供和第三方提供。

官方提供的,一般命名为:spring-boot-starter-*

第三方提供的,一般命名为:*-spring-boot-starter

官方启动器:Developing with Spring Booticon-default.png?t=N7T8https://docs.spring.io/spring-boot/docs/current/reference/html/using.html?spm=wolai.workspace.0.0.68b623067jPfWP#using.build-systems.starters

启动器与依赖传递:

依赖传递是MAVEN底层实现,它并不全面,如:要使用mybatis,需要导入mysql,druid,mybatis。

启动器是人为根据开发场景设置的,会根据场景包装对应的依赖,如:mybatis的启动器就会包含对应的依赖和配置。

3.@SpringBootApplication

@SpringBootApplication添加到启动类上,是一个组合注解,它的子注解有:

@SpringBootConfiguration

@EnableAuotConfiguration

@ComponentScan

@SpringBootConfiguration:声明当前类是配置类,如果之后想要添加ioc对象可以直接在该类下添加。

@SpringBootApplication
public class Main {public static void main(String[] args) {SpringApplication.run(Main.class,args);}@Beanpublic Object object(){return new Object();}
}

@EnableAutoConfiguration:自动加载配置类,加载我们编写的配置类和SpringBoot内部自带的配置类。

@ComponentScan:默认扫描当前类所在包以及子包的注解。

Main方法中的SpringApplication.run(Main.class, args)的功能为:

1.创建ioc容器,加载配置

2.启动内置的tomcat服务器

二、SpringBoot3 配置文件

统一配置管理

SpringBoot项目下,进行统一配置管理,如何想设置的参数(端口号,项目根路径,数据库连接信息等等)都集中在一个固定位置命名的配置文件(application.properties、application.yml、application.yaml)中。

配置文件应该放在SpringBoot工程的src/main/resources目录下。因为此目录是SpringBoot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问。

在这个配置文件中使用两种方式设置参数:

1.固定的key配置参数(官方提供)

Common Application Propertiesicon-default.png?t=N7T8https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html?spm=wolai.workspace.0.0.68b623067jPfWP#appendix.application-properties

2.自定义key配置参数(示例application.properties格式)

        如:qiu.name=qiu

        在组件中可以使用@Value(${key})接收参数

#使用SpringBoot提供的key修改程序的参数
server.port=81
#项目访问根路径
server.servlet.context-path=/qiu
#自定义key配置参数
qiu.name=qiu
qiu.age=22
@Controller
@RequestMapping("hello")
@ResponseBody
public class HelloController {@Value("${qiu.name}")private String name;@GetMappingpublic String hello(){System.out.println(name);return "Hello,SpringBoot 3";}}

使用yaml配置文件(推荐)

yaml语法:1.数据结构有树状结构呈现,通过缩进表示层级

                   2.连续的项目(集合)通过减号"- "来表示(减号后面有一个空格)

                   3.键值结构key/value使用": "(冒号后面有一个空格)

                   4.yaml配置文件的拓展名为:yml或yaml

server:port: 82servlet:context-path: /qiu
qiu:user:name: qiuage: 22py:- a- b- c

读取配置文件

方式1:@Value("${key}"):该注解本身使用的是di注入,因此使用该注解的类需要放到ioc容器。

@Data
@Component
public class User {@Value("${qiu.user.name}")private String name;@Value("${qiu.user.age}")private int age;@Value("${qiu.user.py}")private List<String> py;
}

@Value注解key必须写全,而且只能读取单个值。

方式2:@ConfigurationProperties注解,将注解内prefix指向要赋值的key那一层。

        该注解会把对应的属性赋值(只有类中属性名与指定的那一层key值相同才会赋值)

qiu:user:name: qiu2age: 23py:- a- b- cpys:sex: 1
@Data
@Component
@ConfigurationProperties(prefix = "qiu.user")
public class User {
//    @Value("${qiu.user.name}")private String name;
//    @Value("${qiu.user.age}")private int age;
//    @Value("${qiu.user.py}")private List<String> py;private String sex;
}

该测试无误。

多环境配置和使用

在开发一个项目过程中会有不同的时期:开发,测试,生产。对应不同的时期所使用的配置参数可能不同(数据库,日志级别等等)。

这时我们可以在application.yaml(properties)之外再创建 文件名如:application-test.yaml(application-*.yaml)的配置文件,再使用application.yaml中的spring.profiles.active: test来激活application-test.yaml。

当配置文件内容太多时,也可以使用该方法,如:druid的配置内容可以放在application-druid.yaml。

如果有多个配置文件需要激活在后面加 " , " 分隔。如:application-test.yaml,application-dev.yaml可以在application.yaml中使用:"spring.profiles.active: test,dev"。

如果配置文件有重复的key,会按顺序覆盖。

当项目完成后会被打成一个jar包,我们在执行项目时可以添加命令在启动项目时动态指定要激活哪个配置。

三、SpringBoot3 整合 SpringMVC

实现过程

创建maven项目

继承父工程:spring-boot-starter-parent

导入web开发场景的启动器:spring-boot-starter-web

定义启动类

@SpringBootApplication
public class Main {public static void main(String[] args) {SpringApplication.run(Main.class,args);}
}

编写controller层

@Controller
@ResponseBody
@RequestMapping("/hello")
public class HelloController {@GetMappingpublic String hello(){return "你好,springboot";}}

运行启动类即可访问:localhost:8080/hello

SpringMvc相关的配置:

server.port        端口号

server.servlet.context-path        项目访问根路径

spring.resources.static.locations        静态资源的位置

spring.http.encoding.charset        Http请求的字符编码

spring.http.encoding.enabled        响应的字符编码

静态资源处理

我们如何访问项目静态资源?

方式1:将资源放到默认的文件夹

  • classpath:/META-INF/resources/
  • classpath:/resources/(该文件夹与项目自带的resources文件夹不同)
  • classpath:/static/
  • classpath:/public/

方式2:使用spring.web.resources.static-locations: … 修改

自定义拦截器

1.声明拦截器

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("MyInterceptor.preHandle");return true;}
}

2.创建配置类

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor());}
}

只要配置类放在启动类的包或子包下,SpringBoot就会自动扫描。

四、SpringBoot3 整合 Druid

整合Druid连接池一般整合两个功能:数据库连接池功能和监控页面。

但暂时只整合连接池功能,因为druid 1.2.18 目前对springboot3整合并不是很好。

操作过程

1.导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version></parent><groupId>com.atguigu</groupId><artifactId>springboot-starter-druid-04</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--  web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 数据库相关配置启动器 jdbctemplate 事务相关--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- druid启动器的依赖  --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.18</version></dependency><!-- 驱动类--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency></dependencies><!--    SpringBoot应用打包插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.配置文件编写

spring:datasource:# 连接池类型 type: com.alibaba.druid.pool.DruidDataSource# Druid的其他属性配置 springboot3整合情况下,数据库连接信息必须在Druid属性下!druid:url: jdbc:mysql://localhost:3306/springbootusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# 初始化时建立物理连接的个数initial-size: 5# 连接池的最小空闲数量min-idle: 5# 连接池最大连接数量max-active: 20# 获取连接时最大等待时间,单位毫秒max-wait: 60000# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。test-while-idle: true# 既作为检测的间隔时间又作为testWhileIdel执行的依据time-between-eviction-runs-millis: 60000# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)min-evictable-idle-time-millis: 30000# 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)validation-query: select 1# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-borrow: false# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-return: false# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。pool-prepared-statements: false# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100max-pool-prepared-statement-per-connection-size: -1# 合并多个DruidDataSource的监控数据use-global-data-source-stat: truelogging:level:root: debug

3.创建pojo类和controller层

@Data
public class User {private Integer id;private String name;private Integer age;private String email;
}
@Controller
@RequestMapping("user")
@ResponseBody
public class UserController {@Autowiredprivate JdbcTemplate jdbcTemplate;@GetMappingpublic List<User> show(){String sql = "select * from user";List<User> users = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class));return users;}
}

当导入jdbc启动器,springboot会帮我们完成配置类的加载,JdbcTemplate会自动放到ioc容器中,我们需要时注入就行。

4.编写启动类并启动

启动项目时会报错,因为springboot3和druid 1.2.18 不兼容,缺少自动装配的配置文件。(druid版本为1.2.20时已兼容,启动时不会报错)

解决方法:在resources目录下创建

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

文件,文件内容为

com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure

五、SpringBoot3 整合 Mybatis

1.Mybatis整合步骤

1.1.导入依赖:添加MyBatis和数据库驱动的相关依赖,如使用Mysql数据库,添加MyBatis和MySQL驱动的依赖。

1.2.配置数据源:在application.yaml中配置数据库连接信息(url,username,password,driver,mybatis的功能配置等)。

1.3.创建实体类:创建与数据库表对应的实体类。

1.4.创建Mapper接口:创建与数据库表交互的Mapper接口。

1.5.创建Mapper接口SQL实现:使用mapper.xml文件或注解方式。

1.6创建程序启动类

1.7.注解扫描:在启动类上添加@MapperScan注解,用于扫描和注册Mapper接口。

1.8.使用Mapper接口

2.mybatis整合实践

创建项目:springboot-mybatis

导入依赖:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.1</version></dependency><!-- 数据库相关配置启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- druid启动器的依赖  --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.18</version></dependency><!-- 驱动类--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency></dependencies>

配置文件:

server:port: 80servlet:context-path: /
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:url: jdbc:mysql:///springboot_mybatisusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:configuration:  # setting配置auto-mapping-behavior: fullmap-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.slf4j.Slf4jImpltype-aliases-package: com.qiu.pojo # 配置别名mapper-locations: classpath:/mapper/*.xml # mapperxml位置

        druid会报错,记得之前的操作。

创建实体类:

@Data
@ToString
public class User {private String account ;private String password ;private Integer id ;
}

创建Mapper接口:

public interface UserMapper {List<User> queryAll();
}

创建Mapper接口SQL实现:由于application.yaml已经设置了mapperxml的位置,因此只需要在resources下创建mapper.Usermapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace = 接口的全限定符 -->
<mapper namespace="com.qiu.mapper.UserMapper"><select id="queryAll" resultType="user">select * from user</select></mapper>

创建启动类:

@SpringBootApplication
@MapperScan("com.qiu.mapper")//mapper接口所在的位置
public class Main {public static void main(String[] args) {
//        System.out.println("Hello world!");SpringApplication.run(Main.class,args);}
}

注解扫描:

在启动类上添加@MapperScan,以前想要mapper接口和mapperxml对应上我们需要为两个文件创建统一的文件路径,但springboot可以在application.json中指定mapperxml的路径,在启动类上@MapperScan上指定mapper接口的路径,这样就不需要两个文件的统一路径。

controller操作:

@Controller
@ResponseBody
@RequestMapping("user")
public class UserController {@Autowiredprivate UserMapper userMapper;@GetMappingpublic List<User> getUsers(){return userMapper.queryAll();}
}

访问localhost:80/user

3.声明式事务整合配置

导入依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

SpringBoot项目会自动配置一个 DataSourceTransactionManager,所以我们只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理了

    @Transactionalpublic void addUser(){User user = new User();user.setId(4);user.setAccount("user4");user.setPassword("pass4");userMapper.addUser(user);}

4.AOP整合配置

导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

直接使用注解即可:com.qiu.advice.LogAdvice

@Component
@Aspect
@Order(4)
public class LogAdvice {@Before("execution(* com..service.*.*(..))")public void before(JoinPoint joinPoint){String classname = joinPoint.getClass().getSimpleName();String methodname = joinPoint.getSignature().getName();System.out.println("methodname = " + methodname+" classname = " + classname);}
}

六、SpringBoot3 项目打包和运行

在普通的web工程中,要打包需要打成war包,然后再tomcat服务器中运行。

在springboot工程中,由于内置了tomcat,所以可以直接打成jar包,使用命令执行java -jar xx。

1.添加打包插件:不使用插件也可以把项目打成jar包,但运行时会找不到项目入口,所以需要使用springboot的打包插件

<!--    SpringBoot应用打包插件-->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

2.打包

3.命令启动和命令参数

命令参数:

        命令格式:java -jar  [选项] [参数] <jar文件名>

1. -D<name>=<value>:设置系统属性,可以通过`System.getProperty()`方法在应用程序中获取该属性值。例如:java -jar -Dserver.port=8080 myapp.jar。
2. -X:设置JVM参数,例如内存大小、垃圾回收策略等。常用的选项包括:
           -Xmx<size>:设置JVM的最大堆内存大小,例如 -Xmx512m 表示设置最大堆内存为512MB。
           -Xms<size>:设置JVM的初始堆内存大小,例如 `-Xms256m` 表示设置初始堆内存为256MB。
3. -Dspring.profiles.active=<profile>:指定Spring Boot的激活配置文件,可以通过application-<profile>.properties或 application-<profile>.yml文件来加载相应的配置。例如:java -jar -Dspring.profiles.active=dev myapp.jar。

命令示例:java -jar -Dserver.port=81 springboot-mybatis-1.0-SNAPSHOT.jar

                  java -jar -Dserver.port=81 -Dspring.profiles.active=test,dev springboot-mybatis-1.0-SNAPSHOT.jar

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

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

相关文章

Seatunnel系列之:部署Seatunnel

Seatunnel系列之&#xff1a;部署Seatunnel 一、步骤一&#xff1a;准备环境二、步骤二&#xff1a;下载SeaTunnel三、步骤三&#xff1a;安装连接器插件四、quick-start-seatunnel-engine1.添加作业配置文件来定义作业2.运行 SeaTunnel 应用程序 五、quick-start-flink1.部署和…

Gateway网关在url参数带有特殊字符的情况下转发失败(响应400)

本文主要分享了&#xff0c;SpringCloud Gateway网关在url参数带有空格或者特殊字符的情况下&#xff0c;转发失败导致响应错误码400的解决方案。 响应400错误码的2种场景&#xff1a; 1.参数带空格&#xff0c;Gateway会误认为该空格是切割符&#xff0c;如?phone 135****6…

QT使用dumpcpp为COM生成h及cpp的方式,COM是C#的dll注册的

目录 1.C#的dll注册为COM&#xff0c;采用bat的方式 2.通过qt的dumpcpp来生成h及cpp文件 3.h文件和cpp文件处理。 台达数控系统的C#的dll dumpcpp用的tlb文件 dumpcpp生成的原生h文件 dumpcpp生成的原生cpp dump生成后的的原生cpp文件修改后的cpp文资源 dump生成后的的…

AI短视频矩阵系统介绍|罐头鱼AI视频批量生成

智能化管理&#xff0c;轻松批量剪辑短视频&#xff01; 近年来&#xff0c;随着短视频营销行业的发展&#xff0c;我们推出了一款AI短视频矩阵系统&#xff0c;旨在帮助用户管理、剪辑和发布短视频内容&#xff0c;从而提升品牌影响力。让我们来看看这款系统都提供了哪些功能&…

C:数据结构王道

初始化顺序表&#xff08;顺序表中元素为整型&#xff09;&#xff0c;里边的元素是1,2,3&#xff0c;然后通过scanf读取一个元素&#xff08;假如插入的是6&#xff09;&#xff0c;插入到第2个位置&#xff0c;打印输出顺序表&#xff0c;每个元素占3个空格&#xff0c;格式为…

在哪些领域中最需要使用 OCR 识别技术?

光学字符识别&#xff08;OCR&#xff09;技术能够将不同格式的印刷或手写文本转换为机器编码的文本&#xff0c;这一技术在许多领域都发挥着重要作用&#xff0c;尤其是在需要大量处理文档和图像数据的场景中。以下是一些最需要使用OCR识别技术的领域&#xff1a; 1. 办公自动…

Windows Server 各版本搭建终端服务器实现远程访问(03~19)

一、Windows Server 2003 左下角开始➡管理工具➡管理您的服务器&#xff0c;点击添加或删除角色 点击下一步 勾选自定义&#xff0c;点击下一步 点击终端服务器&#xff0c;点击下一步 点击确定 重新登录后点击确定 点击开始➡管理工具➡计算机管理&#xff0c;展开本地用户…

openssl3.2 - 官方demo学习 - encode - ec_encode.c

文章目录 openssl3.2 - 官方demo学习 - encode - ec_encode.c概述笔记产生ecc私钥产生ecc公钥测试工程备注备注END openssl3.2 - 官方demo学习 - encode - ec_encode.c 概述 官方demos/encode 目录中给了2个例子工程 功能是载入(RSA/ECC)公钥, 然后自己就可以拿内存中的公钥对…

mupdf渲染过程(一):颜色

mupdf除了解析PDF功能之外&#xff0c;还有一个强大的功能就是渲染文字和图像&#xff0c;本文介绍mupdf渲染过程中涉及到的颜色问题&#xff1a;包括颜色空间&#xff0c;颜色转换&#xff0c;lcms的使用。 1.初始化 mupdf初始化第一步是实例化fz_context *ctx&#xff0c;fz…

利用适配器模式使用第三方库

文章目录 一、为什么要使用适配器模式二、适配器模式使用第三方库示例 一、为什么要使用适配器模式 适配器模式是一种设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式的主要目的是使不兼容的接口能够一起工作。以下是一些使用适配器的原因&…

OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/136616551 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子(红模仿)的博…

TypeScript的基础类型和高级类型梳理总结

一、基础类型 1、boolean 布尔类型 表示逻辑值&#xff0c;可以是 true 或 false let isBoolean:boolean false 2、number 数字类型 表示整数和浮点数&#xff08;例如 42&#xff0c;3.14159&#xff09;&#xff0c;不论是十进制、二进制、八进制还是十六进制&#xff…

Rust镜像配置

cargo镜像配置 找到.cargo目录并创建config文件,输入以下内容即可,windows一般在C:\Users\用户目录\.cargo,linux执行vim ~/.cargo/config即可。然后将下面内容赋值粘贴进去 [source.crates-io] registry = "https://github.com/rust-lang/crates.io-index" rep…

Visual Studio 2022 配置“Debug|x64”的 Designtime 生成失败。IntelliSense 可能不可用。

今天写代码&#xff0c;无缘无故就给我整个这个错误出来&#xff0c;我一头雾水。 经过我几个小时的奋战&#xff0c;终于解决问题 原因就是这个Q_INTERFACES(&#xff09;宏&#xff0c;我本想使用Q_DECLARE_INTERFACE Q_INTERFACES这两个Qt宏实现不继承QObject也能使用qobjec…

C语言自学笔记17----结构体struct与位域与关键字typedef

C 语言结构体(struct) 为什么在C中使用结构&#xff1f; 假设您要存储有关一个人的信息&#xff1a;他/她的姓名&#xff0c;身份证号和薪水。您可以创建不同的变量name&#xff0c;citNo和salary存储此信息。 如果您需要存储多个人的信息怎么办&#xff1f;现在&#xff0c;你…

VSCode提交代码

VSCode提交代码方式&#xff1a; 先在电脑本地文件夹中打开git的bash窗口使用git clone https://github.com/xxxx/克隆仓库地址到本地&#xff0c;并生成一个项目的文件夹打开VSCode&#xff0c;点击文件按钮&#xff0c;打开加载项目的文件夹对于VSCode设置Git路径&#xff…

Three 材质纹理 (总结三)

THREE.MeshLambertMaterial&#xff08;网格 Lambert 材质&#xff09; 该材质使用基于非物理的Lambertian模型来计算反射率。可以用来创建暗淡的并不光亮的表面&#xff0c;该材质非常易用&#xff0c;而且会与场景中的光源产生反应。 MeshLambertMaterial属性 # .color : …

蓝桥杯刷题|02入门真题

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数…

Linux之线程互斥

目录 一、问题引入 二、线程互斥 1、相关概念 2、加锁保护 1、静态分配 2、动态分配 3、锁的原理 4、死锁 三、可重入与线程安全 1、概念 2、常见的线程不安全的情况 3、常见的线程安全的情况 4、常见不可重入的情况 5、常见可重入的情况 6、可重入与线程安全联系…

google scholar谷歌学术搜索技巧合集【补充ing】

今天发现和百度学术更新速度差太多&#xff0c;引用数量也不对&#xff0c;故搜集谷歌学术搜索技巧&#xff0c;以尽快查找所需。 筛选合集&#xff1a; 谷歌学术高级搜索技巧大放送 - 知乎 Google Scholar 谷歌学术文献检索技巧总结 - 知乎 Google Scholar谷歌学术文献检索技…