springboot学习笔记:2.搭建你的第一个springboot应用
1.开发环境
(推荐):jdk1.8+Maven(3.2+)+Intellij IDEA+windows10;
说明:
jdk:springboot官方说的很明确,到目前版本的springboot(1.5.9),官方指定要求jdk1.8以上;
依赖包管理:可以通过拷贝jar文件的方式管理依赖,但官方也推荐使用Apache Maven 3.2或更高版本等构件工具;
开发工具:个人推荐使用IDEA,功能很强大,使用流畅度和方便性较好;
2.开始我们的第一个springboot项目
本节目标:构造第一个springboot入门web项目,通过三种方式运行启动;并通过浏览器得到服务器反馈结果;
步骤:
2.1.验证本机的jdk版本和mvn版本
确保在jdk1.8和maven3.2+;
2.2.创建项目(使用springboot官方推荐的创建方式——spring initializr):
进入https://start.spring.io/,选择要使用的springboot版本号,这里使用1.5.9,填写好项目组信息,在Search for dependencies中搜索web并选中;
选择生成项目后自动下载chapter01.zip;解压chapter01.zip后,使用IDEA打开chapter01项目文件夹;
此外,还可以在IDEA中File-new-Project,选择Spring Initializr,在IDEA中创建springboot项目;
(注意:此处如果你的项目报错,请确保该项目的maven配置正确;IDEA的话打开,正确指定好使用的maven是3.2以上版本即可:
)
项目正常打开后的目录结构如下:
Chapter01Application.java 内部包含main函数,是springboot项目的启动类;
Chapter01ApplicationTests.java 测试类
pom.xml 依赖管理文件
application.properties 配置文件,初次生成的时候是空的,以后可以在里面填写配置项;
有的同学到这里有些懵,以往java web项目不是有个WebRoot文件夹吗,这里我明明配置的就是web项目,为什么会是这么个目录结构呢?
这里其实就是springboot提倡的习惯,以后开发springboot,要习惯使用模板,摒弃jsp的前端方案(如果你执意要使用jsp的话也是可以的,我们后文会介绍);现在我们项目组开发,基本全是freemarker,而且基本上全部都是请求rest 接口,这样前后端完全分离;避免了在jsp中写java代码的陋习(记得以前做过一个H5支付页面,用jsp写的,后来项目升级,前端用vue.js,结果后台需要重新写n多接口);以后项目想更换前端方案也不会是坑;所以要接受并学习使用模板;要彻底执行前后端分离的思想;
以前使用jsp时,你会把jsp放在WEB-INF下面;以后使用模板,你需要把模板全放到例如resources-templates下面去;
sprinboot到底使用什么模板,因人而异;我个人喜欢freemarker;
以freemarker为例,模板.ftl文件会被放到resources.templates中,其他静态资源文件会被放到resources-static中,这块日后再婊;
2.3项目详解
2.3.1详解pom.xml
我们把目光先集中在maven的pom.xml中,看看官方生成的这个依赖结构:
<?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>com.zjt</groupId>
<artifactId>chapter01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>chapter01</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<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>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
是不是看上去很简单,其实里面大有玄机;
首先,注意打包文件格式是jar文件,这是因为,sprinboot使用mvn插件可以打包成可执行的内嵌web容器的jar,这对于发布微服务是很方便的;如果想打成war包和其他项目一起集成在tomcat中,也是可以的,这个日后再表;
构建项目:
方法1:父依赖(spring initializr默认构建方式):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
此处,我们发现springboot官方默认使用父依赖的方式来构件springboot项目。ctrl+左键点击跟踪spring-boot-starter-parent,会发现其实她继承了spring-boot-dependencies;包括日后我们常用的配置文件的过滤等
总结起来,可以说spring-boot-starter-parent,有如下特性:
默认编译级别为Java 1.8
源码编码为UTF-8
一个依赖管理节点,允许你省略普通依赖的 <version> 标签,继承自 spring-boot-dependencies POM。
合适的资源过滤
合适的插件配置(exec插件,surefire,Git commit ID,shade)
针对 application.properties 和 application.yml 的资源过滤
只要指定了父依赖的version,那么其相关的其他自动依赖均无需再指定版本号,springboot已经自动管理好了最佳的依赖配置,如图:
这也是springboot的方便之处;
除非你手动覆盖自己的项目中的属性,来达到修改某个依赖的版本号的目的;
方法2:使用import来引入spring-boot-dependencies
如果不想使用父依赖的方式,可以直接通过使用一个 scope=import 的依赖来构建:
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Starter POMS :
下面我们看一下pom.xml中的依赖模块,发现有一些很有特色的spring-boot-starter-*,官方学名叫starter poms;
springboot使用各种starter poms来实现组件的热插拔;每一个starter pom就是一个可以包含到应用中的一个方便的依赖关系描述符集合;可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。
例如,如果你想使用Spring和JPA进行数据库访问,只需要在你的项目中包含 spring-boot-starter-data-jpa 依赖,然后你就可以开始了。
下面的应用程序starters是Spring Boot在 org.springframework.boot 组下提供的,我们可以方便地查找你的项目需要的其他组件的starter,直接添加即可自动加载依赖:
Table 13.1. Spring Boot application starters
Name | Description | Pom |
---|---|---|
|
Core starter, including auto-configuration support, logging and YAML 核心Spring Boot starter,包括自动配置支持,日志和YAML |
|
|
Starter for JMS messaging using Apache ActiveMQ |
|
|
Starter for using Spring AMQP and Rabbit MQ 对"高级消息队列协议"的支持,通过 spring-rabbit 实现 |
|
|
Starter for aspect-oriented programming with Spring AOP and AspectJ 对面向切面编程的支持,包括 spring-aop 和AspectJ |
|
|
Starter for JMS messaging using Apache Artemis |
|
|
Starter for using Spring Batch 对Spring Batch的支持,包括HSQLDB数据库 |
|
|
Starter for using Spring Framework’s caching support |
|
|
Starter for using Spring Cloud Connectors which simplifies connecting to services in cloud platforms like Cloud Foundry and Heroku 对Spring Cloud Connectors的支持,简化在云平台下(例如,Cloud Foundry 和Heroku)服务的连接 |
|
|
Starter for using Cassandra distributed database and Spring Data Cassandra |
|
|
Starter for using Cassandra distributed database and Spring Data Cassandra Reactive |
|
|
Starter for using Couchbase document-oriented database and Spring Data Couchbase |
|
|
Starter for using Couchbase document-oriented database and Spring Data Couchbase Reactive |
|
|
Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch 对Elasticsearch搜索和分析引擎的支持,包括 spring-data-elasticsearch |
|
|
Starter for using Spring Data JPA with Hibernate 对"Java持久化API"的支持,包括 spring-data-jpa , spring-orm 和Hibernate |
|
|
Starter for using Spring Data LDAP |
|
|
Starter for using MongoDB document-oriented database and Spring Data MongoDB 对MongoDB NOSQL数据库的支持,包括 spring-data-mongodb |
|
|
Starter for using MongoDB document-oriented database and Spring Data MongoDB Reactive |
|
|
Starter for using Neo4j graph database and Spring Data Neo4j |
|
|
Starter for using Redis key-value data store with Spring Data Redis and the Lettuce client |
|
|
Starter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client |
|
|
Starter for exposing Spring Data repositories over REST using Spring Data REST 对通过REST暴露Spring Data仓库的支持,通过 spring-data-rest-webmvc 实现 |
|
|
Starter for using the Apache Solr search platform with Spring Data Solr 对Apache Solr搜索平台的支持,包括 spring-data-solr |
|
|
Starter for building MVC web applications using FreeMarker views 对FreeMarker模板引擎的支持 |
|
|
Starter for building MVC web applications using Groovy Templates views 对Groovy模板引擎的支持 |
|
|
Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS 对基于HATEOAS的RESTful服务的支持,通过 spring-hateoas 实现 |
|
|
Starter for using Spring Integration 对普通 spring-integration 模块的支持 |
|
|
Starter for using JDBC with the Tomcat JDBC connection pool 对JDBC数据库的支持 |
|
|
Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to 对Jersey RESTful Web服务框架的支持 |
|
|
Starter for using jOOQ to access SQL databases. An alternative to |
|
|
Starter for reading and writing json |
|
|
Starter for JTA transactions using Atomikos 对JTA分布式事务的支持,通过Atomikos实现 |
|
|
Starter for JTA transactions using Bitronix 对JTA分布式事务的支持,通过Bitronix实现 |
|
|
Spring Boot Narayana JTA Starter |
|
|
Starter for using Java Mail and Spring Framework’s email sending support 对 javax.mail 的支持 |
|
|
Starter for building web applications using Mustache views 对Mustache模板引擎的支持 |
|
|
Spring Boot Quartz Starter |
|
|
Starter for using Spring Security 对 spring-security 的支持 |
|
|
Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito |
|
|
Starter for building MVC web applications using Thymeleaf views 对Thymeleaf模板引擎的支持,包括和Spring的集成 |
|
|
Starter for using Java Bean Validation with Hibernate Validator |
|
|
Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container 对全栈web开发的支持,包括Tomcat和 spring-webmvc |
|
|
Starter for using Spring Web Services |
|
|
Starter for building WebFlux applications using Spring Framework’s Reactive Web support |
|
|
Starter for building WebSocket applications using Spring Framework’s WebSocket support 对WebSocket开发的支持 |
除了应用程序的starters,下面的starters可以用于添加生产准备的特性:
Table 13.2. Spring Boot production starters
Name | Description | Pom |
---|---|---|
|
Starter for using Spring Boot’s Actuator which provides production ready features to help you monitor and manage your application 添加生产准备特性,比如指标和监控 |
最后,Spring Boot包含一些可用于排除或交换具体技术方面的starters。
Table 13.3. Spring Boot technical starters
Name | Description | Pom |
---|---|---|
|
Starter for using Jetty as the embedded servlet container. An alternative to 导入Jetty HTTP引擎(作为Tomcat的替代) |
|
|
Starter for using Log4j2 for logging. An alternative to 对Log4J日志系统的支持 |
|
|
Starter for logging using Logback. Default logging starter 导入Spring Boot的默认日志系统(Logback) |
|
|
Starter for using Reactor Netty as the embedded reactive HTTP server. |
|
|
Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by 导入Spring Boot的默认HTTP引擎(Tomcat) |
|
|
Starter for using Undertow as the embedded servlet container. An alternative to 导入Undertow HTTP引擎(作为Tomcat的替代) |
使用maven插件用来打包springboot项目:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.3.2代码详解:
项目启动类(Chapter01Application.java):
package com.zjt.chapter01; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class Chapter01Application { public static void main(String[] args) {
SpringApplication.run(Chapter01Application.class, args);
}
}
上述Chapter01Application.java为springboot的main启动类;
这里我们开始学习到了springboot启动类中的最重要的一个注解:@SpringBootApplication
注意:
1.项目启动类,根据官方建议,一定要位于非 default package下;也就是说这个启动类一定要含有package的声明;建议使用反转域名;如com.zjt.learn;
2.官方建议,main应用类要放在其他类上面的根包(root package)中;
3.@SpringBootApplication该注解在基于上述1和2两点下,才可以使用(习惯优于配置);
由于该注解相当于:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
_______________华丽的小分割__________________
@SpringBootConfiguration:说明当前类是一个配置类,就像xml配置文件,而现在是用java配置文件,效果是一样的,它会被@ComponentScan扫描到。
@EnableAutoConfiguration(开启自动配置,springboot的灵魂所在)注解通常都放到main所在类的上面,当main所在类位于root package的时候,这样@EnableAutoConfiguration可以从逐层的往下搜索各个加注解的类,例如,你正在编写一个JPA程序(如果你的pom里进行了配置的话),spring会自动去搜索加了@Entity注解的类,并进行调用;
@ComponentScan:用注解配置实现自动扫描,默认会扫描当前包和所有子包,和xml配置自动扫描效果一样;
___________________________________________
所以我们的springboot很贴心的为我们准备了Springboot 提供了统一的注解@SpringBootApplication来替代以上三个注解,简化程序的配置;
2.3.3.最后我们自己添加controller包,添加一个TestController.java,接受rest请求:
package com.zjt.chapter01.controller; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class TestController { @RequestMapping("/hello")
public String Hello(){
return "hello world";
}
}
2.4.启动项目
2.4.1使用main启动类启动:
看到这样就证明已经顺利启动了;
2.4.2使用mvn spring-boot:run”在命令行启动;
2.4.3使用mvn package打成可执行jar;使用java -jar启动;
mvn clean ;mvn build; mvn package;
打包后,命令行启动:
OK,今天的入门我们就一起做到这里;后续会同大家共同探讨很多springboot的实用教程和案例;文章中有什么问题或者想法欢迎老铁们吐槽和我沟通;我会及时纠正错误,改进教程的品质;
做程序需要静心,扎扎实实做技术;不忘初心,脚踏实地,就酱。
springboot学习笔记:2.搭建你的第一个springboot应用的更多相关文章
- SpringBoot系列二:搭建自己的第一个SpringBoot程序
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 一.根据官网手工搭建(http://projects.spring.io/spring-boot/#quick-start) 1 ...
- SpringBoot学习笔记(14):使用SpringBootAdmin管理监控你的应用
SpringBoot学习笔记(14):使用SpringBootAdmin管理监控你的应用 Spring Boot Admin是一个管理和监控Spring Boot应用程序的应用程序.本文参考文档: 官 ...
- SpringBoot学习笔记
SpringBoot个人感觉比SpringMVC还要好用的一个框架,很多注解配置可以非常灵活的在代码中运用起来: springBoot学习笔记: .一.aop: 新建一个类HttpAspect,类上添 ...
- Springboot学习笔记(六)-配置化注入
前言 前面写过一个Springboot学习笔记(一)-线程池的简化及使用,发现有个缺陷,打个比方,我这个线程池写在一个公用服务中,各项参数都定死了,现在有两个服务要调用它,一个服务的线程数通常很多,而 ...
- Hadoop学习笔记(10) ——搭建源码学习环境
Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...
- Hadoop学习笔记(4) ——搭建开发环境及编写Hello World
Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...
- SpringBoot学习笔记(3):静态资源处理
SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...
- SpringBoot学习笔记(2):引入Spring Security
SpringBoot学习笔记(2):用Spring Security来保护你的应用 快速开始 本指南将引导您完成使用受Spring Security保护的资源创建简单Web应用程序的过程. 参考资料: ...
- SpringBoot学习笔记(7):Druid使用心得
SpringBoot学习笔记(7):Druid使用心得 快速开始 添加依赖 <dependency> <groupId>com.alibaba</groupId> ...
随机推荐
- bootstrap 基础表单
表单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文本域和按钮等.其中每个控件所起的作用都各不相同,而且不同的浏览器对表单控件渲染的风格都各有不同. ☑ LESS版本:对应源文 ...
- java this的用法以及原理
/** * this存在方法中,在方法中被调用. * 且是非static方法中被调用.(this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,随着类产生而装载,因此方法内不能引用 this ...
- Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门
1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...
- 阿里云ECSLinux系统下挂载磁盘
最近公司服务器老是提示磁盘空间不足,原因是以前的业务负责人开了Tomcat的debug日志并且没有做日志轮询,所以日志量非常大.当我做了日志切割轮询后发现磁盘还是太小才40G,按理外网服务器怎么可能这 ...
- 一维跳棋(BFS)
一维跳棋是一种在1×(2N+1) 的棋盘上玩的游戏.一共有N个棋子,其中N 个是黑的,N 个是白的.游戏开始前,N 个白棋子被放在一头,N 个黑棋子被放在另一头,中间的格子空着. 在这个游戏里有两种移 ...
- linux配置词典goldendict
在mint 18下使用通过, ubuntu 类似. 方法: 通过软件中心安装goldendict,或者 sudo apt install goldendict 通过网页抓取程序, 见附录 下载朗道词典 ...
- 吴裕雄--天生自然ShellX学习笔记:Shell 流程控制
和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { search(q); ...
- centos 部署WGCLOUD
服务端: 一.安装jdk 1.查看安装配置 jdk: 命令:java -version 2.查看系统是否自带 jdk rpm -qa |grep java rpm -qa |grep jdk rp ...
- 2×c列联表|多组比例简式|卡方检验|χ2检验与连续型资料假设检验
第四章 χ2检验 χ2检验与连续型资料假设检验的区别? 卡方检验的假设检验是什么? 理论值等于实际值 何条件下卡方检验的需要矫正?如何矫正? 卡方检验的自由度如何计算? Df=k-1而不是n-1 卡方 ...
- polyA|ribo-minus|differentiated cell|Genetic heterogeneity
转录组 测量单cell,可以认为是一种细胞.细胞株也认为来自同一个细胞. 使用两种方法,找mRNA(polyA)及rmRNA(ribo-minus),然后取交集. 转录组受实验影响,比如小片段没得到. ...