Spring Boot入门教程,进军微服务从这出发

Spring Boot 部署打包成 jar 和 war 有什么不同? 首先给大家来讲一个我们遇到的一个奇怪的问题:我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行,没任何问题,为什么这里不需要tomcat也可以运行了?然后我打包成war放进tomcat运行,发现端口号变成tomcat默认的8080(我在server.port中设置端口8090)项目名称也必须加上了。 阅读详情

认识SpringBoot

什么是SpringBoot

简单的说Springboot 是一个用于加速构建基于Spring的应用程序的框架,你可以把他叫做Spring集成框架,Spring敏捷开发框架;

Spring boot,让创建一个可用于生产级别的Spring应用程序变得非常简单,大多数Springboot应用程序需要仅最少的Spring配置。

ok,可以看得出Springboot并不是提供了某种新功能而是,将原来繁琐的框架整合变得更简单了;这样一来我们便可以专注于务逻辑的实现;

为什么需要Spring?

原因很简单了,以往在开发一个基于Spring的web项目时我们需要编写大量的配置文件,非常的耗时和低效,且容易出错,但是我们也会发现大多数应用程序的配置信息都是一样的,在这个敏捷开发大行其道的时代,Java也需要有一个能够大幅加快开发速度的框架,Spring boot应运而生, 我相信即使没有Spring boot 也会出现这样一个框架;

创建Spring-web项目过程对比

回顾一下我们以往在开发一个ssm项目时我们要做什么事情:

  • 安装tomcat,用于部署最后产生的war
  • 创建一个Maven项目,添加各个框架所需要的依赖包,这是还需要考虑依赖的版本兼容问题
  • 创建,编写一堆看起来复杂,但又重复的配置文件,整合各个框架到Spring中
  • 业务开发
  • 测试-打包,发布到tomcat

Spring boot:

  • 默认将tomcat打包到项目中作为默认服务器,(应用程序自己包含了tomcat)
  • 创建一个Maven项目,当然你可以不创建直接去官网下载一个空项目
  • 在pom中添加需要集成的框架的starter(启动器),starter会自动完成框架与Spring的整合和配置
  • 一个简单的spring boot配置文件,仅需要提供少数必需的配置如jdbc参数
  • 业务开发
  • 直接运行main方法,或者使用maven运行,或者打包为jar 通过java -jar命令行运行

需要注意的是Spring boot 是需要依赖构建工具的,可以是maven和gradle;

Spring boot的核心功能

  1. 起步依赖(starter)

    起步依赖本质上就是一个pom,(项目对象模型),其中包含了某个框架/功能运行所需的基础依赖信息,当我们需要某个框架/功能时加入该框架/功能的依赖即可

  2. 自动配置

    Spring Boot会在启动时完成对各个框架的自动配置,考虑了众多因素,最终决定Spring配置应该用哪个,不该用哪个, 该过程是Spring自动完成的;

  3. 内置tomcat 或jetty等servlet容器

  4. 没有代码生成,不需要XML配置

  5. 尽可能自动配置Spring容器中的bean;

入门程序

案例

  • 创建基础的maven过程
  • 在pom中继承SpringBoot的starter,这决定了该工程是一个Spring boot工程
  • 注意这不是依赖,而是继承关系,就像一个class一样,通过继承拥有父类的功能
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.4.RELEASE</version>
</parent>
  • 在pom中添加web的starter依赖,告诉maven,web应用需要用到的依赖有哪些,只需要加进来就可以,Spring boot 将会自动完成响应的配置
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  • 编写Spring boot引导类,为spring boot提供一个启动入口
//引导类不允许放在根目录下
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        //启动Spring boot 需要指定引导类
        SpringApplication.run(Application.class);
    }
}
  • 创建一个用于测试的controller
@RestController
public class HelloController {
    @RequestMapping("/hello/{name}")
    public String helloTest(@PathVariable String name){
        return "hello spring : "+name;
    }
}

此时工程目录如下:
image-20200314174154671

  1. 运行主函数,启动应用
    image-20200314174310200

  2. 浏览器访问http://localhost:8080/hello/aaa,tomcat默认运行在808端口,可通过控制台查看

注意:引导类不能放在根目录下;

通过maven插件来运行

maven可以帮助我们在运行前检查依赖关系

  1. 添加插件

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>

     

  2. maven命令

    spring-boot:run

     

整合mybatis

添加了starter-web起步依赖后,工程就完成了Spring 和SpringMVC相关依赖和整合配置,我们已经可以处理客户端的请求并返回响应了,但是我们的数据是存储在数据库的,需要整合mybatis到项目中

