spring boot基础

目录

spring boot的核心功能

spring boot环境搭建

定义引导类

修改spring boot启动注释

spring boot热部署

使用idea快速创建spring boot项目

分析起步依赖

分析自动配置

spring boot配置文件的类型

读取配置文件

Environment获取配置数据

EnableConfigurationproperties(类方式属性)

configuration-processor(配置提示)

spring boot扫描包注解

profile切换spring boot环境

spring boot访问静态资源

spring boot 异步处理(多线程)

spring boot的缓存

spring自定义starter

spring boot和maven的部署问题解决


 

前言

利用spring boot来管理依赖,通过内置的服务器直接运行项目

spring boot 还提供了自动配置,那么复杂的配置可以一步到位

sprig boot 基础(2)  https://blog.csdn.net/yzj17025693/article/details/90601997

spring boot其它详细配置  https://www.cnblogs.com/chen-lhx/p/7592523.html

 

 

spring boot的核心功能

spring boot基础_第1张图片

 

spring boot环境搭建

导入起步依赖,这个parent工厂里有很多的jar被管理了,子工厂直接引入即可

spring boot基础_第2张图片

 

导入web功能起步依赖

spring-boot-starter-web起步依赖,就是导入spring和spring mvc的jar包

spring boot基础_第3张图片

 

定义引导类

定义一个引导类,需要在类上加上@SpringBootApplication

run方法是执行引导类,传入引导类的字节码

spring boot基础_第4张图片

看输出信息

我们知道spring boot有一个内置的服务器,随着引导类的启动而启动

输入localhost:8080 可以直接访问,但是我们没有任何的功能

spring boot基础_第5张图片

编写controller,直接返回一个字符串,加上Response代表返回json,也就是返回一个字符串到页面

直接访问请求

我们发现我们没有导入spring mvc的包,也没有配置注解扫描,也可以使用注解

因为我们导入了 web功能起步依赖

并且转换到页面的时候,也不会乱码,默认sprig boot已经给你配置了消息转换器

spring boot基础_第6张图片

 

修改spring boot启动注释

spring boot启动后会出现这些输出banner(横幅),这个其实是可以替换的,当作娱乐了

spring boot基础_第7张图片

有专门的网站可以制作这种文字

spring boot基础_第8张图片

把上面的文本复制到一个记事本里,命名为banner,然后启动即可

 

 

spring boot热部署

一些静态的页面和数值在热部署的情况下,不需要重启服务器或者引导类

https://www.cnblogs.com/yjmyzz/p/use-devtools-of-spring-boot-framework.html

不过编译太过于频繁也不好,我习惯于关掉

spring boot基础_第9张图片

 

使用idea快速创建spring boot项目

spring boot基础_第10张图片

spring boot基础_第11张图片

spring boot基础_第12张图片

生成的目录可以进行简化,mvnw.cmd可以定义一些常用的maven命令

spring boot基础_第13张图片

spring boot基础_第14张图片

 

分析起步依赖

spring boot基础_第15张图片

进入parent

发现它会加载3个配置文件

但是又会排除这3个配置文件,所以这3个配置文件不是必须的

spring boot基础_第16张图片

start-parent又依赖父工程一个boot-dependencise 

里面会依赖很多包

spring boot基础_第17张图片

 

分析自动配置

我们之前使用spring mvc的时候并没有配置相关的xml,是因为spring boot给我们自动配置了

从这句引导类的注解开始分析

spring boot基础_第18张图片

如果不想某个功能自动配置,希望手动配置,比如solr,可以在注解上加上exclude

而这个后面的类可以在spring-boot-autoconfigure找到

spring boot基础_第19张图片

 

@interface是定义一个注解,这个注解的名称是就是一个类,这里牵扯到注解的编写,不过多的概述

EnableAutoConfiguration就是自动配置

spring boot基础_第20张图片

import的意思是在当前注解下引入其它的配置(AutoConfigLocationImportSelector导入选择器)

spring boot基础_第21张图片

Candidate(候选) 箭头所指是获取候选的配置,也就是可选择的配置

spring boot基础_第22张图片

通过加载工厂名获取配置集合

这个配置在META-INF下,不过是源码里的META-INF

打开源码,打开spring.factories

spring boot基础_第23张图片

spring boot基础_第24张图片

分析一个具有代表性的

@Bean注解等价于配置文件中的标签,明确的告诉spring,你能从这个返回中获取一个bean放入spring容器

一般都是返回一个对象

上面EnableAutoConfigurationProperties就是自动开启配置,点开serverProperties

spring boot基础_第25张图片

还有一个prefix前缀,修改的时候需要加上这个前缀才能找到

spring boot基础_第26张图片

在源码的json里已经给你配置了,在某些地方会加载json数据,并且给上面属性赋值,这里就不深究了

spring boot基础_第27张图片

而这3个配置文件就是可以用来覆盖之前配置的数值

spring boot基础_第28张图片

创建同名文件在资源目录下,会被自动扫描,这时候启动的时候就变成了8081

spring boot基础_第29张图片

 

spring boot配置文件的类型

上面我们知道想要修改默认的配置文件,可以通过3种配置文件,properties,yml,yaml

spring boot基础_第30张图片

spring boot基础_第31张图片

对象数据和map数据一样的

spring boot基础_第32张图片

spring boot基础_第33张图片

spring boot基础_第34张图片

yml修改tomcat启动端口

优先加载yml,最后加载properties,后面的会覆盖前面的

