前言

记得当初放弃Java主要原因是几个框架整合,花了大半天去编写配置文件,编写任务后运行依然有报错,甚是心累,故转前端开发了。最近周围很多Java朋友说微服务开发很爽,各种简单,自己本地体验下,的确很简单。所以对此抱有很大的学习兴趣。

简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是Spring Boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,Spring Boot整合了所有的框架 。

Hello World

IDE:IntelliJ IDEA

JDK:1.8.0_172

由于我用的是IDEA编辑器,创建环境可以创建Spring Boot项目,当然你可以从https://start.spring.io/根据自身环境直接Generate Project生成zip文件进行编写。

在IDEA创建Spring Boot操作步骤如下:

  • 在主界面点击Create New Project后左边列表选择Spring Initalizr选项,右边选项除了JDK安装自身版本其他默认即可。
  • 点击Next到下一步,编写项目简介请根据实际自身情况编写。没有特需直接默认下一步。
  • Dependencies界面直接勾选Web-Web选项即可
  • 直接Next下一步后IDEA会进行构建依赖jar包,请等待完成。
  • 运行main方法,打开http://localhost:8080/地址查看效果

文件解析

如上图所示,项目目录解析:

  • pom.xml:Maven构建说明文件。
  • DemoApplication.java:一个带有main()方法的类,用于启动应用程序(关键)。
  • DemoApplicationTests.java:一个空的Junit测试类,它加载了一个使用Spring Boot字典配置功能的Spring应用程序上下文。
  • application.properties:一个空的properties文件,你可以根据需要添加配置属性。

pom.xml

Spring Boot父级依赖

在这儿简单说一下配置标签的意思很大的程度上和Spring MVC工程配置是不太一样的:

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

parent得知该配置是Spring Boot父级依赖:有了这个,当前的项目就是Spring Boot项目了,spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它之后,常用的包依赖可以省去version标签。关于Spring Boot提供了哪些jar包的依赖,可查看[Windows 10]C:\Users\Jaxson[你的用户名]\.m2\repository\org\springframework\boot\spring-boot-dependencies\2.0.2.RELEASE\spring-boot-dependencies-2.0.2.RELEASE.pom文件得知。

所以在原有的配置文件上想升级某个依赖文件版本的话,可以直接pom文件添加指定的配置版本,例如:

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

起步依赖 spring-boot-starter-xx

Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。举个例子来说明一下这个起步依赖的好处,比如组装台式机和品牌机,自己组装的话需要自己去选择不同的零件,最后还要组装起来,期间有可能会遇到零件不匹配的问题。耗时又消力,而品牌机就好一点,买来就能直接用的,后续想换零件也是可以的。相比较之下,后者带来的效果更好点,起步依赖就像这里的品牌机,自动给你封装好了你想要实现的功能的依赖。就比如我们之前要实现web功能,引入了spring-boot-starter-web这个起步依赖。

Spring Boot Maven插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 把项目打包成一个可执行的超级JAR(uber-JAR),包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序。
  • 搜索public static void main()方法来标记为可运行类。

应用入口类

DemoApplication是一个启动类,就是一个程序入口,下面添加一个入口类方法简单的演示下:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class DemoApplication {

    @RequestMapping("/")
    public String index() {
        return "Hello World";
    }

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

}
  • @SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置。
  • main方法这是一个标准的Java应用的main的方法,主要作用是作为项目启动的入口。
  • @RestController注解等价于@Controller+@ResponseBody的结合,使用这个注解的类里面的方法都以json格式输出。

启动后在浏览器会看到Hello World内容,一个简单的Web的项目就这样搞定。

进阶

项目目录

在实际项目中建议使用:

com
  +- example
    +- myproject
      +- Application.java
      |
      +- domain
      |  +- Customer.java
      |  +- CustomerRepository.java
      |
      +- service
      |  +- CustomerService.java
      |
      +- web
      |  +- CustomerController.java
      |
  • Application.java 建议放到跟目录下面,主要用于做一些框架配置
  • domain 目录主要用于实体(Entity)与数据访问层(Repository)
  • service逻辑层主要是业务类代码
  • web(controller) 负责页面访问控制

养成一个目录清晰结构习惯是必须的…方便后期的维护性和可读性。

编写单元测试

同样测试类编写是很重要的习惯,在本实例编写简单的http请求测试,使用mockmvc进行,利用MockMvcResultHandlers.print()打印出执行结果:

package com.example.demo;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    private MockMvc mvc;
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new DemoApplication()).build();
    }

    @Test
    public void contextLoads() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }

}

开发环境的调试

热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程中,改动项目启重启总是报错;但springBoot对调试支持很好,修改之后可以实时生效,需要添加以下的配置:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
   </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
   </plugins>
</build>

该模块在完整的打包环境下运行的时候会被禁用。如果你使用java -jar启动应用或者用一个特定的classloader启动,它会认为这是一个“生产环境”。

总结

  • Spring Boot父级依赖的概念
  • 起步依赖 spring-boot-starter-xx的概念
  • 应用入口类的作用

参考

Building an Application with Spring Boot


淮城一只猫

永远年轻,永远热泪盈眶

发表评论

电子邮件地址不会被公开。 必填项已用*标注

我不是机器人*

EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00