添加starter和JDBC驱动

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>
<!--mybatis不能确定我们要链接的数据库类型 所有需要手动导入MySQL驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

准备数据


CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` char(10) DEFAULT NULL,
  `password` char(12) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES (1,'admin','123321'),(2,'jerry','123'),(3,'22','222');

创建实体Bean

public class User {
    private Integer id;
    private String username;
    private String password;
    set/get
}

创建Mapper接口

package com.yyh.mapper;
import com.yyh.pojo.User;
import java.util.List;
@Mapper //mybatis 能识别带有该注解的mapper
public interface UserMapper {
    public List<User> selectAllUser();
}

创建Mapper映射文件

<?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.yyh.mapper.UserMapper">
    <select id="selectAllUser" resultType="user">
        select * from user
    </select>
</mapper>

测试控制器

@RestController
public class UserController {

    @Autowired
    private UserMapper userMapper;
    
    @GetMapping("/user/list")
    @ResponseBody
    public List<User> getAllUsers(){
        return userMapper.selectAllUser();
    }
}

创建配置文件

在resources下创建名称为application.properties的文件,内容如下,另外spring还支持yml格式的配置文件


#DB Configuration:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot?
serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=admin
#spring集成Mybatis环境
#pojo别名扫描包 mybatis.type-aliases-package=com.yyh.pojo

指定扫描mapper所在的包

若没有使用@Mapper注解需要在启动类中添加扫描包信息

@SpringBootApplication
@MapperScan("com.yyh.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

maven编译设置

默认情况下,maven在打包时会将java目下的*.java 以及resource下的配置文件诸如(*.xml,*.properties)等编译到target中,这个两个文件夹都属于classpath,一些人为了方便查找可能会将mapper文件和接口文件一起放在java目录下,但是maven并不会将java目录下的xml进行编译的,这时可以在pom中指定要编译的目录信息

 <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

使用thymeleaf模板引擎

在这之前我们一直在使用jsp来作为视图层,但是jsp必须依赖servlet容器,浏览器无法直接渲染jsp文件每次开发调试想要看到最新的效果都必须重新编译jsp,所以Spring boot 并不推荐我们使用jsp,视图层可以使用模板引擎,目前主流的有thymeleaf,和freemaker,官方推荐thymeleaf;

Spring boot 提供了thymeleaf的默认配置,所以在spring boot 中使用thymeleaf非常方便,Spring boot 还设置了thymeleaf的默认视图解析器,可以像操作jsp一样来操作Thymeleaf。Controller层几乎没有任何区别,就是在模板语法上有区别。

需要强调的是:模板依然是在后端完成渲染(前后端不分离),运行流程和jsp是一样的,关于thymeleaf详细用法不是本章的重点,参见官网。

添加Thymeleaf的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

编写Thymeleaf模板

注意:模板必须放到src/main/resources/templates目录下。

<!DOCTYPE html>
<!--添加名称空间后idea可以提示补全-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>user list</title>
</head>
<body> 用户列表:<br>
<table border="1">
    <tr>
        <th>id</th>
        <th>username</th>
        <th>password</th>
    </tr>
    <tr th:each="user:${userList}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.username}"></td>
        <td th:text="${user.password}"></td>
    </tr>
</table>
</body>
</html>

Service

@Service
public class UserServiceImpl  implements UserService {
    @Autowired
    private UserMapper mapper;

    public List<User> getAall(){
        return mapper.selectAllUser();
    }

}

Controller

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/user/list")
    @ResponseBody
    public List<User> getAllUsers(){
        return userService.getAall();
    }
}

热部署插件

当我们controller和service开发完毕调试视图时,热部署可以在检测到页面修改后自动重新加载,方便调试

添加插件依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

<!--若不生效可以在build中配置fork 表示插件在独立的进程中运行-->
<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <fork>true</fork>
  </configuration>
</plugin>

打开IDEA自动编译

File-Settings-Compiler-Build Project automatically

允许运行过程中自动生成

ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

静态资源访问

在SpringMVC中需要手动配置静态资源的映射关系,而Spring boot 默认以及添加了静态资源的配置,可以将静态资源请求映射到resources下的static目录

我们来看一下目前的目录结构:

image-20200317175856818

这也是一个Spring boot过程基本的目录结构

Junit测试

当我们需要单独测试容器中某个bean时,从头到尾的执行一遍业务逻辑是非常耗时的,这时就可以Junit来进行单元测

添加起步依赖:

<dependency>
		<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
import java.util.List;
@RunWith(SpringRunner.class) 
@SpringBootTest(classes = Application.class)//启动类
public class BootTest {

  	//注入需要测试的bean
    @Autowired
    UserService userService;

    @Test
    public void test1() {
        List<User> aall = userService.getAall();
        System.out.println(aall);

    }
}

也可以使用SpringJUnit4ClassRunner来作为测试引擎。

以上就是小编整理的SpringBoot入门教程,只是小编个人的见解,哪里有不准确的地方,还请各位大佬多多指出,咱们共同进步!!!

喜欢文章请多多点赞评论转发,关注小编,后续小编会为大家带来更丰富的学习内容~~~~

《大明王朝1566》中,朝廷财政危机无法解决的根源分析 财政困局中的财富最终流向三重黑洞:​皇室挥霍​(如嘉靖炼丹修殿)、特权阶层贪腐​(严党年入百万两盐税)、制度性损耗​(宗室供养、低效官僚)。更深层的“钱”其实是被禁锢在道德化治理的牢笼中——当国家用“黄河长江皆可为用”的权术思维替代制度性改革时,财政危机便成为帝制王朝无法逃脱的宿命。 阅读详情

相关推荐

【JavaSE】之流程控制与方法

Java基础之Java流程控制与方法相关知识介绍~

小新要变强的博客 5800

SpringBoot简单介绍(1)

1、什么是SpringBoot SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期(https://spring.io)。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,整合了市面上主流的大多数框架,可以看做是一个脚手架角色。 2、SpringBoot出现的背景 Spring缺点...

百里慕溪 4677

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 288

第一章 Springboot 简单介绍

  随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重:繁 多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。       在上述环境下,SpringBoot 应运而生。它使用"习惯优于配置"(项目中存在大量的配置,此外 还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用 SpringBoot ...

rui9999999的博客 7118

opencv的cmake报错

1、下载 ippicv_2021.8_win_intel64_20230330_general.zip、v0.1.2a.zip、opencv_videoio_ffmpeg.dll、opencv_videoio_ffmpeg_64.dll、ffmpeg_version.cmake。由于下载源在https://raw.githubusercontent.com,由于网络原因下载不顺畅,可以先找到文件下载到对应文件夹下,或者更改网络环境。ffmpeg_version.cmake文件,打开后显示如下, 另存即可。

nownow_的博客 1299

芒果YOLOv7改进48:主干篇:独家首发改进:目标检测新范式骨干PPHGNetv2改进版,充分融合信息特征,提升YOLOv7检测能力

YOLOv7代码改进实践 | 独家首发改进 PPHGNetv2 改进版结构

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1851

SpringBoot世上最简洁的概况说明

SpringBoot简介说明

qq_25073223的博客 853

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5223

SpringBoot 调用python接口

SpringBoot调用Python脚本 一、前言 二、方法 1、代码 2、运行 一、前言 SpringBoot作为后端开发框架,有强大且方便的处理能力。但是作为一个结合数据分析+前台展示的网站来说,后端的数据处理模块使用python脚本要更加方便。 本文主要介绍如何利用Springboot框架调用python脚本 二、方法 其实一句话来说就是利用springboot(Java)中的命令行进行调用,直接上代码。 1、代码 python文件可以放在任意位置,但是如果后续需要进行部署的话建议放在

Ajekseg的博客 1831

性能优化-高通cDSP(QDSP6)架构详解

高通cDSP开发的商业价值30秒快速认识高通cDSP开发的商业价值【高通cDSP旨在处理一些简单但需要大量计算的场景,如图像处理、科学计算、AI训练、计算机视觉等。这些场景使用CPU来运算会极大的降低CPU的吞吐量,因此利用现代寄存器较宽的特性设计出了适配数据并行的DSP芯片,cDSP就是典型的代表。利用cDSP+CPU既可以满足一般的使用场景,也可以完成现代图像和视频数据的处理。

发狂的小花的博客 5947

(2-2-2)位置控制算法:常用的位置控制算法(2)

例如下面是一个使用滑模控制算法实现机器人位置控制的例子,在该例子中,假设机器人在一维空间中移动,目标是使机器人的位置迅速、鲁棒地达到设定的目标位置。自适应控制算法通过实时地调整控制器参数,可以适应系统的变化,从而提高系统的鲁棒性和性能。模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,通常应用于动态系统,以实现对系统状态的优化控制。(6)迭代优化:随着时间推移,MPC迭代执行上述步骤,持续优化控制输入,以适应系统动态和外部扰动,实现对系统状态的稳健控制。

码农三叔 1609

毕设(二)Spring Boot调用Python脚本运行

前言 整个调用过程只是一次简单尝试 使用的是Java的Runtime.getRuntime()方法 正确流程 写个python脚本 import numpy as np a = np.arange(12).reshape(3,4) print(a) 创建个springboot项目,写个Controller package com.example.demo.controller; import com.example.demo.service.FaceService; import org.

qq_44648936的博客 1万+

Python李峋同款跳动的爱心(完整代码)

Python语言实现李峋同款可写字版跳动的爱心的完整代码。

AIGC 4万+

Spring Boot入门教程,进军微服务从这出发,java三大特性面试回答

添加了starter-web起步依赖后,工程就完成了Spring 和SpringMVC相关依赖和整合配置,我们已经可以处理客户端的请求并返回响应了,但是我们的数据是存储在数据库的,需要整合mybatis到项目中。起步依赖本质上就是一个pom,(项目对象模型),其中包含了某个框架/功能运行所需的基础依赖信息,当我们需要某个框架/功能时加入该框架/功能的依赖即可。在pom中继承SpringBoot的starter,这决定了该工程是一个Spring boot工程。尽可能自动配置Spring容器中的bean;

2401_83947398的博客 911

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

spring boot编程思想 pdf_这才是真正的Spring全家桶:Spring+SpringData+MVC+Boot+Cloud

按照 Spring 官方最新的说法,Spring 是现代 Java 的起源。不可否认,Spring 无论在 Java 生态系统,还是在就业市场,是绝对的王者。面试出镜率之高,投产规模之广,无出其右。随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础设施,衍生出大量 Spring 技术栈,如大家熟知的 Spring Boot、Spring Cloud 和 ...

weixin_39721953的博客 1168

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java面试实录:从Spring Boot到微服务架构的全面考核

微服务是一种架构风格,将单一应用程序分解为一组小的服务,每个服务运行在自己的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。:哦,Spring Boot啊,它的核心特性就是简化了Spring应用的搭建,不用写那么多配置文件,像自动配置、内嵌服务器这些都是它的特色。:呃,用Eureka或者Consul都可以,它们负责保存服务实例的信息,其他服务可以通过它们来发现彼此。在某互联网大厂的面试室里,严肃的面试官正对着桌子另一边的谢飞机微微点头,准备开始今天的面试。:呃...这个嘛,可以用事务吧?

qq_31812159的博客 426

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

当下最火微服务合集,带你贯彻:Spring+SpringData+MVC+Boot+Cloud

按照 Spring 官方最新的说法,Spring 是现代 Java 的起源。 不可否认,Spring 无论在 Java 生态系统,还是在就业市场,是绝对的王者。面试出镜率之高,投产规模之广,无出其右。随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础设施,衍生出大量 Spring 技术栈,如大家熟知的 Spring Boot、Spring Cloud ...

求关注 454

这才是真正的Spring全家桶:Spring+SpringData+MVC+Boot+Cloud

Java是目前用户最多、使用范围最广的软件开发技术,Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三E方Java框架(如Spring、 MyBatis等) 构成。在国内,有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比而言,有关Java虚拟机的资料却显得异常贫乏。随着Java技术的不断发展,它已被应用于越来越多的领域之中。

m0_62051288的博客 439

asp.net mvc企业级实战_这才是真正的Spring全家桶:Spring+SpringData+MVC+Boot+Cloud

按照 Spring 官方最新的说法,Spring 是现代 Java 的起源。不可否认,Spring 无论在 Java 生态系统,还是在就业市场,是绝对的王者。面试出镜率之高,投产规模之广,无出其右。随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础设施,衍生出大量 Spring 技术栈,如大家熟知的 Spring Boot、Spring Cloud 和 ...

weixin_31829387的博客 381

小马哥spring编程核心思想_我用 spring 干掉了一摞简历

这段时间,忙到没时间学新东西,面试候选人,都有点心有余而力不足,想着抽空补补课,于是重读了 Spring 源码。想到最早那会儿,看到工厂、委派、策略、模板什么的就头疼,后来硬着头皮总结,才慢慢找到了方法。说说我的经验吧。我发现,虽然掌握了一些 Spring Boot 和 Spring Cloud 调试技巧,但每次出问题,还是得依赖搜索引擎来定位和解决。重大版本升级就更不用说了,再多经验都...

weixin_42116794的博客 737
上一篇: 深入学习MySQL——如何创建索引(一),躬身实战出真知
下一篇: 天才!刚入职阿里P6,是如何凭借Dubbo实战一路逆袭P8的?
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值