IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Boot概述 -> 正文阅读

[Java知识库]Spring Boot概述

问题:

J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。?

Spring Boot简介

简化Spring应用开发的一个框架;

整个Spring技术栈的一个大整合;

J2EE开发的一站式解决方案;

解决:

“Spring全家桶”时代。(整个Spring技术栈的一个大整合)

Spring Boot?? J2EE一站式解决方案

Spring Cloud?? 分布式整体解决方案

优点:

– 快速创建独立运行的Spring项目以及与主流框架集成

– 使用嵌入式的Servlet容器,应用无需打成WAR包

– starters自动依赖与版本控制

– 大量的自动配置,简化开发,也可修改默认值

– 无需配置XML,无代码生成,开箱即用

– 准生产环境的运行时应用监控

– 与云计算的天然集成

缺点:

入门容易,精通难?

搭建Spring Boot项目?

准备环境

–jdk1.8:Spring Boot 推荐jdk1.7及以上; java version "1.8.0_201"

–maven3.x:maven 3.3以上版本;Apache Maven 3.6.1

–IntelliJIDEA2017:IntelliJ IDEA 2019 x64、STS

–SpringBoot 2.3.4.RELEASE:2.3.4;(SNAPSHOT快照版还在开发中、RELEASE发布版稳定版本)

1.新建Spring Boot项目

使用IDEA创建项目模块

在Module窗口中,选择左侧菜单中的“Spring Initializr”,选择Module SDK为JDK1.8,再点击“Next”按钮

?

?点击next时可能会出现的问题

?解决方案:???Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings._流烟默的博客-CSDN博客

使用Maven进行项目构建,需要根据需求设置Maven坐标,设置项目的构建方式和打包方式,设置完成后单击“Next”按钮?

选择依赖的Spring Boot版本和组件。选择Spring Boot版本为2.1.5。除了选择版本之外,Spring Boot还提供了很多可供选择的组件,这里由于要搭建Web项目,选择与Web项目相关的组件。单击Next按钮

?

设置项目名称和项目的存储位置,但是“Finish”按钮,完成一个Spring Boot项目的构建操作

?

创建完成的Spring Boot项目的结构如图所示:

2.编写java代码

打开Spring Boot项目src/main/java目录,在此目录的包下创建controller包,并在该包中创建控制器类SayHelloController,如图:

?

3.启动并测试

现在可以启动项目进行测试了

?

项目启动完成后,打开浏览器,访问http://localhost:8080/sayHello???

?

Spring Boot项目的三个核心文件

Spring Boot的三个核心文件(pom、启动类、application.properties)非常重要,这三个文件是Spring Boot能健康运行的关键

1.pom文件

注意:

由于咱们在创建SpringBoot项目时,选择的是加入Web组件,所以pom文件<dependencies>中的第一个依赖是spring-boot-starter-web。在不选择添加任何组件的情况下,pom文件<dependencies>中的第一个组件则会是spring-boot-starter。

?2.启动类

/**

 * @SpringBootApplication 来标注一个主程序类,说明这是一个SpringBoot应用

 */

@SpringBootApplication

public class Ch02Springboot1Application {

    public static void main(String[] args) {

        //Spring 应用启动起来

        SpringApplication.run(Ch02Springboot1Application.class, args);

    }

}

?@SpringBootApplication:SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,

SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

@SpringBootApplication注解是一个组合注解,它是由多个注解组合而成的注解;按住Ctrl键,单击@SpringBootApplication注解,可进入源码

?


@Target({ElementType.TYPE})  //java提供的注解

@Retention(RetentionPolicy.RUNTIME)  //java提供的注解

@Documented  //java提供的注解

@Inherited  //java提供的注解

@SpringBootConfiguration //SpringBoot提供的注解

@EnableAutoConfiguration //SpringBoot提供的注解

@ComponentScan( //Spring提供的注解

    excludeFilters = {@Filter(

    type = FilterType.CUSTOM,

    classes = {TypeExcludeFilter.class}

), @Filter(

    type = FilterType.CUSTOM,

    classes = {AutoConfigurationExcludeFilter.class}

)}

)

