文章目录
- SpringBoot入门
- 一、关于:约定大于配置
- 二、创建SpringBoot项目---起步案例
- 创建SpringBoot项目
- 案例
- 创建项目方式2:通过aliyun网站创建
- 创建项目方式3---基于官方地址创建
- 三、配置项目
- 项目结构
- 自定义配置
- 四、SpringBoot原理(重点)
- 4.1.starter
- 4.2、SpringBoot应用的POM文件(重要)
- 4.3、Java配置方式
- 4.4、SpringBoot自动配置
- 4.5、全局配置文件
- 五、多环境配置
什么是框架?
框架就是软件的半成品。

SpringBoot入门
一、关于:约定大于配置
SpringBoot采用了习惯优于配置/约定大于配置的理念快速的搭建项目的开发环境,我们无需或者进行很少的相关Spring配置就能够快速的将项目运行起来。
即尽可能的减少配置,用约定去做配置,官方提供了很多约定,我们只需要在约定的地方配置即可。
什么是约定?如何理解?
比如我们的javaweb项目,配置文件必须放在resouces文件下,前端代码必须放在webapps文件夹下 ,java代码放在Java文件夹下。把对应的文件放在指定的位置就不用额外的配置了,springboot也是这种约定配置。
二、创建SpringBoot项目—起步案例
创建SpringBoot项目
创建的时候网址换一下更快,一般不会出问题
https://start.aliyun.com
过程需要网络畅通
等待项目加载完成。项目(就是web项目)结构:
如果刚进去是报错页面,就是maven没有正确添加,正确配置一下Maven就可以了
案例
package com.situ.bean;import lombok.*;import java.time.LocalDate;//使用lombok:在pom.xml里面引入依赖,添加getter和setter方法
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Student {//数据模型(每一行student的数据存一行),用来保存数据://属性的名字尽量要和数据库里面的名字对应,同时遵循java的命名规范private Integer id;private String stuId;private String name;}
package com.situ.controller;import com.situ.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.beans.ConstructorProperties;@Controller //表示这是一个控制器类
@RequestMapping("/test") //为这个控制器类配置一个地址public class TestController {@ResponseBody //能把对象转成Json返回给前端@GetMapping("/hello")//为这个方法配置一个地址public Student hello(){//这个方法用于创建了Student对象,并添加@ResponseBody注解,把对象转成Json返回给前端:Student zs = new Student(1, "22120", "zs");return zs;//关于这个方法的访问:在main方法里面启动程序,然后在地址栏输入localhost:8080/test/hello}}
示例二:
在浏览器页面输入的参数,我们能够接收,接收参数并进行封装成对象,然后将对象返回json形式 :
package com.situ.controller;import com.situ.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller//代表这是一个控制器
@RequestMapping("/test") //配置地址
public class Test2Controller {//现在要求在浏览器页面输入的参数,我们能够接收,接收参数并进行封装成对象,然后将对象返回json形式 :@ResponseBody@GetMapping("/hello2") //给这个方法配置地址public Student test2(Student student){//能自动将前端发过来的数据映射到对象的属性,前提:前端传参的参数名和属性名要完全一致。System.out.println(student);return student;//将返回数据转成Json}
}
创建项目方式2:通过aliyun网站创建
网址:https://start.aliyun.com/
添加我们所需要的东西就行:比如:
获取源码
解压缩就能看见这是一个web项目,用我们的IDEA打开就行了。是可以正常启动的。
创建项目方式3—基于官方地址创建
也可以通过默认地址创建—基于官方地址创建。版本是3.x,但是经常出问题,所以有人发明了start.springboot.io
,可以将地址换成这个,和官网的其实一样
同样也能通过官网直接创建项目
三、配置项目
项目结构
注意:我们自定义的代码、包和启动类是平级的,我们写SpringBoot项目,Java代码一定要写在和启动类平级或者写在和启动类平级的包里面,这样才能生效。
写在其它地方也是可以的,但是需要额外配置很多东西。
静态资源:html/css/js/图片… 放在static文件夹下。
templates:不能放jsp(图片写错了),能放thymeleaf。是放动态资源的
自定义配置
# 应用服务 WEB 访问端口tomcat的端口号
server.port=8080# 自定义配置:添加上下文路径:
server.servlet.context-path=/start
#那么项目的访问路径就变成了:localhost:8080/start/...
#目前就是变成了:localhost:8080/start/test/hello
四、SpringBoot原理(重点)
为什么能简化整合(不用写那么多配置)?为什么坐标不用写版本?
4.1.starter
一个starter就是一个开发场景的支持( 依赖(jar包) + 配置)。SpringBoot为我们提供了简化企业级开发绝大多数场景的支持(提供了多个starter),
我们在进行项目开发的过程中只需引入对应的starter(创建SpringBoot应用时可选择),
相关的依赖和配置就会被内置到项目中(消除人工配置)。
原来的spring和其它框架整合,需要写很多配置,现在有了starter,starter里面自带配置,就不用自己写了。
这个配置写了,只是不用我们程序员自己写了,由官方开发人员写好了。
也就是说用springboot去整合其他的框架的时候,我们要去找对应的starter,有了starter,jar包和配置都有了。通用的约定配置他可以写,但是一些特定的比如连接数据库的四大参数他不能写 ,那这种就写在了自定义配置部分。
4.1.1、starter依赖
一个starter依赖表示的不是一个依赖,而是某种开发环境所需的一组依赖
Spring Web — spring-boot-starter-web
MyBatis Framework — mybatis-spring-boot-starter
依赖:
4.1.2、starter配置
pom文件中引入的starter除了导入依赖,还引入了配置
配置用被@Configuration标注的配置类表示,配置在配置类中进行配置
配置类中有被@Bean标注的方法,用来生成特定的对象并让SpringIOC容器进行管理
通过以上的操作,大部分配置用户就不用自己进行配置了。
以后的开发中,如果需要用到哪个模块,就去导入对应的starter。
配置:
4.2、SpringBoot应用的POM文件(重要)
以前都需要写GAV坐标,现在我们都不需要写GAV坐标了。其实GAV版本是有的,原因:
4.2.1、基于Spring官方服务器创建的SpringBoot应用
继承spring-boot-starter-parent.pom
<?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><!-- SpringBoot应用中的pom 继承了spring-boot-starter-parent.pom --><!-- spring-boot-starter-parent.pom又继承了spring-boot-dependencies.pom--><!-- 在spring-boot-dependencies.pom已经对主流的框架的版本进行了声明 --><!-- 继承父工程:就继承父工程里面所有的配置--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.4</version><relativePath/> </parent></project>
引入了maven对springboot应用支持的插件spring-boot-maven-plugin<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>tech.code2048.springboot.demo.SpringbootDemo1Application</mainClass><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>
分析
pom工程继承,继承了父工程之后就能够使用父工程中的“配置”;
我们自己创建的SpringBoot工程继承自spring-boot-starter-parent这个父工程;
spring-boot-starter-parent继承的spring-boot-dependencies;
spring-boot-dependencies里面有dependencyManagement。
dependencyManagement的作用?
1.声明了相关jar包的版本(只是声明,没有导入的作用)
2.如果在pom.xml文件中引入了该jar包不指定版本,就使dependencyManagement声明的版本。
3.如果声明的版本不合适,就要在导入jar包的位置声明自己需要的版本。
用来规定项目引入的依赖的版本;
如果项目的dependency标签中没有指定版本,那么就使用dependencyManagement中规定的版本;
dependencyManagement只是规定依赖的版本,并没有引入依赖;
如果dependencyManagement中定义的版本不合适,就需要自己在依赖中手动指定版本去覆盖。
4.2.2、基于Aliyun服务器创建的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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>tech.code2048</groupId><artifactId>01_springboot_start_aliyun</artifactId><version>1.0.0</version><name>01_springboot_start_aliyun</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.4.1</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
分析:
没有继承父工程;
直接定义dependencyManagement。
4.3、Java配置方式
如果我们需要在SpringBoot应用中整合一种新的开发场景,只需在pom.xml引入对应的starter即可
一个starter不仅包含依赖,还包含相应的配置,starter中包含的配置都是通过Java类实现的——Java配置方式
4.3.1、Spring版本发展
随着Spring版本的迭代,配置方式也在发生变化Spring 1.x
所有的bean的配置只能通过xml完成
Spring 2.x
基于JDK1.5对注解的支持,Spring 2.x开始支持注解
企业开发中到底是用xml配置还是用注解?
对基础配置、引用的第三方依赖中的配置使用xml完成:例如数据源配置
业务开发使用注解:例如controller、service
Spring 3.x
Spring开始提供基于Java的配置方式
Spring 4.x
xml、注解、Java
4.3.2、xml配置
<!--applicationContext.xml-->
<bean id="stu" class="tech.code2048.beans.Student"></bean>
<bean id="date" class="java.util.Date"></bean>
4.3.3、注解配置
@Component
public class Student{}
4.3.4、Java配置方式
创建配置类
@Configuration
public class SpringConfig{@Beanpublic Date getDate(){return new Date();}
}
4.4、SpringBoot自动配置
4.5、全局配置文件
SpringBoot针对不同的开发场景提供默认的属性配置,如果默认的配置不能满足开发的需要,我们需要对属性配置进行修改
SpringBoot应用提供了一个全局配置文件application.properties用于进行自定义配置
全局配置文件支持两种语法配置:
properties键值对配置
yaml语法的配置
4.5.1、基于properties配置
配置数据源 (key必须按照SpringBoot的要求)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=admin123配置映射文件路径及实体类的包名
mybatis.mapper-locations=classpath:mappers/*Mapper.xml
mybatis.type-aliases-package=tech.code2048.springboot.demo.entity
4.5.2、基于yaml配置
缩进原则:缩进必须有两个空格,下一级必须比上一级有两个空格。
值的前面必须有一个空格
spring:datasource:url: jdbc:mysql://localhost:3306/db_2mybatis?characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: admin123mybatis:mapper-locations: classpath:mappers/*Mapper.xmltype-aliases-package: tech.code2048.springboot.demo.entity
4.5.3、常用的全局配置
server:port: 9999servlet:context-path: /start
4.6、自定义Banner
在SpringBoot应用启动的时候是有一个默认启动图案的。
这个默认图案支持自定义配置
在resources目录创建一个banner.txt
在banner.txt文件中定义图案http://patorjk.com/software/taag/
五、多环境配置
开发
测试
生产