springboot基础

一 springboot

1 spring 的缺点

在spring boot出现以前,使用spring框架的程序员是这样配置web应用环境的,需要大量的xml配置。下图展示了在xml配置的时代和SpringBoot的配置量的差别。

  • 随着web项目集成软件的不断增多,xml配置也不断的增多,xml配置文件也在不断地增多,项目的依赖管理也越发的复杂。spring框架也因此饱受争议,配置文件难以理解且容易出错。

  • xml配置文件不但复杂,而且绝大部分属于模板配置,也就是说有80%以上的配置是不断重复的。在这个web项目里面这样配置,挪到另一个项目里面这部分配置仍然相同。

2 spring boot 改变了什么

Spring Boot的配置方式,就像是插头插座,就是这个标准。你第三方开源类库想接入进来,你就按照这个标准做一个starter的适配。spring MVC方式就像是手动接电线,很灵活,但是不同的人接出来的效果千差万别,而且很容易出错。Spring boot虽然灵活性不如Spring MVC的方式,并且你也不太清楚插座里面的线路是什么样,但就是方便易用。话说回来,当你习惯使用插头插座,你还期望自己是个电工不成?

这里有一个很重要的概念: 约定大于配置。你遵守一些规定,会让你的开发变得更加容易。

3 springboot项目搭建

# spring Initializr 方法
​1 选择spring Initializr创建项目   http://start.aliyun.com
​2 填写项目名称
​3 选择springboot的版本,如果没有想要的版本,先随便选一个,然后去pom文件中修改
​4 勾选需要的模块,比如web  sql等
​5 项目会自动生成启动类
​6 编写controller 启动项目测试

也可以用maven的方式,没有这个简单和方便

在实际开发中,pom配置文件不需要你去关心,练习中可以直接复制配置文件。

在我们搭的这套环境中有:代码生成器,和接口文档生成的插件。要求自己能配置起来。

4 热部署

1 设置 file- setting - bulid - compiler,勾选build project automatically ,并且保存

2 ctrl+shift+atl + / , 选择registry , 勾选compiler.automake.allow.when.app.running

3 在依赖中添加spring-boot-devtools (dev开发环境的工具)

<!--devtools热部署-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><scope>true</scope>
</dependency>

另一种开发中常用的热部署:JRebel Intellij热部署插件JRebel_jrebel idea版本-CSDN博客

Welcome to JetBrains License Server!:) +uuid

GUID online erstellen

5 依赖管理

1 spring-boot-starter-parent 依赖: 底层依赖spring-boot-dependenies, 有个properties标签,里面包含了其他依赖的版本。可以理解为就是一个版本的管理器

2 spring-boot-starter-web 的理解:在springboot项目中引入此启动器,底层的原理是:系统写好了一个spring-boot-starter-web项目,这个项目依赖于spring-boot-starter-json, tomcat,web,webmvc。个人认为就是一种模块之间的依赖传递。

6 代码生成器

  • 使用的是mybatis代码生成器

<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><configurationFile>src/main/resources/generatorConfig.xml</configurationFile><verbose>true</verbose><overwrite>true</overwrite></configuration>
</plugin>
  • generatorConfig.xml

# 1 数据库驱动包位置
# 2 数据库链接URL、用户名、密码
# 3 实体类生成位置
# 4 mapper和xml位置
# 5 指定用哪个表来生成

@RestController = @ResponseBody + @Controller

@RequestBody 前端给你传的数据是json格式的(参数封装到请求体 post),可以直接封装到java对象中

如果给你的参数是地址栏拼接的,就不用RequestBody

404 找不到路径

403 禁止访问

405 请求方式不匹配

7 日志

logback-spring.xml

需要注意以后要修改包名,其他的不用动

怎么打印日志

Log log = LogFactory.getLog(类名.class);

log.info(日志内容)

8 日期转换

  • 导入依赖

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.1</version>
</dependency>
​
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.10.1</version>
</dependency>
​
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.10.1</version>
</dependency>
  • 消息转换器

package com.xinzhi.config;
​
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
​
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class DateConverter implements Converter<String, Date> {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic Date convert(String source) {try {return sdf.parse(source);} catch (ParseException e) {e.printStackTrace();}return null;}
}
  • 配置文件中添加

spring.jackson.date-format =yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8spring.jackson.date-format =yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

9 接口文档

Document

  • 引入插件

<plugin><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>1.1.7</version><configuration><!--指定生成文档的使用的配置文件,配置文件放在自己的项目中--><configFile>./src/main/resources/smart-doc.json</configFile><!--指定项目名称--><projectName>sboot</projectName><!--smart-doc实现自动分析依赖树加载第三方依赖的源码,如果一些框架依赖库加载不到导致报错,这时请使用excludes排除掉--><excludes><!--格式为:groupId:artifactId;参考如下--><exclude>com.alibaba:fastjson</exclude></excludes><!--自1.0.8版本开始,插件提供includes支持--><!--smart-doc能自动分析依赖树加载所有依赖源码,原则上会影响文档构建效率,因此你可以使用includes来让插件加载你配置的组件--><includes><!--格式为:groupId:artifactId;参考如下--><include>com.alibaba:fastjson</include></includes></configuration>
</plugin>
  • 指定配置文件

