一:项目创建

个人用的是IDEA来做Demo的;

1.先创建一个空项目,然后创建一个基于Maven的java application项目;

2.创建好后配置pom.xml文件并最终reimport

<?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> <groupId>me.silentdoer</groupId>
<artifactId>spring-boot-test</artifactId>
<version>1.0-SNAPSHOT</version> <!-- 配置parent,这个就像applicationContext.xml里配置的一样,作为其它子元素的抽象父元素,但是允许子元素重写配置 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!-- 注意大小写 -->
<version>1.5.7.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.outputEncoding>UTF-8</project.build.outputEncoding>
<java.version>1.8</java.version>
<bootgi>org.springframework.boot</bootgi>
</properties>
<dependencies>
<dependency>
<!-- 由于上面配置了parent,故这里只需要配置那些需要覆写的即可(groupId还是得有),这个包里有包括web所需的所有SpringMVC的jar包 -->
<groupId>${bootgi}</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
          <groupId>${bootgi}</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

3.创建me.silentdoer.springboot.MySpringBootApplication类

package me.silentdoer.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* @author silentdoer
* @version 1.0
* @description the description
* @date 4/12/18 7:17 PM
*/ /**
* TODO 此注解指定下面的类是springboot的启动类,然后SpringApplication.run(...)时会自动去加载依赖的jar包/模块等(如tomcat)
* 顺便还从这个注解的源码里学到了创建注解对象时还可以通过“构造方法”初始化“属性”,然后注解的声明里还可以声明内部注解
*/
@SpringBootApplication
public class MySpringBootApplication {
public static void main(String[] args){
// TODO 注意,tomcat本质上是一个java application,这里内部实际上是运行了一个tomcat
// TODO 实现原理可以看:org.apache.catalina.startup.Bootstrap.main()方法
SpringApplication.run(MySpringBootApplication.class, args);
}
}

4.创建一个Controller类为me.silentdoer.springboot.controller.TestController

package me.silentdoer.springboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @author silentdoer
* @version 1.0
* @description the description
* @date 4/12/18 8:02 PM
*/
@RestController  // 使得不返回视图
public class TestController { // RESTFul api with get method.
@GetMapping("/hello") // 可以理解为RequestMethod.GET的RequestMapping,这里默认就是返回字符串而不需要viewResolver,如果需要要配置pom和application.properties
public String hello(){
return "hello.";
}
}

到这一步就可以对MySpringBootApplication run as java application了,然后浏览器里输入http://localhost:8080/hello得到输出hello.说明第一个SpringBoot程序创建成功;

二:SpringBoot中的一些特殊文件和目录

下面的内容全都是在resources下,即就是classes根目录下

1.application.properties文件,用于配置SpringBoot,但并不是applicationContext.xml一样的角色,里面可以做一些viewResolver/热部署等的配置

2.static目录(public也行),静态文件存放的目录(有那么点像webapp的角色,放在这里面的静态文件可以直接被访问)

注:比如我在static里有个test.html,那么访问http://localhost:8080/test.html最终能够访问到此静态页面,但是前提是test这个关键字不被Mapping到才最终去找static目录,即如果我有个@GetMapping("/test")那么是会优先被对应的handler方法拦截处理;

3.templates目录,存放模版文件(即jsp/freemaker之类的动态页面,不过SpringBoot官方不建议使用jsp而是默认用Thymeleaf来做动态页面)

三:SpringBoot的热部署

当我们做一些文件的更新操作时,需要重新启动项目才能令我们的更新生效。但是这种方式太浪费时间了,通过热部署可以让项目自动去探测那些变化文件并重新编译;

IDEA需要做一些额外操作,具体看:https://blog.csdn.net/wjc475869/article/details/52442484;

1.先添加devtools依赖

<dependency>
<groupId>${bootgi}</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>

2.在application.properties文件里添加

# 当classpath中有文件被devtools探测到有更新,则向SpringBoot发送restart的请求从而重启tomcat和重新加载Controller等bean
spring.devtools.restart.enabled=true

至此热部署便配置好了,只要修改了classpath中的文件都会导致SpringBoot的restart,这种方式只适合开发或测试环境,部署环境不能全部重启而应该只重新加载部分文件或redeploy,等有时间再查一下时候有相应配置(看了下有个livereload不知道是不是);

四:待续

