Spring Boot学习笔记(一)——项目构建-使用-部署

Spring Boot简介

很荣幸刚开始学习java框架就接触到了spring boot,并得到大神的指点,通过查阅资料以及教程学会在实际项目中去使用它,相对于其他框架只有一个字来形容 - “爽”。最近也看了一些资料及招聘信息,用发现弹簧启动的企业越来越多,毋庸置疑,这将会成为下一代的主流框架。春天启动可以说是用用SpringMVC的升级版,去掉了繁琐的配置,可以很容易上手,其最爽的就是他的自动化配置,用了之后再也不想回到以前了,谁用谁知道。网上有很多版本用法但好多都不是我想要的,因此博主再次将其总结记录下来,希望日后可以复习以及给需要的朋友一些帮助,再次声明博主也是学习者所以只能按自己的理解来写,若有不对之处请指教,日后有更深的理解会继续纠正,本篇先项目的构建-使用-部署从头到尾进行简单的讲解。

Spring  Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。


Spring boot的特点

1.创建独立的Spring应用程序
2.嵌入的Tomcat的,无需部署WAR文件
3.简化的Maven配置
4.自动配置Spring
5.提供生产就绪型功能,如指标,健康检查和外部配置
6.绝对没有代码生成和对XML没有要求配置


Spring boot的优点

spring boot可以支持你快速的开发出restful风格的微服务架构

自动化确实方便,做微服务再合适不过了,单一罐包部署和管理都非常方便。只要系统架构设计合理,大型项目也能用,加上nginx的的负载均衡,轻松实现横向扩展

spring boot要解决的问题,精简配置是一方面,另外一方面是如何方便的让春生态圈和其他工具链整合(比如Redis,电子邮件,elasticsearch)


项目构建
spring boot的构造方式有很多种,具体方法大家可以自行了解,这里以idea为例构建maven项目(eclipse的话推荐使用STS构造),构建过程这里省略直接下一步即可很简单,构建完成后的目录结构如图所示:

这里项目结构是我个人博客项目,对此我做简单介绍:
  • src / main / java:主程序入口BolgApplication,Spring引导内嵌Tomcat服务器,可以直接通过运行该类来启动应用。
  • 的src / main /资源:配置资源文件目录,由于我们是网络项目,因此这里存放一些静态资源文件,静态下存放图片,JS,CSS等,模板下存放JSP,HTML等模板视图文件等.application.yml是配置文件,为原本application.properties中,这里推荐使用YML格式,具体使用可以查阅了解,这里可以配置,访问端口,数据库连接信息等。
  • 的src /测试/:单元测试目录,通过Junit4实现项目的单元测试
POM依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • spring-boot-starter-web:全栈web开发模块,包含嵌入式Tomcat,Spring MVC。
  • spring-boot-starter-thymeleaf:thymeleaf视图模板模块,相当于JSP,很好的支持了前后端分离开发。
  • 弹簧引导启动测试:通用测试模块,包含了JUnit,Hamcrest,的Mockito。
实现RESTful API
在Spring Boot中创建一个restful API的实现代码同SpringMVC应用一样,只是不需要像Spring MVC那样做很多配置,这就是自动配置的爽快之处,下面我们在controller下新建一个HelloController类内容如下所示:
包com.xiaoma.controller;

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

/**
 * Created by mj on 2018/1/21.
 */
@RestController
public class HelloController {

    @RequestMapping("hello")
    public String sayHello(){
        return "Hello World";
    }
}
@RestController 可以使所有的方法返回都为数据,加这个注解可以不用在每个方法前加@ResponseBody注解
启动 BolgApplication类,该类的内容结构为
package com.xiaoma;

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

@SpringBootApplication
public class BlogApplication {

	public static void main(String[] args) {
		SpringApplication.run(BlogApplication.class, args);
	}
}
@SpringBootApplication 注解等于@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的合并,同时提供了Spring配置,自动化配置,自动扫描的功能,由此可看到Spring Boot的好处了吧,一切Spring配置一个注解就可搞定,内置Tomcat服务器直接启动main方法即可运行 Spring Boot程序。注意:该启动类必须放在所有包的最外层,不然无法扫描到项目的其他类。

打开浏览器访问: http://localhost:8080/hello 即可看到 Hello World 字样

Spring Boot使用thymeleaf模板
thymeleaf视图模板类似于jsp、velocity、freemarker等可以作为web页面的视图解析,Spring Boot对其有很好的支持,可以完全彻底的进行前后端分离开发,由于以.html后缀命名,同时也可以像打开html文件一样打开,这也是现在以及将来的主流开发模式。
  • 打开src/main/resources下的application.yml里面添加如下内容
