SpringBoot起步配置文件

SpringBoot起步配置文件

大名鼎鼎的SpringBoot的学习开始了
学习教程是根据尚硅谷的SpringBoot核心篇和整合篇完成
只有基础知识部分,会将原教程的内容进行摘抄,来便于自己之后的记忆


SpringBoot起步

基本介绍

自己的理解

约定大于配置
SpringBoot是对SSM或者需要整合的其他框架的再次封装(比如SpringData JPA,MyBatis,Rides..等等)
砍掉了,SSM或者其他框架的复杂繁琐的配置文件。
无需手写复杂的配置文件,因为在内部SpringBoot帮助我们已经实现完毕了。
自动装箱
SpringBoot极大简化了项目中的jar包的依赖,将做各种需求需要的jar包集成在一个依赖中,需要那些模块直接引入。
总结
总的来所SpringBoot就是用来解放我们程序员的双手的,减少了之前SSM整合时候大量的冗余操作,使得Web开发变得更容易上手。

优点介绍

  • 快速创建独立运行的Spring项目以及与主流框架集成
  • 使用嵌入式Servlet容器,应用无需打成WAR包
  • starters自动依赖与版本控制
  • 大量的自动配置,简化开发,也可修改默认值
  • 无需配置XML,无代码生成,开箱即用
  • 准生产环境的运行时应用监控
  • 与云计算的天然集成

起步环境搭建(HelloWord程序)

QuickStart

  1. 创建一个maven项目
  2. 在pom.xml文件内添加依赖
	1. 父容器依赖
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/>
</parent>
	2. web开发依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
	3. java版本锁定
<properties>
        <java.version>1.8</java.version>
</properties>
  1. 编写主程序启动SpringBoot应用
@SpringBootApplication
public class 主程序类名 {
    public static void main(String[] args) {
        SpringApplication.run(主程序的类命.class, args);
    }
}

这里的主程序名可以自己定义,但是最好和项目名相同。

HelloWord Creat

放置主程序

将之前编写的主程序放在项目的根目录下,也就是需要和Controller,Service,Pojo,Mapper同级或者他们的父级,这样SpringBoot会扫描主程序同级或者子级的全部包和类。

编写Controller层实现HelloWord

创建Controller包和HelloWordController类并编写逻辑代码

@Controller
public class HelloWordController() {
    	@RequestMapping("/hello")
   	@ResponseBody
	public String index() {
		return "Hello Word!";
	}
}

HelloWord细节

场景启动器(Starter)

之前导入maven的springboot的web依赖,成为springboot的场景启动器
springboot为我们提供了很多场景启动器,用于应对各种开发场景,在我们用到的时候直接导入即可
会帮助自动依赖绝大多数的jar包

父项目管理依赖的版本

SpringBoot会继承一个父项目,这个父项目会帮我们管理绝大多数的依赖的版本,所以不用我们写版本号

内置TomCat服务器

springboot内置了Tomcat服务器,所以我们只需要编写主程序然后启动即可,springboot内部会帮助我们启动Tomcat并且运行,而且项目不再是一个war包而是一个jar包,把jar包用java -jar 执行即可启动springboot项目

SpringBoot项目创建向导的使用

Spring Initializr :SpringBoot的创建向导,可以帮助我们快速创建一个SpringBoot项目

创建步骤,很简单所以略,写写项目名,选择一下需要的Starter然后一直下一步直到完成即可
这样创建好的SpringBoot项目会帮我们配置好继承的父类容器,和之前选好的Starter依赖,还会帮助我们创建好项目的基本目录,并且附带一个主程序。
真正实现了,创建了就使用

SpringBoot的配置文件

SpringBoot的配置文件分为两种,porperties或者yml
两个文件名称必须是固定的,Application.porperties或者Application.yml

基本语法

porperties

和之前配置的方式基本相同

person.last-name=张三

yml

使用键值对,用:来分隔键和值
在表明上下级时用空格来进行对齐类似于python

server:
 port: 8081

