SpringBoot入门

2019-01-10 19:48:00     

概要

在学习SSM(H)的过程中,需要做大量的配置工作,其实很多配置行为本身只是手段,并不是目的。 基于这个考虑,把该简化的简化,该省略的省略,开发人员只用关心提供业务功能就行了,这就是 SpringBoot。 换言之,SpringBoot可以简单地看成简化了的、按照约定开发的SSM(H)。 开发速度大大提升。

Eclipse 提供了一个专门开发 SpringBoot 的插件叫做 Spring Tool Suite. Help--Eclipse Marketplace然后搜索sts,就可以找到了

简单应用

创建SpringBoot项目实际就是创建一个MavenWeb项目: Eclipse创建Maven项目

Pom.xml文件

用以下pom.xml里面的内容覆盖掉项目里的pom.xml

<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>top.bounds</groupId>
	<artifactId>springboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot</name>
	<description>springboot</description>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

Application.java

创建 Application.java,其注解 @SpringBootApplication 表示这是一个SpringBoot应用,运行其主方法就会启动tomcat,默认端口是8080

package top.bounds.springboot;

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);
	}
}

BootController.java

注意这个类所在的包是有一定的要求的,如果Application.java所在的包为top.bounds.springboot,那么BootController.java所在的包一定是在它的下级目录,例如:top.bounds.springboot.controller

接着创建控制器类BootController,这个类就是Spring MVC里的一个普通的控制器。@RestController 是spring4里的新注解,是@ResponseBody和@Controller的缩写

package top.bounds.springboot.controller;

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

@RestController
public class BootController {

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

运行并测试

接下来就运行Application.java, 然后访问地址http://127.0.0.1:8080/hello 就能看到测试效果了

热部署

目前的Springboot,当发生了任何修改之后,必须关闭后再启动Application类才能够生效,显得略微麻烦。 Springboot提供了热部署的方式,当发现任何类发生了改变,马上通过JVM类加载的方式,加载最新的类到虚拟机中。 这样就不需要重新启动也能看到修改后的效果

做法很简单,在pom.xml中新增加一个依赖就行了

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>

重新启动Application,然后随便修改一下BootController, 就可以观察到控制台的自动重启现象

结合JSP

pom.xml

增加对JSP支持

<!-- servlet依赖. -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持. -->
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

application.properties

src/main/resources目录下增加 application.properties文件,用于视图重定向jsp文件的位置

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

BootController

修改BootController,把本来的@RestController 改为@Controller。这时返回"hello"就不再是字符串,而是根据application.properties 中的视图重定向,到/WEB-INF/jsp目录下去寻找hello.jsp文件

package top.bounds.springboot.controller;

import java.text.DateFormat;
import java.util.Date;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BootController {

	@RequestMapping("/hello")
	public String hello(Model m) {
        m.addAttribute("now", DateFormat.getDateTimeInstance().format(new Date()));
        return "hello";
	}
}

hello.jsp

在main目录下,新建-> webapp/WEB-INF/jsp 目录。随后新建hello.jsp 文件,在其中使用EL 表达式显示放在BootControllermodel中的当前时间。

hi,bounds 现在时间是${now}

重启访问:http://127.0.0.1:8080/hello

端口和路径

application.properties

可以通过修改application.properties,修改访问的端口号和上下文路径

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.port=8888
server.context-path=/bounds

此时访问的路径就变更为:http://127.0.0.1:8888/bounds/hello

配置切换

有时候在本地测试是使用8080端口,可是上线使用的又是80端口。 此时就可以通过多配置文件实现多配置支持与灵活切换

application.properties

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.profiles.active=pro

application-dev.properties

server.port=8888
server.context-path=/bounds

application-pro.properties

server.port=8080
server.context-path=/test

3个配置文件:

  • 核心配置文件:application.properties
  • 开发环境用的配置文件:application-dev.properties
  • 生产环境用的配置文件:application-pro.properties

这样就可以通过application.properties里的spring.profiles.active 灵活地来切换使用哪个环境了

ps:本篇博客源码下载链接:https://pan.baidu.com/s/1BElEpyJxAJ_z_wVrwE6wKA密码:tjc3
Quartz集群

这所谓的Quartz集群,是指在 基于数据库存储 Quartz调度信息 的基础上, 有多个一模一样的 Quartz 应用在运行。当某一个Quartz 应用重启或者发生问题的时候, 其他的Quartz 应用会 借助 数据库这个桥梁探知到它不行了,从而接手把该进行的Job调度工作进行下去。以这种方式保证任务调度的高可用性,即在发生异常重启等情况下,调度信息依然连贯性地进行下去,就好像 Quartz 应用从来没有中断过似的。

SpringBoot结合Mybatis

自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多。其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Spring boot就有点力不从心了,所以把Mybatis整合进去,不得不说,现在的框架搭建真的是方便

 发表评论