spring boot 原理、demo 与打包运行

Spring  Boot的背景,我们为什么要用它,它能给我们带来什么遍便利?


        回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用gradle来构建的话基本也一样)然后新建Spring相关的xml文件,而且往往那些xml文件还不会少。然后继续使用tomcat或者jetty作为容器来运行这个工程。基本上每次创建一个新的项目都是这么一个流程,而我们有时候仅仅想快速的创建一个Spring web工程来测试一些东西,或者是希望能节省时间。

       现在我们使用Spring Boot就可以快速的做到这些了。spring boot可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。


Spring boot 的理念:


      从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。简便起见,该框架也提供了命令行界面,它可以用来运行和测试Boot应用。框架的发布版本,包括集成的CLI(命令行界面),可以在Spring仓库中手动下载和安装

       实际中springboot将应用打包之后,会生成一个fat jar,里面包含了应用依赖的jar包,还有Spring boot loader相关的类

       Fat jar的启动Main函数是JarLauncher,它负责创建一个LaunchedURLClassLoader来加载/lib下面的jar,并以一个新线程启动应用的Main函数。LaunchedURLClassLoader和普通的URLClassLoader的不同之处是,它提供了从Archive里加载.class的能力。结合Archive提供的getEntries函数,就可以获取到Archive里的Resource。当然里面的细节还是很多的。(详细查看源码)


Spring boot 实现?


         Spring Boot 推荐采用基于 Java 注解的配置方式,而不是传统的 XML。只需要在主配置 Java 类上添加“@EnableAutoConfiguration”注解就可以启用自动配置。Spring Boot 的自动配置功能是没有侵入性的,只是作为一种基本的默认实现。开发人员可以通过定义其他 bean 来替代自动配置所提供的功能。比如当应用中定义了自己的数据源 bean 时,自动配置所提供的 HSQLDB 就不会生效。这给予了开发人员很大的灵活性。既可以快速的创建一个可以立即运行的原型应用,又可以不断的修改和调整以适应应用开发在不同阶段的需要。可能在应用最开始的时候,嵌入式的内存数据库(如 HSQLDB)就足够了,在后期则需要换成 MySQL 等数据库。Spring Boot 使得这样的切换变得很简单。

       @EnableAutoConfiguration”注解的作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,这就减少了开发人员的工作量。@EnableAutoConfiguration注解会告知Boot要采用一种特定的方式来对应用进行配置。这种方法会将其他样板式的配置均假设为框架默认的约定,因此能够聚焦于如何尽快地使应用准备就绪以便运行起来。

       Spring Boot 的这个配置优先级看似复杂,其实是快速地修改配置参数值,而不需要重新打包和部署应用。

Spring boot的配置和使用:

1. 首先需要新建一个普通的maven 工程;

2. 要在pom.xml文件中添加依赖如下

  <projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>

    <artifactId>spingboot-demo</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <parent>

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

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

       <version>1.0.0.RC1</version>

    </parent>

    <!-- Add typicaldependencies for a web application -->

    <dependencies>

       <dependency>

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

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

           <version>1.0.2.RELEASE</version>

       </dependency>

       <dependency>

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

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

       </dependency>

    </dependencies>

 

    <repositories>

       <repository>

           <id>spring-snapshots</id>

           <url>http://repo.spring.io/libs-snapshot</url>

       </repository>

    </repositories>

 

    <pluginRepositories>

       <pluginRepository>

           <id>spring-snapshots</id>

           <url>http://repo.spring.io/libs-snapshot</url>

       </pluginRepository>

    </pluginRepositories>

 

    <build>

       <plugins>

           <plugin>

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

              <artifactId>spring-boot-maven-plugin</artifactId>

           </plugin>

       </plugins>

    </build>

</project>

4.运行  

第一种方式

     通过在UserController中加上@EnableAutoConfiguration开启自动配置,然后通过SpringApplication.run(UserController.class);运行这个控制器;这种方式只运行一个控制器比较方便;


代码如下:

@RestController

@EnableAutoConfiguration

public class Application {

@RequestMapping("user")

public static StringSayHello() {

        return"Hello Word!";

}

public static voidmain(String[] args){

        SpringApplication.run(Application.class,args);

}

}

第二种方式

通过@Configuration+@ComponentScan开启注解扫描并自动注册相应的注解Bean


代码如下:

@Configuration

@ComponentScan

@EnableAutoConfiguration

public class Application {

public static voidmain(String[] args){

        SpringApplication.run(Application.class,args);

}


将工程打包成独立运行jar

       进入cmd 定位到项目目录下然后执行 mvn clean  package –DskipTests

然后会在项目的target文件夹下出现jar例如(spingboot-demo-0.0.1-SNAPSHOT.jar

然后再cmd 的C盘 用户目录下执行命令$ java –jar jar包的目录)E:\program\spingboot-demo\target\spingboot-demo-0.0.1-SNAPSHOT.jar

回车运行会有如下图

spring boot 原理、demo 与打包运行_第1张图片

出现下图表示运行成功

spring boot 原理、demo 与打包运行_第2张图片

然后在浏览器中输入端口号和地址进行访问。

spring boot 原理、demo 与打包运行_第3张图片

这就立马能够明白spring boot 的优势了,直接一个jar 包和java 环境就能运行web 项目了

遇到的问题:端口占用问题

       运行独立jar 包时可能会出现端口占用问题,springboot 的内嵌tomcat 的端口是8080 这个端口可能会被oracle (我就是)占用或者 tomcat(默认8080)占用所以我们要重新配置内嵌tomcat的端口号步骤如下

1.   resource 目录下新建application.properties 文件(文件名一定要application.properties 因为这个是默认的配置,如果文件名字不是这个则需要手动的添加识别)配置如下图

spring boot 原理、demo 与打包运行_第4张图片

你可能感兴趣的:(spring,Boot)