![1

  • 记得要将实体类和controller的注解都补充完整

  • 生成指定格式文件

10 打包部署

  • 修改启动类名称

  • 点击package

  • 将zip包放到服务器上,并且解压

  • 修改shell脚本

  • 上传到linux,并且修改执行权限 chmod 777 run.sh

  • 启动脚本 ./run start

11 自动装配

  • @SpringBootApplication是一个复合注解,@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。

  • @SpringBootConfiguration,就是一个配置类,@Configuration是底层的核心注解,作用和spring配置文件中往spring容器中注入对象(<bean>),只是springboot封装了Configuration, 叫成了SpringBootConfiguration。

  • @EnableAutoConfiguration是由@AutoConfigurationPackage ,@Import({AutoConfigurationImportSelector.class})两个注解组成

    • @AutoConfigurationPackage是由 @Import({Registrar.class})实现的,核心方法是registerBeanDefinitions(),就是为了获取启动类所在的包,为后面扫描组建做准备。

    • @Import({AutoConfigurationImportSelector.class}) 核心类是AutoConfigurationImportSelector。

    • @Import({AutoConfigurationImportSelector.class}) 是由AutoConfigurationImportSelector这个类实现的

protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {// 获取@EnableAutoConfiguration标注类的元信息。(exclude,excludeName)AnnotationAttributes attributes = this.getAttributes(annotationMetadata);// 获取自动装配类的候选类名称。List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);//去重,排除重复的configurationsconfigurations = this.removeDuplicates(configurations);//获取自动装配组件的排除名单。Set<String> exclusions = this.getExclusions(annotationMetadata, attributes);//检查排除类是否合法this.checkExcludedClasses(configurations, exclusions);//移除所有的排除名单configurations.removeAll(exclusions);//进行过滤,autoConfigurationMetadata充当过滤条件。configurations = this.getConfigurationClassFilter().filter(configurations);//自动装配的导入事件this.fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);}}
# 自动装配原理:
springboot启动时,是依靠启动类的main方法来进行启动的,而main方法中执行的是SpringApplication.run()方法,而SpringApplication.run()方法中会创建spring的容器,并且刷新容器。而在刷新容器的时候就会去解析启动类,然后就会去解析启动类上的@SpringBootApplication注解,而这个注解是个复合注解,这个注解中有一个@EnableAutoConfiguration注解,这个注解就是开启自动配置,这个注解中又有@Import注解引入了一个AutoConfigurationImportSelector这个类,这个类会进过一些核心方法,然后去扫描我们所有jar包下的META-INF下的spring.factories文件,而从这个配置文件中取找key为EnableAutoConfiguration类的全路径的值下面的所有配置都加载,这些配置里面都是有条件注解的,然后这些条件注解会根据你当前的项目依赖的pom以及是否配置了符合这些条件注解的配置来进行装载的。
  • @ComponentScan 组件扫描和 @Import({Registrar.class}) 配合使用,就是为了扫描和启动类同一级包名或包名下面所有的组件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程笔记 html5cssjs 026 HTML输入类型(2/2)

编程笔记 html5&css&js 026 HTML输入类型&#xff08;2/2&#xff09; 输入类型&#xff1a;date输入类型&#xff1a;color输入类型&#xff1a;range输入类型&#xff1a;month输入类型&#xff1a;week输入类型&#xff1a;time输入类型&#xff1a;datetime输入类型…

java数据结构与算法刷题-----LeetCode63. 不同路径 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…

第3章-指标体系与可视化-3.3-指标体系

目录 为什么要构建指标体系 什么是指标体系 如何构建指标体系 指标库

C#编程-实现继承

C#允许您通过扩展现有类的功能以创建新类来实现继承。 从基类创建派生类 使用以下语法在C#中创建派生类: class <derived_class>:<base_class>{...}确定继承的层次结构 要确定继承层次结构,必须检查派生类与基类之间的关系种类。确保派生类是一种基类。 请考虑以…

Linux——系统安全及应用

一、基本安全措施 1、系统账号清理 常见的非登录用户账号包括bin、daemon、 adm、lp、mail等。为了确保系统安全&#xff0c;这些用户账号的登录Shell通常是/ sbin/nologin&#xff0c;表示禁止终端登录&#xff0c;应确保不被人为改动。 //将非登陆用户的Shell设为/sbin/nolo…

【Spring Cloud】组件概念详解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Spring Cloud》。&#x1f3af;&#x1f3af; &am…

2023 hnust 湖南科技大学 大四上 商务智能 课程 期末考试 复习资料

前言 《听了课就能及格》由于老师发的复习PPT内容过多&#xff08;近两万字&#xff09;&#xff0c;因此在此大幅删减由于老师透露太少&#xff0c;删减全凭主观意志&#xff0c;请谨慎参考&#xff01;&#xff01;&#xff01;猜测逻辑 过于细碎概念的不考&#xff08;不算…

【Tomcat】在一台计算机上运行两个Tomcat服务

首先把Tomcat整个文件复制一份放在其他文件夹路径中 1.修改环境变量 添加环境变量在系统变量里面 “CATALINA_HOME” 指向一个Tomcat文件夹路径 “CATALINA_HOME1” 指另一个Tomcat文件夹路径 2.修改startup里面的环境变量&#xff0c;全部修改 分别修改两个apache-tomcat…

【STM32】RTC实时时钟

1 unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区…

Linux第14步_安装FTP服务器

安装“vim编辑器”后&#xff0c;我们紧接着“安装FTP服务器”。 1、在安装前&#xff0c;要检查虚拟机可以上网&#xff0c;否则可能会导致安装失败。 2、在虚拟机界面右击鼠标&#xff0c;弹出下面的对话框 3、点击“打开终端(E)”&#xff0c;得到下面的界面 &#xff1a;…

基于SpringBoot的高校毕业生离校管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的高校毕业生离校管理系统…

SQL Server 权限管理

CSDN 成就一亿技术人&#xff01; 2024年 第一篇 难度指数&#xff1a;* * CSDN 成就一亿技术人&#xff01; 目录 1. 权限管理 什么是权限管理&#xff1f; SQL server的安全机制 服务器级角色 数据库级角色 对象级角色 2. 创建用户 赋予权限 最重要的一步骤 1. 权限…

oracle和mysql怎么传输数据

传输Oracle和MySQL之间的数据可以使用多种方法&#xff0c;以下是其中两种常用的方法&#xff1a; 使用ETL工具&#xff1a;ETL工具是一种用于数据抽取、转换和加载的工具&#xff0c;可以将数据从一个数据库传输到另一个数据库。常用的ETL工具有Apache NiFi、Talend、Pentaho…

使用arm-linux-gcc出现Syntax error: word unexpected (expecting “)“)

使用arm-linux-gcc出现Syntax error: word unexpected (expecting ")") 出现这样的报错该怎么解决&#xff1f; arm-linux-gcc 1.c -o 1 /usr/local/arm/usr/local/arm/5.4.0/usr/bin/../lib/gcc/arm-none-linux-gnueabi/5.4.0/../../../../arm-none-linux-gnueabi/b…

MySQL与Oracle数据库在网络安全等级方面用到的命令

MySQL数据库命令集 查看数据库版本 SELECT VERSION(); 空口令查询 SELECT user,host,account_locked FROM mysql.user WHERE user ; SELECT * FROM mysql.user; 查询 用户的密码加密情况 SELECT HOST,USER,PLUGIN FROM mysql.user; 查询是否有空用户 SELECT host,user,plug…

henauOJ 1102: 词组缩写

题目描述 定义&#xff1a;一个词组中每个单词的首字母的大写组合称为该词组的缩写。 比如&#xff0c;C语言里常用的EOF就是end of file的缩写。 输入 输入的第一行是一个整数T&#xff0c;表示一共有T组测试数据&#xff1b; 接下来有T行&#xff0c;每组测试数据占一行&a…

深入理解神经网络训练与反向传播

目录 前言1 损失函数1.1 交叉熵&#xff08;Cross Entropy&#xff09;&#xff1a;1.2 均方差&#xff08;Mean Squared Error&#xff09;&#xff1a; 2 梯度下降与学习率2.1 梯度下降2.2 学习率 3 正向传播与反向传播3.1 正向传播3.2 反向传播 4 链式法则和计算图4.1 链式法…

2023 hnust 湖南科技大学 大四上 计算机图形图像技术 课程 期末考试 复习资料

计算机图形图像技术复习资料 前言 改编自&#xff1a;https://blog.csdn.net/Liu_Xin233/article/details/135232531★重点&#xff0c;※补充github 考试题型 简述题&#xff08;10分4题&#xff0c;共40分&#xff09; 第1章的基本内容三维观察流水线中的基本概念与理解三…

抖店不好做?类目赛道没选对、选品能力跟不上,做不起来很正常!

我是王路飞。 抖店一直做不起来&#xff1f; 新手吐槽抖店不好做&#xff0c;绝大多数都有以下两个问题存在&#xff1a;类目赛道没选对、选品能力跟不上。 那你们做不起来也是很正常的一件事了。 今天围绕抖店的核心&#xff0c;给你们聊下&#xff0c;正确的运营抖店思路…

后台管理系统 -- 点击导航栏菜单对应的面包屑和标签(Tag)的动态编辑功能

相信很多时候,面包屑和标签(Tag)的功能几乎是后台管理系统标配。 就是会随着路由的跳转来进行相应的动态更新。 我先展示一下效果: 1.面包屑 先说一下思路&#xff1a; 我们导航菜单点击之后,将当前显示路由对象存储到Vuex的storge里面,然后在面包屑组件里面,读取这个状态即可…