public @interface SpringBootApplication {


?@SpringBootConfiguration:SpringBoot的配置类;标注在某个类上,表示这是一个SpringBoot的配置类。

可替换Spring的applicationContext.xml配置文件,被注解的类内部可以包含有一个或多个被@Bean注解标注的方法,这些方法会被Spring的系统类扫描,并用于构建Bean定义,初始化Spring容器。

@EnableAutoConfiguration:开启自动配置功能;

以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效

@ComponentScan:扫描启动类同目录及子目录下的所有注解,使这些注解生效

3.application.properties / application.yml

spring-boot-starter-parent中可以识别一些特定名称的文件,其中application.properties文件是SpringBoot项目的配置文件,关于SpringBoot项目的大部分配置信息可以在此文件中进行编写。需要注意,此文件必须在项目的resources资源路径的根路径下。

?application.properties

application.properties文件是SpringBoot项目能自定识别的文件,而且SpringBoot的大部分配置信息可以在此文件中编写。

SpringBoot项目默认启动的端口号是8080。如何修改?

就是在application.properties文件中添加配置。server.port=8082

?

?启动项目时,观察日志信息如图;可以发现现在的端口号已经变成8082了,说明端口号修改成功了。

除了修改端口号之外,还可以在application.properties文件中修改项目的访问路径和一些与日志相关的简单配置。


# 端口号

server.port=8082

# 配置项目的访问路径 http://localhost:8082/ch02/....

server.servlet.context-path=/ch02/

# 配置日志的输出路径

# 在电脑的D:\logs路径下生成一个名为spring.log的日志文件。

# spring.log是当没有指定日志文件名时,SpringBoot默认设定的一个名称

# logging.file.path=D:/log

logging.file.path=D:\\logs

# 绝对路径 手动指定日志的输出文件名 logging.file.name=D:\\logs\\日志文件名.log

# logging.file.name=D:\\logs\\abc.log

# 相对路径 只写文件名时,系统会以当前项目所在的盘符根路径作为起始目录,创建同名日志文件

logging.file.name=abc.log

# 注意:logging.file.path和logging.file.name无法配合使用,

# 当两者同时配置时,只有logging.file.name生效

# 配置日志的输出格式 %d-%msg%n表示指定日志的输出格式为日期+日志内容+换行

logging.pattern.file=%d-%msg%n

?

application.yml

在Spring Boot项目中,除了使用application.properties文件进行配置以外,还可以使用application.yml文件。

application.yml属于YAML类型的文件,可以更直观地配置项目信息。如图:

?YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。

以前的配置文件;大多都使用的是 xxxx.xml文件;

YAML:以数据为中心,比json、xml等更适合做配置文件;

YAML:配置例子

server: 
port: 8081

?XML:

<server>
 <port>8081</port> 
</server>

YAML语法?

– 使用缩进表示层级关系

– 缩进时不允许使用Tab键,只允许使用空格。

– 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

– 大小写敏感

?


server:

  port: 8083

  servlet:

    context-path: /ch2/

logging:

  file:

    #path: D:\\logs #会在D:\logs路径下生成一个名为spring.log的日志文件

    #name: abc.log #系统会以当前项目所在的盘符根路径作为起始目录,创建同名日志文件

    name: D:\\logs\\abc.log #绝对路径 D:\logs路径下生成abc.log文件

  pattern:

      file: '%d-%msg%n' # yml格式配置日志输出格式识别不了%,应将值用单引号引起来

      #file: '%d{yyyy-MM-dd hh:mm:ss} [%thread] %-5level %logger{50} - %msg%n'


Spring Boot的Web项目的启动方式

Web项目一般需要部署到Web容器中运行,Spring Boot项目也不例外。但是上述的案例启动并没有进行部署,直接通过运行启动类就将项目启动了。原因是:Spring Boot项目自动完成了部署,部署到了Tomcat中。

?

?

Spring Boot项目中会内置Web容器,默认的内置Web容器是Tomcat,当然也可以通过修改pom.xml文件来替换它的内置Web容器。

Spring Boot支持3中内置容器:Tomcat、Jetty和Undertow。

下面以Jetty为例,如何将默认的内置容器Tomcat修改为Jetty

第一步:修改pom.xml文件,添加如下的配置,此配置的作用是禁用当前的Tomcat容器


    <!--此配置的作用是禁用当前的Tomcat容器-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            <exclusions>

                <exclusion>

                    <groupId>org.springframework.boot</groupId>

                    <artifactId>spring-boot-starter-tomcat</artifactId>

                </exclusion>

            </exclusions>

        </dependency>


?第二步:添加与Web容器Jetty相关的依赖

  <!--添加与Web容器Jetty相关的依赖-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jetty</artifactId>

        </dependency>

?第三步:启动项目查看启动日志

?

?如何将默认的内置容器Tomcat修改为Undertow

?

  <!--此配置的作用是禁用当前的Tomcat容器-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

            <exclusions>

                <exclusion>

                    <groupId>org.springframework.boot</groupId>

                    <artifactId>spring-boot-starter-tomcat</artifactId>

                </exclusion>

            </exclusions>

        </dependency> 

        <!--添加与Web容器Undertow相关的依赖-->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-undertow</artifactId>

