spring温习笔记(七)springboot工程基础

什么是springboot

Spring Boot是一个便捷搭建 基于spring工程的脚手架;作用是帮助各位大猿快速搭建大型的spring 项目。简化工程的配置,依赖管理;实现开发人员把时间都集中在业务开发上。

springboot 的重要特点

下面给出从官网描述的特点

  1. Create stand-alone Spring applications
  2. Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
  3. Provide opinionated ‘starter’ dependencies to simplify your build configuration
  4. Automatically configure Spring and 3rd party libraries whenever possible
  5. Provide production-ready features such as metrics, health checks, and externalized configuration
  6. Absolutely no code generation and no requirement for XML configuration

英文不好的各位大猿建议恶补一下英语,不然在成就在猿这一途的修行成就注定有限。

springboot 的应用

在spring官网上有快速入门的案例,可以瞅瞅如何快速入门
在这里插入图片描述
在这里插入图片描述
然后就参照 springboot快速上手案例即可。
本小结重点论述如何在maven 工程中快速建立springboot项目

采用maven快速构建springboot 项目

导入依赖

<?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> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.3.0.RELEASE</version> </parent> <groupId>org.example</groupId> <artifactId>springboot</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!-- <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>-->
</project>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

编写启动引导类

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

编写controller

@RestController
@RequestMapping("/userController")
public class UserController { @RequestMapping("/helloPython") public String helloPython(){ return "hi python and java"; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意启动引导类的位置所在,最好的结构模式如下:
在这里插入图片描述
也可以指定包扫描,但本小结先不进行探讨了。

spring配置的历史

事实上,在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,我们不妨来回顾一下

Spring的历史:

Spring1.0时代:

在此时因为jdk1.5刚刚出来,注解开发并未盛行,因此一切Spring配置都是xml格式,感觉非常的爽歪歪。

Spring2.0时代:

Spring引入了注解开发,但是因为并不完善,因此并未完全替代xml,此时的猿友们往往是把xml与注解进行结合,在小猿前面学习web项目的时候也都是如此。

Spring3.0及以后

3.0以后Spring的注解已经非常完善了,因此Spring推荐大家使用完全的java配置来代替以前的xml,不过似乎在国内并未推广盛行。只有当Spring Boot来临,各位猿才慢慢认识java配置的优雅。

java bean配置案例

在配置项配置到类中

通用配置方法

小猿记得在以前的文章中提到过,若想观看请查看小猿的这篇文章请查看Spring 温习笔记(二)Spring与注解,但本章中小猿继续复习注解配置,首先引入properties文件

jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

  
 
  • 1
  • 2
  • 3
  • 4
编制数据源类
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JDBCConfig { @Value("${jdbc.url}") private String url; @Value("${jdbc.driverClassName}") private String driverClassName; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driverClassName); ds.setUrl(url); ds.setPassword(password); ds.setUsername(username); return ds; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

springboot 的属性注入

属性文件的名称有变化,默认的文件名必须是:application.properties或application.yml
在上面的案例中,我们实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强大,因为它只能注入基本类型值。在Spring Boot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。

@ConfigurationProperties(prefix = "jdbc")
public class JDBCProperties { private String url; private String driverClassName; private String username; private String password; public JDBCProperties() { } public JDBCProperties(String url, String driverClassName, String username, String password) { this.url = url; this.driverClassName = driverClassName; this.username = username; this.password = password; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "JDBCProperties{" + "url='" + url + '\'' + ", driverClassName='" + driverClassName + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

这注入的时候可能会报错
在这里插入图片描述
需要引入一个jar包。

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在类上通过@ConfigurationProperties注解声明当前类为属性读取类prefix=“jdbc” 读取属性文件中,前缀为jdbc的值。在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致需要注意的是,这里我们并没有指定属性文件的地址,所以我们需要把jdbc.properties名称改为application.properties,这是Spring Boot默认读取的属性文件名

修改数据源获取类

@Configuration
/*@PropertySource("classpath:jdbc.properties")*/
@EnableConfigurationProperties(JDBCProperties.class)
public class JDBCConfig { /* @Value("${jdbc.url}") private String url; @Value("${jdbc.driverClassName}") private String driverClassName; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driverClassName); ds.setUrl(url); ds.setPassword(password); ds.setUsername(username); return ds; }*/ @Bean public DataSource getDataSource(JDBCProperties jdbcProperties){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(jdbcProperties.getDriverClassName()); ds.setUrl(jdbcProperties.getUrl()); ds.setPassword(jdbcProperties.getPassword()); ds.setUsername(jdbcProperties.getPassword()); return ds; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

优势:
从操作过程上来看,注入的这种方式似乎比传统java配置文件注入更加复杂繁琐。但从Relaxed binding:松散绑定不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象。@value注解就难以完成这样的注入方式。meta-data support:元数据支持,帮助IDE生成属性提示(写开源框架会用到),所以用springboot 的属性注入方式好处还是多多。

在方法中设定配置项

springboot 更简介化的注入

上述我们已经完成了比较松散绑定的属性注入方式,而springboot给我们提供更加简洁的,更加优雅的注入方式,事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties,将该类上的所有注解去掉)中。而是直接在需要的地方声明即可;再次修改 JdbcConfig类为如下代码:

@Configuration
public class JDBCConfig1 { @Bean @ConfigurationProperties(prefix = "jdbc") public DataSource getDataSource(){ return new DruidDataSource(); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

springboot配置文件

在javaweb项目中常用的配置文件种类较多,如xml,properties,yaml,
在springboot 中一般使用yaml 或yml来主流配置文件来进行一些文件的配置,本小结就探讨如何采用yml文件来实现springboot 项目的配置。

yml配置文件的特征

  1. 树状层级结构展示配置。
  2. 配置项之间有关系则分行空两格。
  3. 配置项有值,则需要写: 之后空格再写值。

多个yml配置文件

当有多个yml配置文件;在spring boot中是被允许的。这些配置文件的名称必须为application-***.yml,并且这些配置文件必须要在application.yml配置文件中激活之后才可以使用。
在这里插入图片描述
application-app

feitian:
  app: xueshanfeitian.app

  
 
  • 1
  • 2

application-def

feitian:
  url: www.feitian.com

  
 
  • 1
  • 2

在application.yml需要激活这个配置文件

### active files
spring:
  profiles: active: def,app

  
 
  • 1
  • 2
  • 3
  • 4

在controller中需要用@Value注解来使用
在这里插入图片描述

yml文件与properties文件的优先级

如果 properties和yml配置文件同时存在在spring boot项目中;那么这两类配置文件都有效。在两个配置文件中如果存在同名的配置项的话会以properties文件的为主。

springboot 自动装配置流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看配置文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看一个典型的注解
在这里插入图片描述
在这里插入图片描述

自动装配后如何加入个性化配合呢

其奥妙就在于如何进行对原有默认配置进行覆盖,如
如何修改springMVC配置文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小猿的本小结内容就到此为止吧。

文章来源: blog.csdn.net,作者:xueshanfeitian,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/xueshanfeitian/article/details/114554477

(完)