SpringBoot初探的更多相关文章

  1. SpringBoot初探之Swagger配置

    Swagger是一个用于描述和测试restful接口的工具,只要在定义restful接口时增加一些类和方法的描述注解,通过很简单的配置就可以得到一个展示接口定义页面,也可以在页面上设置参数提交测试接口 ...

  2. SpringBoot初探(上传文件)

    学了Spring,SpringMVC,Mybatis这一套再来看SpringBoot,心里只有一句握草,好方便 这里对今天做的东西做个总结,然后在这之间先安利一个热部署的工具,叫spring-DevT ...

  3. springboot 初探 、基础及配置

    一.spring boot 的核心功能 独立运行的spring项目.内嵌servlet容器.提供starter简化maven配置.自动配置Spring.准生产的应用监控.无代码生成和xml配置二.sp ...

  4. SpringBoot初探JSP页面可能遇到的坑

    第一个坑就是依赖没有配了 网上很多依赖的配置代码 在pom.xml文件的dependencies添加以下依赖 <!-- servlet依赖 --> <dependency> & ...

  5. Springboot之初入江湖

    Hello,各位小伙伴大家好,我是小栈君. 今天的分享主题是关于Springboot主题分享,其实在写这个系列主题之前有想过一些关于分享技术的顺序问题,因为我在创建"IT干货栈"这 ...

  6. SpringBoot之旅第一篇-初探

    一.SpringBoot是什么? 微服务,应该是近年来最火的概念,越来越多的公司开始使用微服务架构,面试中被问到的微服务的概率很高,不管对技术的追求,还是为了进更好的公司,微服务都是我们开发人员的必须 ...

  7. SpringBoot整合Swagger初探

    当下的Web项目大都采用前后端分离+分布式微服务的架构.前后端分离式的开发中,前端开发人员要与后端开发人员协商通信接口,约定接口规范.因此对于开发人员来说能够维持一份及时更新且完整全面的API文档会大 ...

  8. gRPC编码初探(java)

    背景:gRPC是一个高性能.通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众 ...

  9. springboot 学习之路 8 (整合websocket(1))

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

随机推荐

  1. css重要知识点

    1.float:left;表示靠左显示.它是相对于距离最近的且以relative作为position的父元素而言的. 2.块级元素和行内元素 块级元素:占据了一个矩形框的元素,display属性的值为 ...

  2. Bootstrap(8) 路径分页标签和徽章组件

    一.路径组件路径组件也叫做面包屑导航.//面包屑导航 <ol class="breadcrumb"> <li><a href="#" ...

  3. wheelView实现滚动选择 三方开源的封装控件 spannableString autofitTextView、PinnedSectionListView SwipeListView等等

    wheelView多用于popupwindow用来滚动选择条目 github上的开源三方控件     spannableString   autofitTextView.PinnedSectionLi ...

  4. 如何将你拍摄的照片转换成全景图及六面体(PTGui)

    在完成全景照片的拍摄之后,接下来,我们需要的是进行全景图的拼接.全景图片分为两种类型1.立方体全景图(6面体)制作全景时通常使用该种格式 如下图 2.球形图(2:1的单张全景图片)2:1全景图宽高比例 ...

  5. Python中setup.py一些不为人知的技巧

    http://python.jobbole.com/80912/ 在我开始之前,我想先说清楚我将要解释的是些“窍门”.他们不是“最好的做法”,至少在一种情况下是不可取的. 说到不可取的做法,我会适时写 ...

  6. 如何在Fragment中获取context

    文章转载自http://blog.csdn.net/demonliuhui/article/details/51511136 这里仅供自己学习参考: Context,中文直译为“上下文”,SDK中对其 ...

  7. iOS.PrototypeTools

    1. iPhone/iPad 原型工具 http://giveabrief.com/ 2. proto.io https://proto.io/ 3. Origami http://facebook. ...

  8. js 立即执行函数

    1.我们首先要搞明白:函数表达式和函数声明的区别. 函数表达式:既可以为匿名函数也可以有函数名,但是调用的时候都是通过函数左边的变量func来调用 var func = function(){ ale ...

  9. html 转化成 pdf

  10. [Robot Framework] 如何在Setup中用Run Keywords执行多个带参数的关键字

    参考文档:http://www.howtobuildsoftware.com/index.php/how-do/bZ7q/robotframework-setup-teardown-robot-fra ...