如果使用Maven, 确保先安装好Maven再继续。

创建POM文件

在这里有两种方式:

  1. 继承Spring Boot parent的pom。
  2. 不继承。

继承Spring Boot pom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?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.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
</parent>
<!-- Additional lines to be added here... -->
<!-- (保用正式版的时候不需要下面的配置) -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>

此种方式会约定Spring Boot 依赖的版本,它最终继承自spring-boot-dependencies模块,此模块规定了各种依赖的版本号,我们只需要引入groupId 和artifactId就可以了。而且还引入了一些maven的插件,可以让我们用maven的方式mvn spring-boot:run来启动我们的应用。当然如果你用了强大的IDEA,直接可以像普通的应用程序一样启动。

不继承Spring Boot parent

因为实际开发过程中我们可能会有自己的parent,要开发的功能只是项目中一个模块,这时候就没法使用spring boot parent。这时只需要将spring boot dependencies引入到我们的项目中来就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
<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>

然后我们还是可以在我们的项目中声明groupdId和artifactId来引入依赖。如果需要使用spring boot 的maven插件来启动,则需要手动引入.

1
2
3
4
5
6
7
<plugins>
<plugin>
<!--使用boot的maven插件来方便运行boot应用-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>

添加依赖

上面也提到了,如果你继承了spring boot parent,或者引入了spring boot dependencies模块,那么spring boot 就帮你管理了常用的依赖,你可以在引入的时候省略掉版本号。使用这种方式的好处是,spring boot已经帮你考虑了兼容性的问题。

另外,spring boot 引入了starter的概念。其实就是帮你将相关的依赖整理在一起,你只需要依赖这个starter就可以引入所需要的所有依赖。另外就是starter会帮你做一些自动配置,这个后面会讲到。例如我们要开发web项目,只需要引入spring-boot-starter-web依赖就可以了。

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号已经省略-->
</dependency>
</dependencies>