        </dependency>

SpringBoot项目除了使用内置的Web容器启动外,还有其他多种启动方式:?

第一种:在本地Web容器中启动

通过Maven将项目打包成war文件,将war文件拷贝至本地Web容器中部署运行

1.首先打开pom文件,将原有的jar(默认为jar)修改为war

?

2.然后将启动类继承SpringBootServletInitializer,重写configure方法

?

?3.然后去运行【package】进行打包

?4.然后把target目录下的war包放到tomcat的webapps目录下,启动tomcat,即可自动解压部署。最后在浏览器中输入http://localhost:[端口号]/[打包项目名]/

第二种:使用Maven启动项目

进入项目根路径,执行 mvn spring-boot:run 命令

使用命令行的形式/DOS窗口

?使用IEDA的Terminal

?

?第三种:使用Java命令启动项目

通过Maven将项目打包成jar文件,进入jar文件所在目录,使用 java -jar 命令运行jar文件

java -jar 生成jar的文件名.jar

使用命令行的形式/DOS窗口

?

?使用IEDA的Terminal

?

Maven的多模块项目?

?

问题:复杂、庞大的企业级项目,开发和部署过程存在多种问题

结构不够清晰,开发人员不易定位自己负责的模块

项目庞大导致启动费时

部署时无法按模块需要分配资源,造成资源的浪费

解决方案:Maven提出多模块项目的方案

将一个大项目拆分成多个小的模块项目

拆分后的模块项目任务明确,耦合度低,方便管理和维护

演示案例

第一步:创建Maven父模块

1.左侧面板选择maven(不要选择Create from archetype选项),如下图,点击Next即可

2.依次补全如下信息,点击Next

3.输入项目名字。如ch02_parent,我们主要是在这个项目下创建我们的子模块

?

?4.这样我们就创建好了一个普通项目,因为该项目是作为一个Parent project存在的,不需要编写任何代码,可以直接删除src文件夹

?第二步:创建子模块,通常按职责划分子模块

beans:存放实体类

common:存放工具类、枚举类等项目中的核心类

dao:存放数据访问层代码

service:存放业务层代码

controller:存放控制器层代码

1.在父模块上右键如下图操作,创建一个模块,该模块即为子模块

?

?2.同样不选择Create from archetype选项,因为是普通模块,Next

?3.groupId和version继承自Parent project,这里只用ArtifactId,Next

?

?4.填写模块名称

?5.创建完成后结构如下图

?6.按照同样的方式创建,依次创建common、dao、service模块项目

7.创建controller模块的方式有所区别

? ? ? 7.1-使用maven-archetype-webapp创建一个Web项目

? ? ? 7.2-groupId和version继承自Parent project,这里只用ArtifactId,Next

? ? ? ?7.3-设置maven项目的属性

? ? ?7.4-填写模块名称

第三步:配置模块之间的依赖

Maven的依赖有两个特点:继承和传递

继承:即当B项目依赖A项目时,B项目可继承A项目引入的全部依赖。除了这种情形外,在多模块项目中,子模块和父模块之间也存在继承关系,这类似于java中的继承关系,即子模块会继承父项目中的全部依赖。

传递:即当B项目依赖A项目,C项目依赖B项目时,C项目除了可以继承B项目引入的依赖之外,还会继承A项目引入的依赖。

?

?在多模块项目中,子模块继承父项目,所以可以在父项目中统一管理通用的依赖,比如Log4j、Junit这种每个项目都会用到的依赖。又由于Maven的依赖是传递的,所以子模块之间可以直接线性依赖,即controller依赖service,service依赖dao,dao依赖common,common依赖beans,这样controller中需要调用beans中的实体类时,也可以顺利调用。模块依赖关系如图:

?问题:

对于只是部分子模块会用到的依赖,不会放到父项目中

而由子模块分别引入某个依赖,可能产生版本不一致的问题

解决方案:

在父项目的pom文件中使用<dependencyManagement>标签管理依赖的版本号

?



























    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>commons-logging</groupId>

                <artifactId>commons-logging</artifactId>

                <version>1.1.1</version>

            </dependency>

        </dependencies>

    </dependencyManagement>

?

?在父项目中添加了上面的示例代码后。

子模块中引入commons-logging依赖不需要指定版本号,版本号都是1.1.1。

子模块不需要commons-logging依赖的,则不会引入commons-logging依赖。这样就避免了版本冲突的问题。

?

?

此时,如果对父项目进行Maven的操作,子模块也会进行同样的操作。即当对父项目打包时,所有的子项目都会打包。这种通过父项目来操作子项目进行Maven操作的情形,就叫聚合。

注意:使用聚合时,父项目的pom文件中packaging都是pom。

使用Spring Initializr创建的Spring Boot项目也是Maven项目;可以使用Spring Initializr创建多模块项目,此时的每个模块都是Spring Boot项目\

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 10:59:34  更:2022-09-13 11:02:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:37:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码