#设置访问端口
server:
  port: 8080   
  context-path: /
spring:
  #设置运行环境
  profiles:
    active: dev
  #环境域名
#  domain: xiaomablog.com

  #视图模型
  thymeleaf:
    cache: false
    mode: LEGACYHTML5
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    content-type: text/html
    check-template-location: true
其中port 可以修改Tomcat访问端口号,active可以设置开发环境,实际项目中有开发、线上、测试三个环境,只需要添加 application-prod.yml、application-dev.yml、application-test.yml 配置文件即可,里面配置各环境的配置,然后在application.yml里修改active为prod、dev、test即可切换环境
  • src/main/resources下的templates下新建index.html文件,内容为:
<!DOCTYPE html>
<html lang="zh-CN">

<body>
<div>
	welcome to Spring Boot
</div>
</body>

</html>
  • 修改HelloController为:
package com.xiaoma.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Created by mj on 2018/1/21.
 */
@Controller
public class HelloController {

    @RequestMapping("hello")
    public String sayHello(){
        return "index";
    }
}
重新启动项目打开浏览器访问: http://localhost:8080/hello  即可看到如图所示:


Spring Boot自定义参数
除了在Spring Boot的配置文件中设置各模块的预定义配置参数外,也可以定义一些我们需要的自定义参数,比如我们在 application.yml里添加如下配置:
book:
  name: Spring
  author: Boot
然后修改 HelloController为:

@RestController
public class HelloController {

    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;


    @RequestMapping("hello")
    public String sayHello(){

        return name+author;
    }
}
@Value即可获取我们在配置文件中自定义的属性值赋予两个变量
重新启动项目打开浏览器访问: http://localhost:8080/hello 即可看到"SpringBoot"字样

当我们有很多配置属性时,我们会创建一个类,并将属性值赋给类的属性,比如创建一个Book类:
package com.xiaoma.entity.po;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * Created by mj on 2018/1/21.
 */
@Component
@ConfigurationProperties(prefix = "book")
public class Book {

    private String name;
    private String author;

 省略了getter setter....

}
@ConfigurationProperties注解可以获取 application.yml配置文件中以book为前缀的属性值

然后修改HelloController为:
package com.xiaoma.controller;

import com.xiaoma.entity.po.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by mj on 2018/1/21.
 */
@RestController
public class HelloController {

    @Autowired
    Book book;

    @RequestMapping("hello")
    public Book sayHello(){

        return book;
    }
}
重新启动项目打开浏览器访问: http://localhost:8080/hello  即可看到{"author":"Boot","name":"Spring"}数据

如果想引入自定义配置文件的内容可以在实体类上再加@Configuration 和@PropertySource(value = "classpath:test.properties)来指定那个配置文件

Spring Boot部署
当完成一个项目后我们需要将其发布到服务器上,由于Spring Boot内置Tomcat容器因此发布有两个方式,一种是使用内置Tomcat容器以jar包形式运行,另一种是和我们平常普通项目一样以war包形式运行,下面就其两种方式进行讲解
  • 以jar包方式部署Spring Boot项目
由于内置Tomcat容器所以此方法很简单,进入项目目录,使用 mvn clean package打包,完成后会在target目录下生成一个jar文件,然后执行 java -jar 加上jar包文件名即可完成部署,是不是很简单啊。
  • 以war包方式部署Spring Boot项目
修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
package com.xiaoma;

import com.xiaoma.configuration.log.GwsLogger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class BlogApplication extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(BlogApplication.class, args);
		System.out.println("========================================xiaomage blog server is started!");
		GwsLogger.info("xiaomage blog server is started!");
	}
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(this.getClass());
	}
}
修改pom文件中jar为war
<!--<packaging>jar</packaging>-->
<packaging>war</packaging>
修改pom文件中排除Tomcat插件
<dependency>  
	<groupId>org.springframework.boot</groupId>  
	<artifactId>spring-boot-starter-web</artifactId>  
	<!-- 如果在使用自带tomcat请注释下面,如果使用第三方tomcat不要注释下面 -->  
	<exclusions>    
		<exclusion>    
			<groupId>org.springframework.boot</groupId>    
			<artifactId>spring-boot-starter-tomcat</artifactId>    
		</exclusion>    
	 </exclusions>   
</dependency>
进入项目目录,使用mvn clean package打包,完成后会在目标下生成一个war文件,然后像普通项目一样扔到自己Tomcat的WebApp目录下即可。

至此有关Spring Boot的构建使用到部署已经完成了,怎么样是不是很简单,当然这只是简单的操作,不过很变不离其中,小小的应用已经包含了很多我们普通项目需要做的东西,希望志同道合的朋友一起学习一起研究,有不对的地方也希望多多指正,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值