文章目录
初识SpringBoot与微服务
SpringBoot
Java企业级应用过程->J2EE->spring->springboot,他是一个不断简化开发的过程。由于Spring的发展,项目出现了各种整合文件,这导致我们必须编写大量Spring的配置代码。SpringBoot 正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用Spring 、更容易的集成各种常用的中间件、开源软件。
Spring Boot 基于 Spring 开发,Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。
微服务
在以前的企业级项目中实用的是单体应用架构,这种架构师把一个包部署到一台服务器上,如果并发量大了,采用集群的方式复制多个服务器镜像,在配置一台负载均衡服务器用于控制访问,如果进行维护就需要停止所有服务器,然后进行修改。
微服务是一种架构风格,是分布式集群的应用,把不同任务分部到不同的服务器上。
微服务论文
SpringBoot环境搭建
SpringBoot官方文档
SpringBoot非官方中文文档
官方文档生成
在官网的SpringBoot页面的最下面有个:
点击Spring Initializr进入配置页面,配置完成后选择Generate-Ctrl+回车进行下载SpringBoot初识话文件。
idea集成
在新建项目时选择Spring Initializr配置过程与上面类似,不在赘述。
初始环境介绍
- 业务包要建在@SpringBootApplication修饰类的同包下建包,其他地方会报错。
- Banner生成:在resources文件夹下新建一个banner.txt文件,把自定义的banner粘贴进即可banner在线生成
springboot原理
自动配置
- 打开pom文件会发现我们的pom文件已经有父依赖,核心依赖都在spring-boot-dependencies 中。
- pom父类中指定了覆盖SpringBoot默认配置的配置文件格式。
启动器:
<!-- web项目启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
注意:IDEA进行SpringBoot热部署失败原因
出现这种情况,并不是热部署配置问题,其根本原因是因为Intellij IEDA默认情况下不会自动编译,需要对IDEA进行自动编译的设置:idea热部署配置
YML文件
语法
- 普通对象或map
person:
name: tdte
age: 30
# 行内表示
person: {name: tdte, age: 20}
- 数组
city:
- beijing
- shanghai
- guangzhou
- shenzhen
# 行内表示
city: [beijing,shanghai,guangzhou,shenzhen]
# 数组对象
student:
- name: zhangsan
age: 18
score: 100
- name: lisi
age: 28
score: 88
- name: wangwu
age: 38
score: 90
# 行内表示
student: [{name: tom,age: 18,addr: beijing},{name: lucy,age: 17, addr: tianjin}]
配置文件与配置类的属性映射方式
使用注解@Value映射
我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上
例如:
application.properties配置如下:
person:
name: zhangsan
age: 18
或者,application.yml配置如下:
person:
name: zhangsan
age: 18
实体Bean代码如下:
@Controller
public class QuickStartController {
@Value("${person.name}")
private String name;
@Value("${person.age}")
private Integer age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "springboot 访问成功! name="+name+",age="+age;
}
}
使用注解@ConfigurationProperties映射
通过注解@ConfigurationProperties(prefix=“配置文件中的key的前缀”)可以将配置文件中的配置自动与实体进行映射
application.properties配置如下:
person:
name: zhangsan
age: 18
或者,application.yml配置如下:
person:
name: zhangsan
age: 18
实体Bean代码如下:
@Controller
// yaml的对象person前缀
@ConfigurationProperties(prefix = "person")
public class QuickStartController {
// 根据key名称自动装配
private String name;
private Integer age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "springboot 访问成功! name="+name+",age="+age;
}
// 装配的前提需要给属性设置get/set方法,否则获取的值为null
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
执行器:
<!-- 执行器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
SpringBoot整合
SpringBoot整合Mybatis
- 注意SpringBoot2.2.5会出现不满意状态异常
- 依赖
<!-- mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 数据库配置:
application.properties
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://47.94.145.43:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=311776
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=top.tdte.pojo
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
- 编写Mapper
@Mapper
@Repository
public interface UserMapper {
public List<User> queryUserList();
}
注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
- 配置Mapper映射文件
在src\main\resources\mapper路径下加入UserMapper.xml配置文件"
<?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="top.tdte.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
整合单元测试
起步依赖
<!--测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
在测试包下编写测试类:
//运行器选择spring的
@RunWith(SpringRunner.class)
//这里注意,选择非测试类的启动器类
@SpringBootTest(classes = SpringbootMybatisApplication.class)
public class MapperTest {
// 从spring取出我们需要测试的单元进行测试
@Autowired
private UserMapper userMapper;
@Test
public void test(){
List<User> users = userMapper.queryUserList();
System.out.println(users);
}
}