SpringBoot学习笔记 - 构建、简化原理、快速启动、配置文件与多环境配置、技术整合案例
【前置内容】Spring 学习笔记全系列传送门:
【前置内容】SpingMVC 学习笔记全系列传送门:
1、SpringBoot 简介
1.1 SpringBoot 快速入门
1.1.1 开发步骤
创建新模块,选择Spring初始化,并配置模块相关基础信息
选择当前模块需要使用的技术集
开发控制器类
运行自动生成的Application类
1.1.1.1 创建新模块
选择
Spring Initializr
,用来创建SpringBoot
工程打包方式这里需要设置为
Jar
选中
Web
,然后勾选Spring Web
Java 版本选 Java8
pom.xml 文件预览
需要注意:
- 父包 spring-boot-starter-parent 的版本手动更改为了 2.6.3,jdk版本1.8 与 spring boot 3.0.0 版本不匹配,会报错
- <java.version> 修改为了1.8
<?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 https://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>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>priv.dandelion</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
1.1.1.2 创建 Controller
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id) {
System.out.println("id = " + id);
return "hello boot!";
}
}
1.1.1.3 启动服务器
直接运行引导类即可
1.1.2 开发内容对比
坐标
Spring
程序中的坐标需要自己编写,而且坐标非常多SpringBoot
程序中的坐标是我们在创建工程时进行勾选自动生成的
web3.0配置类
Spring
程序需要自己编写这个配置类。这个配置类大家之前编写过,肯定感觉很复杂SpringBoot
程序不需要我们自己书写
配置类
注意:基于Idea的
Spring Initializr
快速构建SpringBoot
工程时需要联网。Spring/SpringMVC
程序的配置类需要自己书写。而SpringBoot
程序则不需要书写。
1.1.3 官网构建工程
SpringBoot官网:https://spring.io/projects/spring-boot
点击下方的 Quickstart 中的 Spring Initializr,开始快速创建项目,如下图所示
1.1.4 SpringBoot 工程快速启动
1.1.4.1 问题引入
- SpringBoot 程序服务器运行在本机
- 当进行前后端联调时,按理说前端需要连接后端开发的机器,比较麻烦
- 是否有更好的方式?
后端可以将
SpringBoot
工程打成jar
包- 该
jar
包运行不依赖于Tomcat
和Idea
也可以正常运行 - 这个
jar
包在运行过程中连接和我们自己程序相同的Mysql
数据库即可
- 该
1.1.4.2 打包
首先必须在
pom.xml
中配置如下插件<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
使用
Maven
的package
指令打包就会在target
目录下生成对应的Jar
包注意:
在运行
package
指令之前,最好先运行一次clean
指令,防止出现问题如果配置文件中包含中文,最好在设置中设置编码为 UTF-8 并重新检查配置文件中的中文,避免出现乱码问题导致配置文件无法使用,具体操作如下
1.1.4.3 启动
进入 jar 包所在目录,使用 cmd 输入命令
java -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar
1.2 SpringBoot 概述
原始
Spring
环境搭建和开发存在以下问题:
- 配置繁琐
- 依赖设置繁琐
SpringBoot
程序优点恰巧就是针对Spring
的缺点
- 自动配置。这个是用来解决
Spring
程序配置繁琐的问题- 起步依赖。这个是用来解决
Spring
程序依赖设置繁琐的问题- 辅助功能(内置服务器,...)。在启动
SpringBoot
程序时既没有使用本地的tomcat
也没有使用tomcat
插件,而是使用SpringBoot
内置的服务器。
1.2.1 起步依赖 —— 核心:Maven 继承
以后需要使用技术,只需要引入该技术对应的起步依赖即可
使用
Spring Initializr
方式创建的Maven
工程的的pom.xml
配置文件中自动生成了很多包含starter
的依赖,这些以来就是启动依赖,如下<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
</parent>
<!--
...
--> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
1.2.1.1 探索父工程(源码不表)
进入父工程 spring-boot-starter-parent 中,其也有一个父工程
进入 spring-boot-starter-parent 的父工程 spring-boot-dependencies 中,其中包含:
<properties...>
标签中定义了各个技术软件依赖的版本,避免了我们在使用不同软件技术时考虑版本的兼容问题。在properties
中可以找到各种技术的版本。<dependencyManagement...>
标签是进行依赖版本锁定,但是并没有导入对应的依赖;如果我们工程需要那个依赖只需要引入依赖的groupid
和artifactId
不需要定义version
。<build...>
标签中对插件的版本进行了锁定
1.2.1.2 探索依赖
本工程中添加了如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
可以看到 spring-boot-starter-web 引入了如下依赖
- 引入了
spring-web
和spring-webmvc
的依赖,这就是为什么我们的工程中没有依赖这两个包还能正常使用springMVC
中的注解的原因。 - 而依赖
spring-boot-starter-tomcat
,从名字基本能确认内部依赖了tomcat
,所以我们的工程才能正常启动。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.7.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.7.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.7.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.25</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.25</version>
<scope>compile</scope>
</dependency>
</dependencies>
- 引入了
1.2.1.3 小结
starter
SpringBoot
中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
parent
- 所有
SpringBoot
项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
- 所有
实际开发
使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
G:groupid
A:artifactId
V:version
如发生坐标错误,再指定version(要小心版本冲突)
1.2.2 程序启动
引导类
@SpringBootApplication
public class Springboot01QuickstartApplication { public static void main(String[] args) {
SpringApplication.run(Springboot01QuickstartApplication.class, args);
}
}
注意
SpringBoot
在创建项目时,采用 jar 的打包方式SpringBoot
的引导类是项目的入口,运行main
方法就可以启动项目- 因为
pom.xml
中配置了spring-boot-starter-web
依赖,而该依赖中依赖tomcat
,所以运行main
方法就可以使用tomcat
启动工程。
1.2.3 切换 web 服务器
目前启动工程使用的是
tomcat
服务器,spring-boot-starter-web
依赖中依赖了tomcat
如果要使用其他服务器就需要将 tomcat 排除,更换为
jetty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
2、配置文件
2.1 配置文件格式及优先级
- 当三种配置文件均存在时,优先级
application.properties
>application.yml
>application.yaml
SpringBoot
程序的配置文件名必须是application
,只是后缀名不同
application.properties
server.port=80
application.yml
(常用)server:
port: 81
application.yaml
server:
port: 82
2.2 yaml 格式
2.2.1 概述
特点
YAML(YAML Ain't Markup Language),一种数据序列化格式。
相比于 xml 和 properties 而言重数据,轻格式
优点
容易阅读
yaml
类型的配置文件比xml
类型的配置文件更容易阅读,结构更加清晰
容易与脚本语言交互
以数据为核心,重数据轻格式
yaml
更注重数据,而xml
更注重格式
扩展名
.yml
(主流).yaml
2.2.2 语法规则
规则
大小写敏感
属性层级关系使用多行描述,每行结尾使用冒号结束
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键),空格的个数并不重要,只要保证同层级的左侧对齐即可。
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
# 表示注释
示例
# 层级关系
enterprise:
name: dandelion
age: 16
tel: 12345456767
# 数组格式
subject:
- Java
- C++
- 算法
2.3 yaml 配置文件数据读取
2.3.1 环境准备
准配配置文件
application.yaml
lesson: SpringBoot server:
port: 80 enterprise:
name: dandelion
age: 16
tel: 12345456767
subject:
- Java
- C++
- 算法
2.3.2 读取配置数据
2.3.2.1 使用 @Value 注解
直接使用
@Value("${ }")
注解进行注入,用于读取单个数据,参数为${ }
包裹的数据名称的字符串
Controller 示例
@RestController
@RequestMapping("/books")
public class BookController { // 读取数据
@Value("${lesson}")
private String lesson; // 多级数据
@Value("${server.port}")
private Integer port; // 数组元素
@Value("${enterprise.subject[0]}")
private String subject_00; @GetMapping("/{id}")
public String getById(@PathVariable Integer id) { System.out.println(lesson);
System.out.println(port);
System.out.println(subject_00); return "hello boot!";
}
}
2.3.2.2 Environment 对象
用于获取全部数据,使用时对
Environment
类型的属性进行自动装配,使用其getProperty()
方法来获取数据
Controller 示例
import org.springframework.core.env.Environment;
// import ... @RestController
@RequestMapping("/books")
public class BookController { // 获取全部数据,注入到Environment类型中
@Autowired
private Environment environment; @GetMapping("/{id}")
public String getById(@PathVariable Integer id) { //
System.out.println(environment.getProperty("lesson"));
System.out.println(environment.getProperty("server.port"));
System.out.println(environment.getProperty("enterprise.age"));
System.out.println(environment.getProperty("enterprise.subject[1]")); return "hello boot!";
}
}
2.3.2.3 自定义对象
该方式用于读取任意数据,将其封装为实体类,使用注解绑定获取数据的范围,在获取时,通过自动注入获取该实体类对象并进行操作
定义数据的实体类,和配置文件中保持一致,并实现其 Getter 和 Setter
- 后续要使用自动装配,故要添加 @Component 注解,将这个类交给 Spring 管理
- 使用
@ConfigurationProperties(prefix = "enterprise")
注解,prefix
属性值表示读取配置文件的哪一部分数据,此处代表读取enterprise
中的数据
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getTel() {
return tel;
} public void setTel(String tel) {
this.tel = tel;
} public String[] getSubject() {
return subject;
} public void setSubject(String[] subject) {
this.subject = subject;
} @Override
public String toString() {
return "Enterprise{" +
"name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
", subject=" + Arrays.toString(subject) +
'}';
}
}
Controller 示例
@RestController
@RequestMapping("/books")
public class BookController { @Autowired
private Enterprise enterprise; @GetMapping("/{id}")
public String getById(@PathVariable Integer id) { System.out.println(enterprise); return "hello boot!";
}
}
2.4 多环境配置
2.4.1 yaml 文件
简单书写
- 使用
spring.profiles
设定环境的名称 - 使用
---
将不同的环境进行分隔 - 使用
spring.profiles.active
设置启动项目时使用的环境 - 公用的配置可以写在第一部分中
#设置启用的环境
spring:
profiles:
active: test
---
#开发环境
spring:
profiles: dev
server:
port: 80
---
#测试环境
spring:
profiles: test
server:
port: 81
---
#生产环境
spring:
profiles: pro
server:
port: 82
- 使用
标注书写
简单书写部分中,设定环境的名称的
spring.profiles
的书写格式并不规范,规范的书写格式如下#开发环境
spring:
config:
activate:
on-profile: dev
server:
port: 80
2.4.2 properties 文件
- 与 yaml 文件不同,properties 的多环境配置写在不同的文件中,并在主配置文件中指定使用的环境
- 多个环境使用文件名进行区分和定义,
application-环境名.properties
- 公用的配置可以写
application.properties
中
主配置文件
application.properties
#设置启用的环境
spring.profiles.active=dev
开发环境和测试环境
开发环境
application-dev.properties
server.port=80
测试环境
application-test.properties
server.port=81
2.4.3 命令行启动参数配置
命令行临时配置
可以在启动指令后添加参数来临时覆盖配置文件中的内容,参数可以有多个,每一个参数的格式为
-- 空格 使用.连接的配置属性名称=属性值
,如下java -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar -- spring.profiles.active=test -- server.port=88
配置的优先级
- 如上,命令中添加参数的优先级大于原本配置文件的优先级
SpringBoot
官网对于优先级已经进行了说明,参见:- 官方文档:Externalized Configuration
- 中文手册:外化配置
2.5 配置文件分类
命令行启动参数配置存在问题
- 由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,可能参数过多,过于复杂
解决方案:额外的配置类
SpringBoot 配置文件中 4 级配置文件位置及其优先级(优先级逐级提升):
- 1级:classpath:application.yml 【最低】
- 2级:classpath:config/application.yml
- 3级:file :application.yml
- 4级:file :config/application.yml 【最高】
说明
- classpath 指的是项目的 resources 目录下,file 指的是打好的 jar 包所在的目录下
- file 中的配置文件一般用于系统打包后临时设置通用属性,classpath 中的配置文件一般用于开发阶段设置通用属性
- file 中的配置文件的优先级高于 classpath 中的配置文件
- 同一分类的配置中,config 文件夹中的配置文件的优先级高于 config文件夹外的配置文件
3、SpringBoot 整合 Junit
3.1 环境准备
创建新的模块,不需要依赖
Service 实现类(接口不表)
@Service
public class BookServiceImpl implements BookService {
@Override
public void save() {
System.out.println("book save!");
}
}
3.2 测试类编写
测试类中(
@SpringBootTest
修饰),将BookService
注入如果测试类和引导类的包名不一致,需要为
@SpringBootTest
的 class 属性手动指定引导类的字节码对象,如@SpringBootTest(classes = Springboot02TestApplication.class)
@SpringBootTest
class Springboot02TestApplicationTests { @Autowired
private BookService bookService; @Test
void contextLoads() {
bookService.save();
}
}
4、SpringBoot 整合 Mybatis
4.1 回顾 Spring 整合 Mybatis
4.2 SpringBoot 整合Mybatis
4.2.1 创建模块
依赖
- MyBatis Framework
- MySQL Driver
4.2.2 定义实体类
public class Book {
private Integer id;
private String name;
private String type;
private String description;
// Getter、Setter、toString...
}
4.2.3 定义 dao
数据库SQL见前置内容,tbl_book 表SQL,此处不再赘述
dao (报错)
public interface BookDao { @Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
存在问题及解决方案
报错:
No qualifying bean of type 'priv.dandelion.dao.BookDao' available
错误信息显示在
Spring
容器中没有BookDao
类型的bean
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'priv.dandelion.dao.BookDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.25.jar:5.3.25]
... 74 common frames omitted
原因
Mybatis
会扫描接口并创建接口的代码对象交给Spring
管理,但是现在并没有告诉Mybatis
哪个是dao
接口- 注意:Mysql驱动版本大于8.0时,需要在url连接串中配置时区
jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
,或在MySQL数据库端配置时区解决此问题
解决方案:在
BookDao
接口上使用@Mapper
@Mapper
public interface BookDao { @Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
4.2.4 定义测试类
@SpringBootTest
class Springboot03MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
4.2.5 编写配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 123456
4.2.6 使用 Druid 数据源
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
添加配置,指定使用 Druid 数据源
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
5、基于 SpringBoot 的 SSM 整合案例
- 本节内容是对上一篇 SSM 整合案例的改进,可参见SpingMVC 学习笔记 - 第二章 -SSM整合案例
- 开发步骤
pom.xml:配置起步依赖,必要的资源坐标(druid)
application.yml:设置数据源、端口等
配置类:现在不需要了
dao:设置@Mapper
测试类
页面:放置在resources目录下的static目录中
5.1 创建工程
依赖
- Spring Web
- MyBatis Framework
- MySQL Driver
引入Druid
添加依赖
<!-- TODO 添加必要的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
5.2 后端代码整理
config 包,对比 SSM 项目全部删除,现在不需要了
entity 包,实体,无变化
dao,添加
@Mapper
注解// TODO 添加@Mapper
@Mapper
public interface BookDao { @Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
// @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
public int save(Book book); @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
public int update(Book book); @Delete("delete from tbl_book where id = #{id}")
public int delete(Integer id); @Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id); @Select("select * from tbl_book")
public List<Book> getAll();
}service,无变化
exception,无变化
controller,无变化
测试类,使用了 @SpringBootTest 注解,更换了使用的包
// import org.junit.Test;
import org.junit.jupiter.api.Test; // import ... //@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(classes = SpringConfig.class) // TODO 将原先使用的注解更改为 @SpringBootTest
@SpringBootTest
public class BookServiceTest { @Autowired
private BookService bookService; // TODO 原先使用的 @Test 注解 现在需要重新导包
@Test
public void testGetById() {
Book byId = bookService.getById(1);
System.out.println(byId);
} @Test
public void testGetAll() {
List<Book> all = bookService.getAll();
System.out.println(all);
}
}
5.3 配置文件
#TODO 配置端口和数据源相关信息
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 123456
5.4 静态资源
静态资源存放在 resources 目录下的 static 目录下
配置主页
index.html
<!--TODO 配置主页-->
<script>
document.location.href="pages/books.html";
</script>
5.5 包结构展示
5.6 其他问题
- 若再未加入前端代码时启动过服务器,加入前端代码后无法正常访问到页面时
- 执行 Maven 的 clean 指令,再重新启动服务器(重新打包)即可
- SpringBoot 版本问题、MySQL时区问题、项目无法构建、配置文件打包乱码等问题,本节笔记中均有提及,可向上查阅
SpringBoot学习笔记 - 构建、简化原理、快速启动、配置文件与多环境配置、技术整合案例的更多相关文章
- OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置
摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...
- springboot学习笔记:7.IDEA下5步完成热部署配置
开发工具IDEA 2017.02 JDK1.8 1.pom.xml中增加: <dependency> <groupId>org.springframework.boot&l ...
- Hadoop入门学习笔记-第三天(Yarn高可用集群配置及计算案例)
什么是mapreduce 首先让我们来重温一下 hadoop 的四大组件:HDFS:分布式存储系统MapReduce:分布式计算系统YARN: hadoop 的资源调度系统Common: 以上三大组件 ...
- python学习笔记(八)---关于Django的下载以及环境配置
下载链接: https://www.djangoproject.com/download/ (建议选择 1.6版本) 然后安装 Django下载后为压缩包,解压缩跟Python放在同一个根目录,在do ...
- Opencv学习笔记1:安装opencv和VS2015并进行环境配置
用了Opencv一段时间了,简单记录一下opencv在vs2015下的配置. 第一部分:OpenCV3.2.0的下载 OpenCV官方下载地址: https://opencv.org/releases ...
- 【opencv学习笔记一】opencv下载安装与VS2017开发环境配置
本文章摘录自浅墨博客,原文链接http://blog.csdn.net/poem_qianmo/article/details/19809337 目录 1.opencv下载与安装 2.计算机环境变量配 ...
- OpenCV学习笔记(一)、VS2015+OpenCV-4.1.1环境配置(Windows10)
1.登陆OpenCV官网,点击打开Releases,会看到各个版本的OpenCV安装文件,选择自己想要的版本下载即可.下载网址:https://opencv.org/releases/ 2.配置环境变 ...
- SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序
SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序 快速开始 本指南将引导您完成创建“hello world”应用程序的过程,该应用程序在浏览器和服务器之间来回发送消 ...
- SpringBoot学习笔记(10):使用MongoDB来访问数据
SpringBoot学习笔记(10):使用MongoDB来访问数据 快速开始 本指南将引导您完成使用Spring Data MongoDB构建应用程序的过程,该应用程序将数据存储在MongoDB(基于 ...
- Springboot学习笔记(六)-配置化注入
前言 前面写过一个Springboot学习笔记(一)-线程池的简化及使用,发现有个缺陷,打个比方,我这个线程池写在一个公用服务中,各项参数都定死了,现在有两个服务要调用它,一个服务的线程数通常很多,而 ...
随机推荐
- 深度剖析Java的volatile实现原理,再也不怕面试官问了
上篇文章我们讲了synchronized的用法和实现原理,我们总爱说synchronized是重量级锁,volatile是轻量级锁.为什么volatile是轻量级锁,体现在哪些方面?以及volatil ...
- ahk精简自用
;9:03 2022/8/20 自用 #NoEnv #Warn #SingleInstance Force ;设工作目录为桌面 SetWorkingDir %A_Desktop% ;托盘提示必须放在热 ...
- JK触发器与模12计数器
JK触发器 JK触发器具有保持,置0,置1和翻转四个功能. 则可得出次态方程:\(Q_{n+1} = JQ_n'+K'Q_n\) Design `timescale 1ns / 1ps module ...
- 开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录
前言 以前在 github 上自己开源了一些项目.碍于技术与精力,大部分项目都是 java 实现的. 这对于非 java 开发者而言很不友好,对于不会编程的用户更加不友好. 为了让更多的人可以使用到这 ...
- 【k8s连载系列】2. k8s整体架构
# 一.Kubernetes的整体架构 学习k8s,最终目的是为了部署应用,部署一个完整的k8s, 就要知道k8s的组成.k8s主要包含两大部分: 中间包含三个绿色包的是master服务器. 下面是n ...
- 嵌入式-C语言基础:实现字符串拷贝函数
自己实现一个字符串的拷贝函数 #include<stdio.h> #include<stdlib.h> #include <string.h> char * mys ...
- day01-Tomcat框架分析
引入课程和Maven 1.Maven maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com) maven仓库是国外的 ...
- centos8 telnet安装
1. 装包 yum -y install telnet telnet-server 2. 启服务 systemctl enable telnet.socket --now 3. 防火墙开放端口 fir ...
- vs同步配置
做法(整个流程的过程):1.安装插件2.在GitHub上生成token3.获取gistid4.使用2,3步生成的token和gistid 1.在vscode上安装 settings sync 插件(我 ...
- day07 方法重写&super、this、static关键字&JVM的类加载顺序题目
day07 方法重写 1)重写发生在子父类当中 2)方法名.参数列表.返回值均相同 3)重写的方法,方法体或者访问控制修饰符不同 4)子类方法的访问权限不能缩小,比如父类是int,子类重写权限不能是b ...