spring boot基础_第35张图片

 

 

读取配置文件

使用@Value把配置文件里的数据映射到java中

这个name是单一数据,如果是对象里的name,那么需要 对象.name

安全映射

当加上了prefix指定了配置文件里的对象前缀后,那么就不需要加@Value

不过,这些属性就需要加上set方法.比如依然获取不到值

spring boot基础_第36张图片

 

Environment获取配置数据

spring boot基础_第37张图片

 

EnableConfigurationproperties(类方式属性)

我们的属性注入还可以通过类来间接注入

使用Configurationproperties和lombok的@Data注解(简化get/set)来定义属性

spring boot基础_第38张图片

当然还需要写application配置文件

spring boot基础_第39张图片

使用EnableConfigurationproperties来自动配置类,会找到对应的类型注入进去

这个类记得写上@Configuration注解

spring boot基础_第40张图片

另一种方式,在方法上加上ConfigurationProperties

会检查返回的类里面有没有,对应的jdbc后面属性的set方法,DataSource这个类里有对应的set方法

spring boot基础_第41张图片

 

 

 

configuration-processor(配置提示)

IDEA提示找不到configuration-processor(执行器),这是一个警告

右边打开文档

在maven里引入依赖,这时候我们配置yml的时候会有对应的提示,比如对象里有什么属性

spring boot基础_第42张图片

 

spring boot扫描包注解

@EntityScan  这个扫描实体类,这个是spring boot注解的功能

@ComponentScan   这个是扫描普通类,是spring自带的注解功能,使用了spring注解的都要扫描到

只写一个springbootapplication的情况下,会扫描启动类包下的所有子包

spring boot基础_第43张图片

所以创建项目的时候,一般都会创建在外层创建,这样会自动扫描

但是如果其它的包不在同一个工程目录下,依赖了其它项目后,还需要用上面的注解来添加指定的包

spring boot基础_第44张图片

 

profile切换spring boot环境

profile介绍  https://blog.csdn.net/yzj17025693/article/details/90549167

prod是生产环境,dev是开发环境,sit是测试环境,这些是我们自己定义的而已,不是固定的

spring boot基础_第45张图片

只需要创建对应的配置文件

spring boot基础_第46张图片

然后在application.properties下使用spring.profiles.active=xxx  这个xxx就是application- 后面的名称

 

spring boot访问静态资源

多个路径用逗号隔开即可

spring boot基础_第47张图片

只要放到classpath下的public和static目录下的静态资源,直接可以访问,访问的时候不需要写目录

因为resources下的文件编译后就会放到classpath根目录

当然也可以设置spring-resources-static-locations=xxx   但是如果设置了,默认的就失效了

spring boot基础_第48张图片

 

spring boot 异步处理(多线程)

之前实现多线程,是需要用我们的类继承Thread或者使用Runable创建线程

现在只需要在方法上定义@Async,那么这就是一个线程安全的方法,自动加锁了的

AsyncResult是spring的类,终究父类还是Future

spring boot基础_第49张图片

Future类的理解(这里不做过多的理解)

也就是说,可以拿到线程的状态

这样在下面就可以来判断线程的状态

spring boot基础_第50张图片

还需要在启动类开启异步调用

spring boot基础_第51张图片

 

 

spring boot的缓存

参考  https://my.oschina.net/u/3452433/blog/1831026

启动类开启注解

spring boot基础_第52张图片

 

spring自定义starter

如何编写自动配置

spring boot基础_第53张图片

 

需要做一个启动器,这个启动器只是用来引入相关的jar的,我们的主项目中就是引入这个

spring boot基础_第54张图片

 

然后autoconfigurer就是自动配置的jar

需要在autoconfigurer先引入

spring boot基础_第55张图片

spring boot基础_第56张图片

需要get/set方法

spring boot基础_第57张图片

写一个配置类,这个prefix前缀是在application.yml里的前缀

spring boot基础_第58张图片

使用了enableconfigurationproperties,后面指定类,然后在类里注入

spring boot基础_第59张图片

利用@Bean注解,返回serivce对象,并且把properties注入进去

spring boot基础_第60张图片

在resources的META-INF下创建spring.factories

spring boot基础_第61张图片

在主项目里,引入依赖,首先要把上面的项目给安装到maven里

spring boot基础_第62张图片

引入了依赖后可以直接注入HelloService

spring boot基础_第63张图片

然后在配置文件里指定前缀和后缀,输入的时候就会在 haha 的前后加上

 

spring boot和maven的部署问题解决

参考 https://blog.csdn.net/hotdust/article/details/51404828

参考  https://www.cnblogs.com/thinking-better/p/7827368.html

参考  https://www.cnblogs.com/liaojie970/p/9007577.html

spring boot和maven的插件,简化了部署了,之前是使用maven-tomcat插件,现在是spring boot和maven的插件,进行了2次打包后

能够让jar直接运行,但是这时候如果编译maven就会出问题

在拆分项目之后,所有工程继承于父工程

当pom文件不是继承自spring-boot-starter-parent,这时候可以排除repackage,不然编译会报错

spring boot基础_第64张图片

当pom文件继承自spring-boot-starter-parent,可以试试在子工程的pom.xml下指定启动类

注意,包含了spring boot启动类的项目可以不用加这个,因为直接启动就编译了

spring boot基础_第65张图片

 

 

 

 

 

 

 

你可能感兴趣的:(java,web)