注意这里的port: 后有一个空格,并且这个空格不可以省略

写入复杂数据类型

# Map
maps: {k1: v1,k2: v2}
# List
lists:
 - lisi
 - zhaoliu

注意空格

自定义类的配置文件映射

对于映射配置文件有两种方式,分别是自动映射ConfigurationProperties和手动映射Value
而每种方式下都可以使用porperties文件或者yml文件

自动映射

在需要获取配置文件的属性上标注@ConfigurationProperties(prefix = "person")注解这里的prefix是代表前缀,表示只会使用这个前缀下的属性
不要忘记标注@Component注解将Pojo类的管理权交给Spring不然@ConfigurationProperties不会起作用

标注完成后,在配置文件中的使用标注的前缀,名称为属性就会被自动注入到属性中
这种注入方式支持松散绑定语法
比如类中的属性为lastName,在配置文件中我们写成last-name也可以自动的注入

手动映射

在需要映射的属性上标注@Value("${}")注解在注解体中使用${}写入在配置文件中的名称即可
支持spel语法,使用#{}中可以写入java语法的表达式
不支持松散语法绑定

@ConfigurationProperties和@Value比较

比较项目ConfigurationPropertiesValue
功能批量注入配置文件中的属性一个一个注入
松散绑定支持不支持
SpEl不支持支持
JSR303校验支持不支持
复杂类型封装支持不支持

@propertySource&@importResource

@PropertySource

@PropertySource:加载指定的配置文件

语法:@PropertySource(value="classpath:配置文件的地址")

之前的@ConfigurationProperties是从全局配置文件中获取配置文件,没有办法获取指定配置文件的配置

@importResource

@importResource:导入spring的配置文件,并使其生效,该注解标注在配置类上

语法:``@importResource(locations={"classpath:配置文件地址"})```

但是springboot官方不推荐使用配置文件的方式驱动springboot,建议使用全注解得分方式来配置

配置类

@Configurtion:将当前类标注为配置类
@Bean:将方法的返回值添加到容器中

@Configuration
public class MyAppConfig {
    // 将方法的返回值添加到容器中;容器中的默认id是方法名
    @Bean
    public HelloService helloService() {
        System.out.println("添加组键了");
        return new HelloService();
    }
}

配置文件的占位符和随机数

RandomValuePropertySource

配置文件中可以使用随机数
$

$

$

${random.int(10)}
${random.int[1024,65536]}

属性配置占位符

app.name=MyApp
app.description=${app.name}is ...

可以在配置文件中引用前面用过的我属性(优先级前面配置过的这里都能用)
${app.name:默认值}这里的默认值是指前面没有这个属性,就会默认使用默认的值

Profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活或者指定参数的方式实现快速切换环境

多个Profile

在主配置文件编写的时候文件名可以是,application-.properties

默认使用application.properties

yml支持多文档块方式

server:
 port: 8081
spring:
 profiles:
   active: dev
---
server:
 port: 8083
spring:
 profiles:
   active: dev
---
server:
 port: 8088
spring:
 profiles:
   active: prod

文档块之间用---分割

激活方式

命令行方式

启动时加上参数,--spring.profile.active=dev

配置文件方式

在application.properties或者 yml的第一个文档块中写入
spring.profiles.active=dev,这是properties语法yml注意切换语法

jvm参数

在idea中的jvm参数中写入-Dspring.profiles.active=dev

配置文件的加载位置

springboot启动会扫描一下位置的application.properties或者yml文件作为springboot的配置文件

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级内容

可以是用--spring.config.location=路径的方式指定配置文件

外部配置的加载顺序

  • 命令行参数
  • 来自java:comp/env的JNDI属性
  • java系统属性
  • 操作系统环境变量
  • jar包外部的profile配置文件
  • jar包内部的profile配置文件
  • jar包外部的不带profile配置文件
  • jar包内部的不带profile配置文件
  • @Configuration注解类上的@PropertySource

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.byfree.top/archives/sptingbootconfig