SpringBoot

SpringBoot简介

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程

入门案例

1.创建新模块,选择Spring初始化,并配置模块相关基础信息

2.选择当前模块需要使用的技术集

3.开发控制器类

1 @RestController
2 @RequestMapping("/books")
3 public class BookController {
4     @GetMapping("/{id}")
5     public String getById(@PathVariable Integer id) {
6         System.out.println("id ==> " + id);
7         return "hello , spring boot! ";
8     }
9 }

4.运行自动生成的Application类

最简SpringBoot程序所包含的基础文件:
  pom.xml文件
  Application类

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <parent>
 6         <groupId>org.springframework.boot</groupId>
 7         <artifactId>spring-boot-starter-parent</artifactId>
 8         <version>2.5.0</version>
 9     </parent>
10     <groupId>com.test</groupId>
11     <artifactId>springboot-01-quickstart</artifactId>
12     <version>0.0.1-SNAPSHOT</version>
13     <dependencies>
14         <dependency>
15             <groupId>org.springframework.boot</groupId>
16             <artifactId>spring-boot-starter-web</artifactId>
17         </dependency>
18     </dependencies>
19 </project>
1 @SpringBootApplication
2 public class Application {
3     public static void main(String[] args) {
4         SpringApplication.run(Application.class, args);
5     }
6 }

 Spring程序与SpringBoot程序对比

注:基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构

基于SpringBoot官网创建项目

SpringBoot项目快速启动

1.对SpringBoot项目打包(执行Maven构建指令package(执行package前需执行clean))

2.执行启动指令

java -jar springboot_01_quickstart.jar    # 项目的名称根据实际情况修改

注:jar支持命令行启动需要依赖maven插件支持,请确认打包时是否具有SpringBoot对应的maven插件

1 <build>
2     <plugins>
3         <plugin>
4             <groupId>org.springframework.boot</groupId>
5             <artifactId>spring-boot-maven-plugin</artifactId>
6         </plugin>
7     </plugins>
8 </build>

SpringBoot概述

SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
Spring程序缺点:
  配置繁琐
  依赖设置繁琐
SpringBoot程序优点:
  自动配置
  起步依赖(简化依赖配置)
  辅助功能(内置服务器,……)

起步依赖

starter:
  SpringBoot中常见项目名称,定义了当前项目使用的所有项目坐标,以达到减少依赖配置的目的
parent:
  所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
  spring-boot-starter-parent(2.5.0)与 spring-boot-starter-parent(2.4.6)共计57处坐标版本不同

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <parent>
 6         <groupId>org.springframework.boot</groupId>
 7         <artifactId>spring-boot-starter-parent</artifactId>
 8         <version>2.5.0</version>
 9     </parent>
10     <groupId>com.test</groupId>
11     <artifactId>springboot-01-quickstart</artifactId>
12     <version>0.0.1-SNAPSHOT</version>
13     <dependencies>
14         <dependency>
15             <groupId>org.springframework.boot</groupId>
16             <artifactId>spring-boot-starter-web</artifactId>
17         </dependency>
18     </dependencies>
19 </project>

实际开发
  使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供
  如发生坐标错误,再指定version(要小心版本冲突)

 1 <dependency>
 2     <groupId>junit</groupId>
 3     <artifactId>junit</artifactId>
 4     <version>${junit.version}</version>
 5 </dependency>
 6 <dependency>
 7     <groupId>javax.servlet</groupId>
 8     <artifactId>javax.servlet-api</artifactId>
 9     <version>${servlet-api.version}</version>
10 </dependency>

辅助功能

SpringBoot程序启动

1 @SpringBootApplication
2 public class Springboot01QuickstartApplication {
3     public static void main(String[] args) {
4         SpringApplication.run(Springboot01QuickstartApplication.class, args);
5     }
6 }

SpringBoot在创建项目时,采用jar的打包方式。
SpringBoot的引导类是项目的入口,运行main方法就可以启动项目。

