文章目录
相关文章:
Spring
MyBatis
SpringMVC
一、简介
Spring Boot是一个简化Spring开发的框架。用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。
我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件,简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。
单体应用与微服务
单体应用是把所有的应用模块都写在一个应用中,导致项目越写越大,模块之间的耦合度也会越来越高。微服务是一种架构风格,用微服务可以将应用的模块单独部署,对不同的模块进行不同的管理操作,不同的模块生成小型服务,每个功能元素最后都可以成为一个可以独立替换、独立升级的功能单元,各个小型服务之间通过http进行通信。
二、Spring应用和Spring Boot应用开发流程的区别
Spring应用开发流程:
Spring Boot应用开发流程:
三、Spring Boot核心特性
极低的学习成本
可独立运行的Spring项目
“习惯优于配置”,极大的提高了开发效率
极简的组件依赖,自动发现与自动装配
提供运行时的应用监控
与分布式架构和云计算的天然集成
·微服务:
使用Spring Boot可以生成独立的微服务功能单元
·自动配置:
针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置
·起步依赖:
告诉Spring Boot需要什么功能,它就能引入需要的库。
·命令行界面:
这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
·Actuator:
让你能够深入运行中的Spring Boot应用程序。
1、用Maven操作springboot
下面便简单用Maven操作一下springboot的简单应用:
首先创建相应的目录:
pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
MyController.java:
@Controller
public class MyController {
@RequestMapping("/out")
@ResponseBody
public String out() {
return "success";
}
}
MySpringBootApplication.java:
//说明这是一个SpringBoot应用的入口类
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args) {
//启动SpringBoot应用
SpringApplication.run(MySpringBootApplication.class);
}
}
运行了后,会在控制台出现这些东西:
2、用spring Initializr操作springboot
上面的就是用Maven创建springboot项目的操作,下面我们进行spring Initializr对springboot的搭建:
最后可以发现,与上面所使用Maven搭建的springboot项目更简便,并且在pom.xml所依赖的包也已经完成了,入口类也已经生成了:
最后运行的结果与Maven的结果相同
四、Spring Boot入口类
入门类命名通常以*Application结尾
入口类上增加@SpringBootApplication注解
利用SpringApplication.run()方法启动应用
1、Spring Boot启动流程:
2、Spring Boot中的常用配置
application-properties:
server.port=80
server.servlet.context-path=/myspringboot
logging.file=E:/myspringboot.log # 将日志写入文件中
#debug(调试)-->info(一般输出信息)-->warn(警告信息)-->error(异常)-->fatal(灾难级别)
logging.level.root=info
debug=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=1214
这个便是springboot的常用配置,在springboot工程中为了方便,便提出了两种配置文件的格式:
Spring Boot支持两种配置文件:
属性文件:application.properties
YAML格式:application.yml
3、YAML的语法
验证YAML的语法是否错误的网站:点我
YAML是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。
YAML语法格式
标准格式:key:(空格)value
使用空格代表层级关系,以“ : "结束
debug: true
#logging.level.root
#logging.file
logging:
level:
root:info
file:E:/myspringboot.log
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
data-username: root
password: 1214
(1)、Spring Boot自定义配置项
Spring Boot允许我们自定义应用配置项,在程序运行时允许动态加载,这为程序提供了良好的可维护性。
在实际项目开发中,我们通常将项目的自定义信息放在配置文件中。
只需要在application.yml添加:
mall:
config:
name: XIN SHOP
description: 一家卖电脑的
hot-sales: 20
show-advert: true
MyController.java:
@Controller
public class MyController {
@Value("${mall.config.name}")
private String name;
@Value("${mall.config.description}")
private String description;
@Value("${mall.config.hot-sales}")
private Integer hotSales;
@Value("${mall.config.show-advert}")
private Boolean showAdvert;
@RequestMapping("/info")
@ResponseBody
public String info(){
return String.format("name:%s,description:%s,hot-sales:%s,show-advert:%s",
name,description,hotSales,showAdvert);
}
}
结果为:
看了上面的结果,已经得到了很多的信息,在实际开发中是需要业务上的调整和布局。
(2)、环境配置文件
Spring Boot可针对不同的环境提供不同的Profile文件。
Profile文件的默认命名格式为application-{env}.yml
使用spring.profiles.active选项来指定不同的profile。
application-dev.yml:
debug: true
#logging.level.root
#logging.file
logging:
level:
root: info
file: e:/myspringboot.log
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 1214
mall:
config:
name: XIN SHOP
description: 一家卖电脑的
hot-sales: 20
show-advert: true
application-prd.yml:
debug: false
#logging.level.root
#logging.file
logging:
level:
root: info
file: /local/user/app-prd.log
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://155.32.55.88:3307/prd
username: root1
password: 3313@#!
mall:
config:
name: 小白
description: 一家买烧烤的
hot-sales: 20
show-advert: true
server:
port: 80
application.yml:
spring:
profiles:
active: prd/dev #dev是开发环境,prd是生产环境,其中填一个
在游览器访问时,使用dev开发环境时输入:localhost:8080/info,使用prd生产环境时输入:localhost/info
五、打包和运行
利用Maven的package命令,生成可独立运行的Jar包。
利用java-jar xxx.jar命令启动Spring Boot应用。
Jar包可自动加载同目录的application配置文件。
运行程序后:
去相应的目录寻找:
然后输入cmd:
会发现是80的端口是线上模式,那问题来了,我们应该怎么切换开发模式呢?
解决方法:我们只需要把设置好的环境文件复制到java包同级的目录下,在运行的时候就会优先读取这些配置文件.
在application.yml修改成dev进入开发模式。
最后进行总结:
Spring Boot用于快速构建Spring应用
采用“习惯优于配置理念”设计
Spring Boot的配置项
六、一个入门小项目(收发红包)
创建完成后项目目录:
项目功能:(由于是入门的小项目,所以非常简单)
1、获取红包列表
2、创建红包(发红包)
3、通过id查询红包
4、更新红包(领红包)
5、关于红包并发中的事务处理
项目源码:
pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
application.yml:
server:
port: 8080
servlet:
context-path: /luckymoney
limit:
minMoney: 0.01
maxMoney: 9999
baseline-description: 最少要发${limit.minMoney}元,最多${limit.maxMoney}元
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/luckymoney?serverTimezone=UTC
username: root
password: 1214
jpa:
hibernate:
ddl-auto: update
show-sql: true
Luckymoney.java:(生成get和set方法)
@Entity
public class Luckymoney {
@Id
@GeneratedValue
private Integer id;
private BigDecimal money;
/**
* 发送方
*/
private String producer;
/**
* 接收方
*/
private String consumer;
关于数据库的操作用Spring Data的JPA:
LuckmoneyRepository.java:
public interface LuckmoneyRepository extends JpaRepository<Luckymoney, Integer> {
}
LuckymoneyService.java:
@Service
public class LuckymoneyService {
@Autowired
private LuckmoneyRepository repository;
/**
* 事务 指数据库事务
* 扣库存 > 创建订单
*/
@Transactional
public void createTwo() {
Luckymoney luckymoney1 = new Luckymoney();
luckymoney1.setProducer("猪头");
luckymoney1.setConsumer("小可爱");
luckymoney1.setMoney(new BigDecimal("520"));
repository.save(luckymoney1);
Luckymoney luckymoney2 = new Luckymoney();
luckymoney2.setProducer("猪头");
luckymoney2.setConsumer("小可爱");
luckymoney2.setMoney(new BigDecimal("1314"));
repository.save(luckymoney2);
}
}
LuckymoneyController.java:
@RestController
public class LuckymoneyController {
@Autowired
private LuckmoneyRepository repository;
@Autowired
private LuckymoneyService service;
/**
* 获取红包列表
*/
@GetMapping("/luckymoneys")
public List<Luckymoney> list() {
return repository.findAll();
}
/**
* 创建红包(发红包)
*/
@GetMapping("/createluckymoney")
public Luckymoney create(@RequestParam("producer") String producer,
@RequestParam("money")BigDecimal money) {
Luckymoney luckymoney = new Luckymoney();
luckymoney.setProducer(producer);
luckymoney.setMoney(money);
return repository.save(luckymoney);
}
/**
* 通过id查询红包
*/
@GetMapping("/luckymoneys/{id}")
public Luckymoney findBiId(@PathVariable("id") Integer id) {
return repository.findById(id).orElse(null);
}
/**
* 更新红包(领红包)
*/
@PutMapping("/luckymoneys/{id}")
public Luckymoney update(@PathVariable("id") Integer id,
@RequestParam("consumer") String consumer) {
Optional<Luckymoney> optional = repository.findById(id);
if (optional.isPresent()) {
Luckymoney luckymoney = optional.get();
luckymoney.setConsumer(consumer);
return repository.save(luckymoney);
}
return null;
}
/**
* 红包的并发中的事务
*/
@GetMapping("/luckymoneys/two")
public void createTwo() {
service.createTwo();
}
}
以上便是小项目中的所有代码,目录大概为:
运行其中的一些功能,运行并发中事务的结果:
数据库可查看:
以上便是Spring Boot非常简单的入门,一个小白学习中做的笔记┗( ▔, ▔ )┛