SpringBoot 入门

11 篇文章 0 订阅
10 篇文章 0 订阅

一、SpringBoot 入门

1、SpringBoot 简介

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

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

J2EE开发的一站式解决方案

2、微服务

在2014,MartinFowler(马丁·福勒)提出了什么是微服务?

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

 

简而言之,microservice架构风格是一种将单个应用程序开发为一组小服务的方法,每个服务都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围绕业务能力构建的,可以通过全自动部署机制独立部署。对这些服务的集中管理非常有限,这些服务可以用不同的编程语言编写,并使用不同的数据存储技术。 

以上就是对马丁福勒的微服务简介,感兴趣的小伙伴可以去他的个人网站 看一下。


从上面的内容不难看出:

微服务:是一种架构风格

一个应用应该是一组小型服务,可以通过HTTP的方式进行互通;

与之相对的就是单体应用(all in one)

这种模式的应用在开发测试的时候很方便简单,因为都是一个应用,不牵扯到多个应用的互联互调,所以在开发和测试都会很便捷,因此,部署也会简单,只需要把应用打包成一个war包放在tomcat里面,不会给运维带来太大的困难。在水平扩展也是一样的,当应用的负载能力不行的时候,将相同的应用复制到新的一个服务器里面,然后这些复制出来的服务器都在跑相同的应用,通过负载均衡机制,提高并发数据量。但是他带来的问题就是前牵一发而动全身,如果需要改一个地方,那么你复制出来的所有服务都要重新进行操作。但是在日与增长的应用需求导致大型应用的形成,导致一些弊端的出现。

每一个功能元素最终都是一个可独立替换和地理升级的软件单元。 

详细可以参照微服务文档 


那么使用微服务搭建起来的应用是什么样子的呢?如下图

图中的每一个小黑点可以理解成为每一个服务,例如 支付、用户、购物等,每一个小黑点之间使用HTTP进行访问,然后不断的将服务微化,形成一个服务网。 但是对于如此一个大型的应用来说,构建项目、部署和运维成了一个难题。 但是Spring已经为我们想好了这些场景:

 

 这就是Spring的解决策略,使用SpringBoot创建项目,然后使用SpringCloud进行应用网搭建,使用SpringCloudDataFlow进行数据传输。

3、SpringBoot HelloWorld

一个功能:

浏览器发送hello请求,服务器接收请求并处理,响应Hello World字符串

1.创建一个maven工程(jar)

  • new 一个project

 

  • 不选择任何Maven模板

 

  • 起个GroupId、ArifactId

 

  • 起个项目名。注意:Idea_Project是存放此项目的工作区间,mavenDemo_idea15为存放此项目的子目录。

 

  • 建好项目后,打开,点击Auto-Import

 

2.导入Spring Boot的相关依赖

     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

3.编写一个主程序,启动springboot项目

/**
 * @SpringBootApplication 来标注一个主程序类,说明这个是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {

    /**
     * Spring应用启动起来
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }

}

4.编写相关的Controller、Service

@Controller
public class HelloController {


    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

5.运行主程序测试

           通常访问地址为:localhost:8080/hello 返回为 Hello World!  即为完成

6.简化部署

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

将这个应用打成jar包,然后使用java -jar 运行即可

 

4、Hello World 探究

1.pom.xml文件

1.父项目

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/> 
    </parent>
    
    他的父项目是
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.2.0.RELEASE</version>
      <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>
    他来真正管理SpringBoot应用里面的所有依赖版本

SpringBoot的版本仲裁中心;

以后我们导入依赖默认是不需要些版本的;(如果没有在dependencies中没有声明版本号,需要自行写)

2.导入的依赖(启动器)

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

spring-boot-starter-web:

         spring-boot-starter:spring-boot场景启动器;  帮我们导入了Web模块正常运行所以来的组件;

SpringBoot将所有的场景都抽取了出来,做成了一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器。

2.主程序类,主入口类

/**
 * @SpringBootApplication 来标注一个主程序类,说明这个是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {

    /**
     * Spring应用启动起来
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }

}

@SpringBootApplication: SpringBoot 应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

@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}
)}
)
@ConfigurationPropertiesScan
public @interface SpringBootApplication {

@SpringBootConfiguration:SpringBoot的配置类

      标注在某个某类上,表示这是一个SpringBoot的配置类;

     @Configuration: 配置类上来标注这个注解;

           配置类---- 配置文件;配置类也是容器中的一个组件:@Component

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

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

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包

      @Import(AutoConfigurationPackages.Registrar.class):Spring的底层注解@Import,给容器中导入一个组件;导入的组件由

AutoConfigurationPackages.Registrar.class;

    将主配置类(@SpringBootApplication标注的类)的所有在包及下面所有的子包里面的所有组件扫描到Spring容器;

@Import(AutoConfigurationImportSelector.class)

      给容器导入组件?

     AutoConfigurationImportSelector:导入那些组件的选择器;

     将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中;

      会给容器导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件
 

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

 SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,ClassLoader);

SpringBoot在启动时,从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,然后自动配置类就生效了,帮我们进行自动配置工作。以前我们需要之前配置的东西(Spring),自动配置类已经帮我们处理完了。

j2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.2.0.RELEASE.jar 

5. 使用Spring Initalizer快速创建SpringBoot项目

1.点击File>New>Project,弹出新建项目界面,我们通过SpringB Initializr进行创建。

2.下一步,填写项目的基本信息。

3.下一步,选择SpringBoot的版本以及需要的一些依赖,这里我们选择当前的最新版本2.1.3,并添加一个web依赖 。项目就创建完成。

项目的基础结构如图所示:

POM文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sihan</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <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>
    </dependencies>

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

</project>

4.添加一个web接口进行测试。创建一个Hello接口并进行访问。

提示:Springboot默认集成了tomcat作为应用服务器,默认端口为8080,详细的配置参数会在下一篇博文中进行详细讲解。HelloController.java文件因位于SpringBootDemoApplication的同包或下级包中,这是SpringBoot默认的自动扫描路径,后续可以通过配置文件指定。
HelloController.java

@RestController
public class HelloController {


    @RequestMapping("/hello")
    public String hello(){
        return "hello world quick!";
    }
    
}

5.启动项目访问http://localhost:8080/hello


IDE都支持使用Spring的项目创建向导快速创建一个SpringBoot项目;

选择我们所要的模块,向导会联网创建SpringBoot项目;

默认生成的SpringBoot项目;

  • 主程序已经生成好了,我们只需要直接开始我们的逻辑(controller,service)
  • resources文件夹目录结构:

       static:保存所有的静态资源(js css img)

      remplates: 保存所有的模板页面(SpringBoot默认jar包使用嵌入式的Tomcat,默认不支持jsp页面),可以使用模板引擎freemarker、thymeleaf

      application.properties:SpringBoot应用的配置文件

           

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值