使用maven依赖管理变更起步依赖项
Jetty比Tomcat更轻量级,可扩展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty

 1 <dependencies>
 2     <dependency>
 3         <groupId>org.springframework.boot</groupId>
 4         <artifactId>spring-boot-starter-web</artifactId>
 5         <!--web起步依赖环境中,排除Tomcat起步依赖-->
 6         <exclusions>
 7             <exclusion>
 8                 <groupId>org.springframework.boot</groupId>
 9                 <artifactId>spring-boot-starter-tomcat</artifactId>
10             </exclusion>
11         </exclusions>
12     </dependency>
13     <!--添加Jetty起步依赖,版本由SpringBoot的starter控制-->
14     <dependency>
15         <groupId>org.springframework.boot</groupId>
16         <artifactId>spring-boot-starter-jetty</artifactId>
17     </dependency>
18 </dependencies>

基础配置

配置文件格式

修改服务器端口

http://localhost:8080/books/1  =>  http://localhost/books/1
SpringBoot提供了多种属性配置方式:(在resources下创建以下文件)
application.properties

server.port=80

application.yml(常用)

server:
  port: 81

application.yaml

server:
  port: 82

自动提示功能消失解决方案

SpringBoot配置文件加载顺序(了解)

application.properties  >  application.yml  >  application.yaml

注:SpringBoot核心配置文件名为application;
SpringBoot内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性。

yaml