我们可以看一下引入了哪些依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
mvn dependency:tree
[INFO] life.qzz:springboot.demo1:jar:1.0-SNAPSHOT
[INFO] - org.springframework.boot:spring-boot-starter-web:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] | | | +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] | | | - org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.9.1:compile
[INFO] | | | - org.apache.logging.log4j:log4j-api:jar:2.9.1:compile
[INFO] | | +- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
[INFO] | | - org.slf4j:log4j-over-slf4j:jar:1.7.25:compile
[INFO] | +- javax.annotation:javax.annotation-api:jar:1.3.1:compile
[INFO] | +- org.springframework:spring-core:jar:5.0.2.BUILD-SNAPSHOT:compile
大专栏  Spring Boot 学习1-创建Spring Boot应用">[INFO] | | - org.springframework:spring-jcl:jar:5.0.2.BUILD-SNAPSHOT:compile
[INFO] | - org.yaml:snakeyaml:jar:1.19:runtime
[INFO] +- org.springframework.boot:spring-boot-starter-json:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.2:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[INFO] | | - com.fasterxml.jackson.core:jackson-core:jar:2.9.2:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.2:compile
[INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.2:compile
[INFO] | +- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.2:compile
[INFO] | - com.fasterxml.jackson.module:jackson-module-kotlin:jar:2.9.2:compile
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.0.BUILD-SNAPSHOT:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.23:compile
[INFO] | | - org.apache.tomcat:tomcat-annotations-api:jar:8.5.23:compile
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.23:compile
[INFO] | - org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.23:compile
[INFO] +- org.hibernate.validator:hibernate-validator:jar:6.0.4.Final:compile
[INFO] | +- javax.validation:validation-api:jar:2.0.0.Final:compile
[INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile
[INFO] | - com.fasterxml:classmate:jar:1.3.4:compile
[INFO] +- org.springframework:spring-web:jar:5.0.2.BUILD-SNAPSHOT:compile
[INFO] | - org.springframework:spring-beans:jar:5.0.2.BUILD-SNAPSHOT:compile
[INFO] - org.springframework:spring-webmvc:jar:5.0.2.BUILD-SNAPSHOT:compile
[INFO] +- org.springframework:spring-aop:jar:5.0.2.BUILD-SNAPSHOT:compile
[INFO] +- org.springframework:spring-context:jar:5.0.2.BUILD-SNAPSHOT:compile
[INFO] - org.springframework:spring-expression:jar:5.0.2.BUILD-SNAPSHOT:compile

主要是spring web, tomcat等web相关的jar。可以看出来这种方式会相比我们之前的开发方式方便快捷许多。spring boot 提供了一系列的starter,当然如果这些还不能满足你的话,完全可以开发自己的starter,只需要遵循spring boot提供的命名规范就可以了。后面会讲到如何开发starter。

编写代码

在src/main/java目录中新建一个简单的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}

这个类中指定了我们的spring boot 的入口main函数,这个类就是下步中的main-class。
类上有@EnableAutoConfiguration注解,这个注解会告诉Spring Boot 自动该应用,具体做了哪些配置,以后再说。比如说我们添加了web的starter,那么Spring Boot 会认为我们在开发一个web应用,那么会创建一个web applicationContext。自动配置和starter没有完全的绑定有关系,如果把相关的依赖都单独加进来,而不使用starter, Spring Boot 也会尽量做好自动配置工作。另外两个注解@RestController和@RequestMapping("/")是Spring MVC的。

main方法里面调用SpringApplication.run()方法,将我们的主配置类传递给SpringApplication,还可以通过args参数将控制台参数传递进去。

运行我们的程序

Spring Boot 要求编绎环境为1.8以上,可以在maven pom中设置。

1
2
3
4
5
6
7
<properties>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
  1. 使用maven 插件来运行mvn spring-boot:run。
  2. 在IDEA中如果不能自动创建spring boot运行配置,可以手动创建。如图所示

添加的时候选择spring boot, 主要是指定main class和module路径 。可以将应用添加到spring boot run dashboard中,方便我们管理 spring boot应用。dashboard 如图所示

打包程序

可以将spring boot 应用打包为一个独立的jar,然后上传到服务器中运行。

1
2
3
4
5
6
7
8
mvn package
...
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ springboot.demo2 ---
[INFO] Building jar: /Volumes/DATA/code/springboot-demo/demo2/target/springboot.demo2-2.0.0.BUILD-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

如果没有继承spring boot parent,那么需要自己配置一下spring boot maven 插件,不然无法打包成spring boot jar。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>

如果继承了spring boot parent,只需要引入spring boot maven plugin即可,不需要做如上配置。

1
2
3
4
5
6
7
8
9
10
11
12
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
...
</plugins>
...
</build>

运行的时候执行命令即可。

1
java -jar target/springboot.demo2-2.0.0.BUILD-SNAPSHOT.jar

Spring Boot 学习1-创建Spring Boot应用的更多相关文章

  1. Spring入门案例 idea创建Spring项目

    spring入门案例 idea创建spring项目 Spring介绍 Spring概述 Spring是一个开源框架,Spring是2003年兴起的轻量级java开发框架,由Rod Johnson 在其 ...

  2. [转]通过Spring Boot三分钟创建Spring Web项目

    来源:https://www.tianmaying.com/tutorial/project-based-on-spring-boot Spring Boot简介 接下来我们所有的Spring代码实例 ...

  3. 用spring tool suite插件创建spring boot项目时报An internal error occurred during: "Building UI model". com/google/common/

    本文为博主原创,未经允许不得转载 在用spring tool suite创建spring boot项目时,报一下异常: 查阅很多资料之后发现是因为装的spring tool suite的版本与ecli ...

  4. 【Spring Boot学习之三】Spring Boot整合数据源

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot整合Spring JDBC 1.pom.xml <project xmlns=&quo ...

  5. spring boot 之 如何创建spring boot项目

    创建spring boot的方式有非常多,今天我们使用maven来进行创建spring boot项目,因为maven使用的非常广泛,也很好用,很多IDE也都支持maven. 1 创建maven项目 1 ...

  6. 【Spring Boot学习之六】Spring Boot整合定时任务&异步调用

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2一.定时任务1.启动类添加注解@EnableScheduling 用于开启定时任务 package com.wjy; i ...

  7. 【Spring Boot学习之四】Spring Boot事务管理

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.springboot整合事务事务分类:编程事务.声明事务(XML.注解),推荐使用注解方式,springboot默 ...

  8. 【Spring Boot学习之一】Spring Boot简介

    环境 Java1.8 Spring Boot 1.3.2 一.Spring Boot特点1.使用java运行项目,内置tomcat,无需外部容器:2.减少XML配置,使用properties文件和注解 ...

  9. spring揭密学习笔记(1) --spring的由来

    1.spring起源于在EJB暴露出各种严重问题的情况应运而生. Spring是于2003年兴起的一个轻量级的Java开发框架, Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解 ...

随机推荐

  1. 巧用函数,使Sql中in的用法更多变

    在Sql中我们经常会用到in 普遍的写法为 where xx in ('1','2','3') 通过函数写法为: IF EXISTS ( SELECT * FROM sys.objects WHERE ...

  2. Invalid package name:a digit canno be the first character in a package segme

    发现网上没有关于这个的解决方法 其实这个原因是因为下图红框里的是数字 把默认的这个直接删掉,用英语随便输入一个即可

  3. 从list中取N个随机生成一个集合

    在工作中发现有很多有序算法,较少见到一些可用的无序随机算法.无序随机算法的目的是让客户感觉每次都不一样,因为一直看一样的会审美疲劳哈. 在jdk自带一种CollectionUtils.shuffle& ...

  4. Codeforces Round #524 (Div. 2)C 二维坐标系求俩矩形面积交

    题:https://codeforces.com/contest/1080/problem/C 题意:给n*m的二维坐标系,每个位置(xi,yi)都表示一个方格,(1,1)的位置是白色,整个坐标系黑白 ...

  5. 文件操作符|-e|-M|-s|-A|_|-r -w $filename|stat|localtime|&|>>|<<

    TTY:终端是一种字符型设备,它有多种类型,通常使用tty 来简称各种类型的终端设备 #!/usr/bin/perl use strict; use warnings; print "exi ...

  6. windows远程无法粘贴复制

    解决办法: 1.  打开电脑的任务管理器,找到 rdpclip.exe 进程,如果能找到进程,就右键结束进程,如果没有,那就正好,不用结束了,说明没启动,正常来说,都会存在的,但是在我的win10就开 ...

  7. vs strcore.cpp(156) 内存泄漏

    在一个静态函数的线程回调中,一个cstring的对象没释放. 遇到这种问题: 1.查看所有的指针对象,有没有合适的回收 2.查看代码的malloc,看看有没有free 3.一点一点注释代码,定位位置

  8. 深度优先搜索(DFS)和广度优先搜索(BFS)求解迷宫问题

    用下面这个简单的迷宫图作为例子: OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOXXOOOX XOOOOXOO XXXXXXXO O为通路,X为障碍物. ...

  9. SAP PM:通过接口获取设备资产基本信息

    在SAP工厂维护模块中,给设备贴二维码标签是现在越来越流行的做法.因此通过扫描二维码获取设备资产信息是个非常基本的需求. 以下实例简单实现了,给SAP RFC传入设备编码获取设备资产基本信息的需求. ...

  10. 03-Java的基础语法

    一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的 ...