SpringBoot Ⅰ
Posted 364.99°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot Ⅰ相关的知识,希望对你有一定的参考价值。
目录
1.概述
SpringBoot: Spring顶级项目之一,提供了一种快速使用 Spring 的方式,提高开发效率,14年发布。
- 自动配置
程序启动时,SpringBoot自动完成Spring的配置 - 起步依赖
将具备某种功能的坐标打包到一起,并提供一些默认的功能(Maven依赖传递) - 辅助功能
提供了一些大型项目中常见的非功能性特性
案例: 搭建SpringBoot工程,定义HelloController.hello()方法,返回”hello SpringBoot!”。
Ⅰ 创建Maven项目
File → new → Module →Maven → □Create from archetype
或
File → new → Module → Maven → Spring Initializr
Ⅱ 导入SpringBoot起步依赖
Spring Boot Reference Guide:https://docs.spring.io/spring-boot/docs/1.0.2.RELEASE/reference/html/index.html
Getting started → Installing Spring Boot → Installing instruction for the Java developer → Maven installation
<!--springboot 需要继承的父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<dependencies>
<!--web开发的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Ⅲ 定义Controller类
package demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController
@RequestMapping("/hello")
public String hello()
return "hello SpringBoot !";
Ⅳ 编写引导类
package demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/*
* 引导类:Spring Boot的入口
* */
@SpringBootApplication
public class HelloApplication
public static void main(String[] args)
SpringApplication.run(HelloApplication.class,args);
Ⅴ 启动测试
注意: Application.java 放在最外侧,即包含所有子包,不然网页会报错 Whitelabel Error Page
小结:
- SpringBoot在创建项目时,使用jar的打包方式
- SpringBoot的引导类,是项目入口,运行main方法就可以启动项目
- 使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样
起步依赖:
spring-boot-starter-parent
中定义了各种技术的版本信息,组合了一套最优搭配的技术版本- 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程
- 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题
2.配置
2.1 分类
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。
SpringBoot很多配置都有默认值,需要修改这些值可以配置application.properties或application.yml(application.yaml)
properties:
key.proname = value;
yml(yaml):
key:
proname:value
注意:
- 配置文件只能叫application,后缀名可以不同(properties、yml、yaml都可以)
- 三个配置文件优先级:.properties > .yml > .yaml
2.2 yaml
yaml:
- 一种直观的能够被电脑识别的的数据数据序列化格式
- 易读,利于和脚本语言交互,可以被支持YAML库的不同的编程语言程序导入
- 以数据为核心的,比传统的xml方式更加简洁
- 扩展名:.yml、.yaml
基本语法:
- 大小写敏感,
#
为注释符 - 使用缩进表示层级关系
- 数据值前边必须有空格,作为分隔符
建议别用tab缩进,有些编译器会产生层次混乱(各个系统tab对应的空格数目不同),当然IDEA没问题 - 缩进的空格数目不要求,只要相同层级的元素左侧对齐即可
数据格式:
□ 对象(map):键值对的集合
# 缩进写法
person:
name: zhangsan
# 行内写法
person: name: zhangsan
□ 数组:一组按次序排列的值
# 缩进写法
address:
- beijing
- shanghai
# 行内写法
address: [beijing,shanghai]
□ 纯量:单个的、不可再分的值
msg1: 'hello \\n world' # 单引号忽略转义字符
msg2: "hello \\n world" # 双引号识别转义字符
参数引用
$
name: zhangsan
person:
name: $name # 引用上边定义的name值
2.3 读取配置文件
@Value
、Environment
、@ConfigurationProperties
application.yml
server:
port: 8089
name: zhangsan
person:
name: $name # 引用上边定义的name值
age: 30
jobs:
- peasant-worker
- white-collar
msg1: 'hello \\n world' # 单引号忽略转义字符
msg2: "hello \\n world" # 双引号识别转义字符
@Value()
读取数据
@RestController
public class HelloController
@Value("$person.name")
private String name;
@Value("$person.age")
private int age;
@Value("$msg2")
private String msg2;
@RequestMapping("/hello")
public String Hello()
System.out.println(name + " " + age + " " + msg2);
return name + " " + age + " " + msg2;
运行引导类:
Environment
读取数据
@RestController
public class HelloController
@Autowired
private Environment env;
@RequestMapping("/hello")
public String Hello()
System.out.println(env.getProperty("jobs[0]"));
return env.getProperty("jobs[0]");
运行引导类:
@ConfigurationProperties
读取数据
新建Person类读取数据
@Component //Person类被Spring识别
@ConfigurationProperties(prefix = "person") //prefix = 前缀
public class Person
private String name;
private int age;
public String getName()
return name;
public int getAge()
return age;
public void setName(String name)
this.name = name;
public void setAge(int age)
this.age = age;
@Override
public String toString()
return "Person" +
"name='" + name + '\\'' +
", age=" + age +
'';
读Person类的数据
@RestController
public class HelloController
@Autowired
private Person person;
@RequestMapping("/hello")
public Person Hello()
System.out.println(person);
return person;
运行引导类:
Person类顶部会出现一个红条:
消除:
点击Open Documentation → 复制依赖坐标<dependency>
并粘贴在pom.xml中
作用:重启项目之后,.yml就会有提示信息(自动补全)
2.4 profile
profile: 实现动态配置切换的功能
开发SpringBoot应用,通常会将一套程序安装到不同的环境(开发、测试、生产…),其中数据库、服务器等配置都不同,每次打包都需要修改配置文件,会很麻烦。而profile就很好解决了这个麻烦。
■profile配置方式:
□多profile文件方式
一个主配置文件、多个其他配置文件
需要启用其他配置文件的时候,要在主配置文件中激活
#激活application-dev.yml文件
spring.profiles.active=dev
□yml多文档方式
一个配置文件、分隔符 ---
分割为多个配置文档
■profile激活方式:
□配置文件激活(上面就是用的配置文件激活)
□虚拟机参数激活
□命令行参数
在IDEA中:
在IDEA之外:
打开工程jar包所在目录,打开cmd
运行jar文件:java -jar .\\文件名.jar
指定参数运行:java -jar .\\文件名.jar --spring.profiles.active=dev
2.5 内部配置加载顺序
Springboot程序启动时,会从以下位置加载配置文件:
- file:./config/:当前项目下的/config目录下
- file:./ :当前项目的根目录
- classpath:/config/:classpath的/config目录
- classpath:/ :classpath的根目录
2.6 外部配置加载顺序
官网查看:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Externalized Configuration
3.整合其他框架
3.2 整合Junit
Ⅰ 搭建SpringBoot工程:
File → new → Maven → Spring Initializr
Ⅱ 编写Service类
@Service
public class UserService
public void add()
System.out.println("add...");
Ⅲ 编写测试类
@RunWith(SpringRunner.class)
/*
注意:当测试类与引导类在同一个包下(或为Service的子包),classes = Application.class可以省略
*/
@SpringBootTest(classes = Application.class)
public class UserServiceTest
@Autowired
private UserService userService;
@Test
public void testAdd()
userService.add();
Ⅳ 运行测试类
3.2 整合redis
Ⅰ 搭建SpringBoot工程:
File → new → Module → Maven → Spring Initializr → NoSQL √Spring Data Redis
Ⅱ 编写测试类
@SpringBootTest
class Demo1ApplicationTests
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testSet()
//存入数据
redisTemplate.boundValueOps("name").set("zhangsan");
@Test
public void testGet()
//获取数据
Object name = redisTemplate.boundValueOps("name").get();
System.out.println(name);
Ⅲ 打开redis-server.exe,运行程序,运行单元测试
注意:非本机redis配置
spring:
redis:
host: 127.0.0.1 #redis对应主机名
port: 6379 #redis端口号
3.2 整合mybatis
Ⅰ 搭建SpringBoot工程:
File → new → Module → Maven → Spring Initializr → SQL √Mybatis Framework √mysql Driver
Ⅱ 定义表和实体类
CREATE DATABASE IF NOT EXISTS `springboot`;
USE `springboot`;
CREATE TABLE `user`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`password` VARCHAR(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `t_user`(`id`,`username`,`password`) VALUES (1,'zhangsan','123'),(2,'lisi','456');
public class User
private int id;
private String username;
private String password;
public int getId()
return id;
public void setId(int id)
this.id = id;
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 "User" +
"id=" + id +
", username='" + username + '\\'' +
", password='" + password + '\\'' +
'';
Ⅲ 编写映射文件
@Mapper
public interface UserMapper
@Select("select * from user")
public List<User> findAll();
Ⅳ 配置application.yml
# database
spring:
datasource:
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///springboot?serverTimezone=UTC
username: root
password: admin
Ⅴ 编写测试类
@SpringBootTest
class Demo1ApplicationTests
//注入Mapper
@Autowired
private UserMapper userMapper;
@Test
public void testFindAll()
List<User> list = userMapper.findAll();
System.out.println(list);
Ⅶ 运行测试类
若采用xml配置
Ⅲ 编写映射文件
@Mapper
public interface UserXmlMapper
public List<User> findAll();
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.UserXmlMapper">
<select id="findAll" resultType="user">
select * from user;
</select>
</mapper>
Ⅳ 配置application.yml
#database
spring:
datasource:
driver: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///springboot?serverTimezone=UTC
username: root
password: admin
# mybatis
mybatis:
mapper-locations: classpath:mapper/UserMapper.xml # mapper映射文件路径
type-aliases-package: com.example.demo #User包地址
Ⅴ 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
class Demo3ApplicationTests
@Autowired
private UserXmlMapper userXmlMapper;
@Test
public void testFindAll()
List<User> list = userXmlMapper.findAll();
System.out.println(list);
以上是关于SpringBoot Ⅰ的主要内容,如果未能解决你的问题,请参考以下文章
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段
SpringBoot中表单提交报错“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“(代码片段
Spring boot:thymeleaf 没有正确渲染片段