# SpringBoot
基于Spring框架集成一套快速开发工具
完全脱离配置文件 xml
SSM 项目时 需要做的步骤有哪些?
maven 构建项目
1.添加依赖
2.编写配置文件 (编写内容非常 容易出错) Spring容器 和mvc组件时需要自己手动配置
3.配置运行
并且在Springboot 集成了各种常用的中间件组件 使用时如果不需要额外配置的话可以直接使用
redis spring-redis [redis连接信息 连接池 序列化反序列化机制 ] 127.0.0.1 6379
Springboot可以直接使用redis的默认配置信息
配置连接信息 配置 的方式更简单
Spring Boot 是由 Pivotal 团队提供用来简化 Spring 的搭建和开发过程的全新框架。随着近些年来微服务技术的流行,Spring Boot 也成了时下炙手可热的热点技术。
Spring Boot 去除了大量的 xml 配置文件,简化了复杂的依赖管理,配合各种 starter 使用,基本上可以做到自动化配置。Spring 可以做的事情,现在用 Spring boot 都可以做。
## Spring Boot核心功能
简化Spring开发
## 环境要求
2.1.8 web
ssm web容器时 使用的tomcat7 并且需要手动添加tomcat插件 以web war方式启动项目
jar 包方式就能启动 main方法
Spring Boot支持以下嵌入式servlet容器:
| **名称** | Servlet版本 |
| ------------ | ----------- |
| Tomcat 9.0 | 4.0 |
| Jetty 9.4 | 3.1 |
| Undertow 2.0 | 4.0 |
### SpringBoot自启动的配置
```
<transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
<resource>META-INF/spring.factories</resource>
</transformer>
```
在SpringBoot的启动类中,@SpringBootApplication注解的代码里面有一句`@EnableAutoConfiguration`
`@EnableAutoConfiguration`注解加载的是资源目录META-INF文件下的spring.factories的文件。包括导入到项目中的Jar包的META-INF文件夹下的spring.factories文件。spring.factories文件是一个properties文件。
`@ComponentScan`作用是扫描@SpringBootApplication所在的Application类(即spring-boot项目的入口类)所在的包(basepackage)下所有的@component注解(或拓展了@component的注解)标记的bean,并注册到spring容器中
参考查看:https://accright.com/article/101
Springboot有自己的默认配置规则,当开发者需要进行修改配置时在resources下添加配置文件,并且配置文件需要注意命名:
1.application.[properties|yml] 项目的配置文件 默认使用 application-prod.yml
2.bootstrap.[properties|yml] 引导文件
# 创建springboot项目
#### SpringBoot 基础Pom配置文件依赖:
Spring官网 下载 配置的boot项目
通过IDE方式 以向导方式创建
手动创建Boot项目
```xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<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>
</dependency>
<dependency><!--页面模板依赖-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
```
### starter
springboot提供了不同的starter,每个starter就是组合了不同的依赖,当需要使用一些其他组件时如果springboot提供了starter开发者就可以直接使用相应的starter不需要自己导入相应的依赖
添加完成后boot项目中需要的依赖会自动下载:
![](assets/1607607469205.png)
### 运行:
创建包结构 如:com.oracle
启动当前的boot项目时就在包下创建一个类编写main方法
```java
@SpringBootApplication
public class RunApplication {
public static void main(String[] strParams) {
SpringApplication.run(RunApplication.class, strParams);
}
}
```
@SpringBootApplication核心启动类注解(组合注解)
```java
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication
```
## SpringBoot中常用注解
1.**@Configuration**注解类表明其主要目的是作为bean定义的源,@Configuration类允许通过调用同一类中的其他 @Bean方法来定义bean之间的依赖关系 spring.xml ->bean 编写一个普通java类 返回注册类型的方法 类型方法上@bean
GoodsServiceConfig ->
@Bean
public GoodsService goodsService(){ retrun new GoodsSerivce}
spring.xml <bean id="goodsService" class="com.oracle.service.GoodsService"></bean>
2.**@Bean** Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。 产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中
3. **@SpringBootApplication** 包含@Configuration、@EnableAutoConfiguration、@ComponentScan
4. **@ComponentScan** 组件扫描。相当于,如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为bean
5. **@EnableAutoConfiguration**让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上
6. **@ConfigurationProperties**Spring Boot将尝试校验外部的配置 加载配置文件中自定义配置信息 用户定义的自定义信息可以包含前缀 在类中进行注入
通过这个注解可以将自定义的配置信息注入到属性中 可以配置 配置前缀
application.yml
k-v
yml 格式缩进 yml中配置文件的格式有严格要求 key: 值
### 配置文件使用
Springboot中提供2种配置文件方式
1. application.properties
```properties
server.port=8081
```
2. application.yml 一定要注意格式空格和缩进
#### JDK8新增的时间
更多使用:https://www.cnblogs.com/huanshilang/p/12013386.html
```java
//构造时间
LocalDateTime now = LocalDateTime.of(2021,1,1,12,00,00);
//时间相加
now=now.plusMinutes(2);
System.out.println(now);
System.out.println("计算两个时间的差:");
LocalDateTime end = LocalDateTime.now();
Duration duration = Duration.between(now,end);
long days = duration.toDays(); //相差的天数
long hours = duration.toHours();//相差的小时数
long minutes = duration.toMinutes();//相差的分钟数
long millis = duration.toMillis();//相差毫秒数
long nanos = duration.toNanos();//相差的纳秒数
```
```
在使用时后台接收前台参数时需要去设置@JsonFormat注解指定格式化日期格式,并且还需要加入时区
示例实体属性:
```java
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime lockexpiredate;
```
```yml
?serverTimezone=Asia/Shanghai #数据库驱动后加入时区指定 MySQL驱动更新为5.8 引入cj
```