YAML(YAML Ain't Markup Language),一种数据序列化格式。
优点:
  容易阅读
  容易与脚本语言交互
  以数据为核心,重数据轻格式

YAML文件扩展名:
  .yml(主流)
  .yaml

yaml语法规则

大小写敏感
属性层级关系使用多行描述,每行结尾使用冒号结束
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
# 表示注释
核心规则:数据前面要加空格与冒号隔开!!!

yaml数组数据

数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

yaml数据读取

application.yaml

 1 lesson: SpringBoot
 2 
 3 server:
 4   port: 82
 5 
 6 enterprise:
 7   name: itcast
 8   age: 16
 9   tel: 4006184000
10   subject:
11     - Java
12     - 前端
13     - 大数据

1.使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

 1 @RestController
 2 @RequestMapping("/books")
 3 public class BookController {
 4     @Value("${lesson}")
 5     private String lessonName;
 6     
 7     @Value("${server.port}")
 8     private int port;
 9     
10     @Value("${enterprise.subject[1]}")
11     private String[] subject_01;
12 }

2.封装全部数据到Environment对象

 1 @RestController
 2 @RequestMapping("/books")
 3 public class BookController {
 4     @Autowired
 5     private Environment env;
 6     @GetMapping("/{id}")
 7     public String getById(@PathVariable Integer id){
 8         System.out.println(env.getProperty("lesson"));
 9         System.out.println(env.getProperty("enterprise.name"));
10         System.out.println(env.getProperty("enterprise.subject[0]"));
11         return "hello , spring boot!";
12     }
13 }

3.自定义对象封装指定数据(常用)

1 @Component
2 @ConfigurationProperties(prefix = "enterprise")
3 public class Enterprise {
4     private String name;
5     private Integer age;
6     private String tel;
7     private String[] subject;
8     ...    //getter、setter、toString()等方法
9 }
 1 @RestController
 2 @RequestMapping("/books")
 3 public class BookController {
 4     @Autowired
 5     private Enterprise enterprise;
 6 
 7     @GetMapping("/{id}")
 8     public String getById(@PathVariable Integer id){
 9         System.out.println(enterprise);
10         return "hello , spring boot!";
11     }
12 }

自定义对象封装数据警告解决方案:

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-configuration-processor</artifactId>
4     <optional>true</optional>
5 </dependency>

多环境开发配置

多环境启动配置

yaml文件多环境启动

 1 #设置启用的环境
 2 spring:
 3   profiles:
 4     active: dev
 5 ---
 6 #开发(推荐格式)
 7 spring:
 8   config:
 9     activate:
10       on-profile: dev
11 server:
12   port: 80
13 ---
14 #生产(过时格式)
15 spring:
16   profiles: pro
17 server:
18   port: 81
19 ---
20 #测试
21 spring:
22   profiles: test
23 server:
24   port: 82

properties文件多环境启动

主启动配置文件application.properties

spring.profiles.active=pro

环境分类配置文件application-pro.properties

server.port=80

环境分类配置文件application-dev.properties

server.port=81

环境分类配置文件application-test.properties

server.port=82

多环境启动命令格式

带参数启动SpringBoot:

java –jar springboot.jar --spring.profiles.active=test    #修改环境启动
java –jar springboot.jar --server.port=88    #修改端口启动
java –jar springboot.jar --server.port=88 --spring.profiles.active=test    #修改环境及端口启动

参数加载优先顺序:
  查看https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

  

多环境开发控制(Maven与SpringBoot多环境兼容

1.Maven中设置多环境属性(pom.xml)

 1 <profiles>
 2     <profile>
 3         <id>dev_env</id>
 4         <properties>
 5             <profile.active>dev</profile.active>
 6         </properties>
 7         <activation>
 8             <activeByDefault>true</activeByDefault>
 9         </activation>
10     </profile>
11     <profile>
12         <id>pro_env</id>
13         <properties>
14             <profile.active>pro</profile.active>
15         </properties>
16     </profile>
17     <profile>
18         <id>test_env</id>
19         <properties>
20             <profile.active>test</profile.active>
21         </properties>
22     </profile>
23 </profiles>

2.SpringBoot中引用Maven属性(application.yml)

 1 spring:
 2   profiles:
 3     active: ${profile.active}
 4 ---
 5 spring:
 6   profiles: pro
 7 server:
 8   port: 80
 9 ---
10 spring:
11   profiles: dev
12 server:
13   port: 81
14 ---
15 spring:
16   profiles: test
17 server:
18   port: 82

3.执行Maven打包指令

Maven指令执行完毕后,生成了对应的包,其中类参与编译,但是配置文件并没有编译,而是复制到包中

  解决思路:对于源码中非java类的操作要求加载Maven对应的属性,解析${}占位符
4.对资源文件开启对默认占位符的解析(pom.xml)

 1 <build>
 2     <plugins>
 3         <plugin>
 4             <artifactId>maven-resources-plugin</artifactId>
 5             <configuration>
 6                 <encoding>utf-8</encoding>
 7                 <useDefaultDelimiters>true</useDefaultDelimiters>
 8             </configuration>
 9         </plugin>
10     </plugins>
11 </build>

  Maven打包加载到属性,打包顺利通过

  

配置文件分类

SpringBoot中4级配置文件:
  1级:file(打包后文件夹中):config/application.yml 【优先级最高】
  2级:file(打包后文件夹中):application.yml
  3级:classpath(打包前项目中):config/application.yml
  4级:classpath(打包前项目中):application.yml 【优先级最低】
作用:
  1级与2级留做系统打包后设置通用属性。
  3级与4级用于系统开发阶段设置通用属性。

整合第三方技术

整合JUnit

Spring整合JUnit(复习)

SpringBoot整合JUnit
  1.添加整合junit起步依赖(创建SpringBoot项目自带)

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-test</artifactId>
4     <scope>test</scope>
5 </dependency>

  2.编写测试类,创建SpringBoot默认自动生成了一个(加粗为手动添加代码)

 1 @SpringBootTest
 2 class Springboot07JunitApplicationTests {
 3     @Autowired
 4     private BookService bookService;
 5 
 6     @Test
 7     public void testSave() {
 8         bookService.save();
 9     }
10 }

@SpringBootTest
  类型:测试类注解
  位置:测试类定义上方
  作用:设置JUnit加载的SpringBoot启动类。
  相关属性:classes:设置SpringBoot启动类。
  注:如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定。

基于SpringBoot实现SSM整合

Spring整合MyBatis(复习)

SpringConfig
  导入JdbcConfig
  导入MyBatisConfig

1 @Configuration
2 @ComponentScan("com.test")
3 @PropertySource("classpath:jdbc.properties")
4 @Import({JdbcConfig.class, MyBatisConfig.class})
5 public class SpringConfig {
6 }

JDBCConfig
  定义数据源(加载properties配置项:driver、url、username、password)

1 #jdbc.properties
2 jdbc.driver=com.mysql.jdbc.Driver
3 jdbc.url=jdbc:mysql://localhost:3306/spring_db
4 jdbc.username=root
5 jdbc.password=root
 1 public class JdbcConfig {
 2     @Value("${jdbc.driver}")
 3     private String driver;
 4     @Value("${jdbc.url}")
 5     private String url;
 6     @Value("${jdbc.username}")
 7     private String userName;
 8     @Value("${jdbc.password}")
 9     private String password;
10 
11     @Bean
12     public DataSource getDataSource() {
13         DruidDataSource ds = new DruidDataSource();
14         ds.setDriverClassName(driver);
15         ds.setUrl(url);
16         ds.setUsername(userName);
17         ds.setPassword(password);
18         return ds;
19     }
20 }

MyBatisConfig
  定义SqlSessionFactoryBean

1 @Bean
2 public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) {
3     SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
4     ssfb.setTypeAliasesPackage("com.test.domain");
5     ssfb.setDataSource(dataSource);
6     return ssfb;
7 }

  定义映射配置

1 @Bean
2 public MapperScannerConfigurer getMapperScannerConfigurer() {
3     MapperScannerConfigurer msc = new MapperScannerConfigurer();
4     msc.setBasePackage("com.test.dao");
5     return msc;
6 }

SpringBoot整合MyBatis

SpringBoot整合Spring(不存在)
SpringBoot整合SpringMVC(不存在)
SpringBoot整合MyBatis(主要)

1.创建新模块,选择Spring初始化,并配置模块相关基础信息

2.选择当前模块需要使用的技术集(MyBatis、MySQL)

3.在application.yml中设置数据源参数

1 spring:
2   datasource:
3     driver-class-name: com.mysql.cj.jdbc.Driver
4     url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
5     username: root
6     password: root
7     type: com.alibaba.druid.pool.DruidDataSource

  注:SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区,或在MySQL数据库端配置时区解决此问题

jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC

4.定义数据层接口与映射配置(设置@Mapper)

1 @Mapper
2 public interface UserDao {
3     @Select("select * from tbl_book where id=#{id}")
4     Book getById(Integer id);
5 }

5.测试类中注入dao接口,测试功能

 1 @SpringBootTest
 2 class Springboot08MybatisApplicationTests {
 3     @Autowired
 4     private BookDao bookDao;
 5 
 6     @Test
 7     public void testGetById() {
 8         Book book = bookDao.getById(1);
 9         System.out.println(book);
10     }
11 }

案例-SpringBoot实现ssm整合

1.创建SpringBoot工程,在pom.xml添加druid依赖

1 <!-- todo 1 添加druid连接池依赖-->
2 <dependency>
3     <groupId>com.alibaba</groupId>
4     <artifactId>druid</artifactId>
5     <version>1.2.6</version>
6 </dependency>

2.复制springmvc工程各种资源(主java类、页面、测试类)
3.删除config包中的所有配置,在BookDao接口上加@Mapper注解

1 //todo 3 在BookDao接口上加@Mapper注解,让SpringBoot给接口创建代理对象
2 @Mapper
3 public interface BookDao {
4     //...
5 }

4.将application.properties修改成application.yml,配置端口号和连接参数

 1 server:
 2   port: 80
 3 # todo 4 配置数据库连接参数
 4 spring:
 5   datasource:
 6     driver-class-name: com.mysql.cj.jdbc.Driver
 7     url: jdbc:mysql://localhost:3306/ssm_db
 8     username: root
 9     password: root
10     type: com.alibaba.druid.pool.DruidDataSource

5.修改BookServiceTest配置类,进行配置

 1 // todo 5 修改单元测试类,添加@SpringBootTest主键,修复@Test注解导包
 2 @SpringBootTest
 3 public class BookServiceTest {
 4 
 5     @Autowired
 6     private BookService bookService;
 7 
 8     @Test
 9     public void testGetById(){
10         Book book = bookService.getById(2); //传递参数1会抛出异常
11         System.out.println(book);
12     }
13     @Test
14     public void testGetAll(){
15         List<Book> all = bookService.getAll();
16         System.out.println(all);
17     }
18 }

6.页面放置在resources目录下的static目录中。在static目录中提供index.html页面,跳转到"pages/books.html"

1 <script>
2     location.href="pages/books.html"
3 </script>

最后:运行引导类即可访问

posted @ 2023-07-30 00:34  溯鸣  阅读(27)  评论(0编辑  收藏  举报