SpringBoot(一)从零开始一个简单的springboot WEB应用

为什么写

     之所以开始这个系列博客的写作,一个是因为目前公司处于整合阶段,而我们部门处于被裁员状态,没什么事,借此机会好好了解一下微服务相关的技术,之前对SpringBoot有了解,但是并未到精通的状态,所以想从最基础的写起,遇到经典的代码也会深入的分析一下,以提升自己
    之前也没怎么写过博客,不知道该怎么组织整体的架构,索性就边看SpringBoot的文档编写,根据官方的节奏来一步步深入,所以有的东西可能是直接从官方文档上翻译过来的,嘻嘻~

SpringBoot版本:v2.1.3.RELEASE
依赖管理:maven
JDK版本:1.8

Spring Boot 让你很容易创建一个基于Spring的生产级的独立应用

SpringBoot的特性 1

1、创建一个独立的Spring应用
2、内嵌Tomcat、Jetty 等运行容器
3、提供一系列的启动器来简化Spring配置
4、可以自动配置Spring或者其他第三方库
5、提供生产级的特性例如metrics,health checks 和一些扩展配置
6、绝对没有对XML配置的依赖和代码生成

HelloWorld
	<!-- 继承springboot的一些基本配置 -->
	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
package com.xhulife.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

然后就可以运行啦:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.3.RELEASE)
 .... some log here
2019-03-26 10:36:58.109  INFO 1581 --- [           main] com.xhulife.helloworld.Application       : Started Application in 16.534 seconds (JVM running for 22.249)

访问http://lcoalhost:8080如果能得到如下页面,那就证明成功啦
默认错误页
然后来一步步解释上面的代码的意义

spring-boot-starter-parent 节点:这是SpringBoot的基础配置,里面定义了很多杂项配置,比如编码、java的版本,其实这个节点又继承了spring-boot-dependencies这个pom,里面定义了所有spring自身或者可能使用到的包的版本信息,所以可能在后续我们添加其他依赖包之后都不需要再写依赖的库的版本

spring-boot-starter-web节点:这是创建一个SpringBoot Web应用的启动器,在Pom中包含这个依赖,SpringBoot就理解为你需要创建一个Web应用,并自动为你配置一个直接可用的Web容器,就可以直接使用之前了解的SpringMVC的知识,直接在这个应用上开始写。很是方便

@SpringBootApplication 这个注解其实是一个组合注解,包含了三个注解 @Configuration表明这是一个配置类 @EnableAutoConfiguration开启自动配置,如果没有这个注解,SpringBoot就不会再通过你的依赖再自动帮你配置了,具体机制后面再说 @ComponentScan 这个应该很熟悉,开启组件扫描,默认是扫描当前类所在包以及其子包下的类,所以当你需要托管给Spring的Bean 不在@ComponentScan注解类的当前包或者子包下的时候,需要手动指定组件扫描的basePackages,否则Spring无法管理相应的Bean

SpringApplication.run(): 就把这个方法当成是一个Spring应用的启动器,毕竟Java约定就是所有的Java程序都是应该从一个main方法作为入口的。因为我们的应用是基于Spring的,我们的一切应该交给spring去管理。整个main方法 可以理解成为:以Application为主要配置类,将外部参数args[]传递给Spring 运行一个Spring的应用

对外提供一个接口

我们新建一个类:com.xhulife.helloworld.hello.HelloController,注意Application所在的包和当前包的关系,组件扫描必须能扫描到com.xhulife.helloworld.hello.HelloController才行

package com.xhulife.helloworld.hello;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/say-hello")
    public String sayHello(String name){
        return "hello "+ name;
    }
}

访问http://localhost:8080/say-hello?name=world
就可以得到 hello world

打包

SpringBoot是提供内嵌的Tomcat的,所以,只需要将代码打包成jar包即可。要打包SpringBoot应用,它提供maven的打包插件,需要在pom中添加如下插件:

	<!-- Package as an executable jar -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

在对应模块的pom.xml路径下执行 mvn package 即可打包成可运行的jar,默认的路径为:target/ hello-world-2.1.3.RELEASE.jar,这样就可以用java的命令执行这个jar包

xhulife$ java -jar target/hello-world-2.1.3.RELEASE.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.3.RELEASE)
...some log here
2019-03-26 13:12:31.753  INFO 2767 --- [           main] com.xhulife.helloworld.Application       : Started Application in 16.764 seconds (JVM running for 17.143)

同样访问http://localhost:8080/say-hello 可以得到hello world

打包war

有的时候,SpringBoot吸引了我们,但是公司的服务的部署不支持Jar包部署或者其他原因,我们就需要把SpringBoot应用打包成War包了,只需要做一些小的改动就可以了,首先肯定是改造pom,因为SpringBoot提供了内嵌的Tomcat,如果要打成War包运行的话,肯定是放到Tomcat等服务下去运行,这些服务本身就已经提供了Tomcat运行所需的包了,我们需要把这些包定义为provided,让maven在打包的时候不要把这些包打到war包里面去。为什么是provided 而不是直接排除呢?我们开发调试的时候还可以用嘛,毕竟SpringBoot 的启动方式对于开发和调试还是比较方便的。

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<scope>provided</scope>
	</dependency>

第二个改造点就是声明打包方式了,需要添加一个packaging节点到project节点下

 <packaging>war</packaging>

还有一个需要改造的地方就是我们的SpringBoot入口类了,因为不是以Jar的方式运行,那我们的Application类的main方法是指定不会执行了,那么久需要提供给外部的tomcat另外的入口了,这个时候我们需要让Applicatoin类继承SpringBootServletInitializer并重写configure方法,其他不用做更改

@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }

好啦,现在可以开始打包了 mvn package 走起,生成的war包 依旧是在target/hello-world-2.1.3.RELEASE.war

未解决问题:war包打包之后并未生成web.xml 而Tomcat能够加载并且正确运行。这个还没有找到原因

源码:https://github.com/xhulife/spring-boot-series.git


  1. https://spring.io/projects/spring-boot ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值