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

创建POM文件

在这里有两种方式:

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

继承Spring Boot pom

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>myproject</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <parent>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-parent</artifactId>
  11. <version>2.0.0.BUILD-SNAPSHOT</version>
  12. </parent>
  13. <!-- Additional lines to be added here... -->
  14. <!-- (保用正式版的时候不需要下面的配置) -->
  15. <repositories>
  16. <repository>
  17. <id>spring-snapshots</id>
  18. <url>http://repo.spring.io/snapshot</url>
  19. <snapshots><enabled>true</enabled></snapshots>
  20. </repository>
  21. <repository>
  22. <id>spring-milestones</id>
  23. <url>http://repo.spring.io/milestone</url>
  24. </repository>
  25. </repositories>
  26. <pluginRepositories>
  27. <pluginRepository>
  28. <id>spring-snapshots</id>
  29. <url>http://repo.spring.io/snapshot</url>
  30. </pluginRepository>
  31. <pluginRepository>
  32. <id>spring-milestones</id>
  33. <url>http://repo.spring.io/milestone</url>
  34. </pluginRepository>
  35. </pluginRepositories>
  36. </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. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <!-- Import dependency management from Spring Boot -->
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-dependencies</artifactId>
  7. <version>2.0.0.BUILD-SNAPSHOT</version>
  8. <type>pom</type>
  9. <scope>import</scope>
  10. </dependency>
  11. </dependencies>
  12. </dependencyManagement>

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

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

添加依赖

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

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

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

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

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  1. mvn dependency:tree
  2. [INFO] life.qzz:springboot.demo1:jar:1.0-SNAPSHOT
  3. [INFO] - org.springframework.boot:spring-boot-starter-web:jar:2.0.0.BUILD-SNAPSHOT:compile
  4. [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.BUILD-SNAPSHOT:compile
  5. [INFO] | +- org.springframework.boot:spring-boot:jar:2.0.0.BUILD-SNAPSHOT:compile
  6. [INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.0.BUILD-SNAPSHOT:compile
  7. [INFO] | +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.0.BUILD-SNAPSHOT:compile
  8. [INFO] | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile
  9. [INFO] | | | +- ch.qos.logback:logback-core:jar:1.2.3:compile
  10. [INFO] | | | - org.slf4j:slf4j-api:jar:1.7.25:compile
  11. [INFO] | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.9.1:compile
  12. [INFO] | | | - org.apache.logging.log4j:log4j-api:jar:2.9.1:compile
  13. [INFO] | | +- org.slf4j:jul-to-slf4j:jar:1.7.25:compile
  14. [INFO] | | - org.slf4j:log4j-over-slf4j:jar:1.7.25:compile
  15. [INFO] | +- javax.annotation:javax.annotation-api:jar:1.3.1:compile
  16. [INFO] | +- org.springframework:spring-core:jar:5.0.2.BUILD-SNAPSHOT:compile
  17. 大专栏  Spring Boot 学习1-创建Spring Boot应用">[INFO] | | - org.springframework:spring-jcl:jar:5.0.2.BUILD-SNAPSHOT:compile
  18. [INFO] | - org.yaml:snakeyaml:jar:1.19:runtime
  19. [INFO] +- org.springframework.boot:spring-boot-starter-json:jar:2.0.0.BUILD-SNAPSHOT:compile
  20. [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.2:compile
  21. [INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
  22. [INFO] | | - com.fasterxml.jackson.core:jackson-core:jar:2.9.2:compile
  23. [INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.2:compile
  24. [INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.2:compile
  25. [INFO] | +- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.2:compile
  26. [INFO] | - com.fasterxml.jackson.module:jackson-module-kotlin:jar:2.9.2:compile
  27. [INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.0.BUILD-SNAPSHOT:compile
  28. [INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.23:compile
  29. [INFO] | | - org.apache.tomcat:tomcat-annotations-api:jar:8.5.23:compile
  30. [INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.23:compile
  31. [INFO] | - org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.23:compile
  32. [INFO] +- org.hibernate.validator:hibernate-validator:jar:6.0.4.Final:compile
  33. [INFO] | +- javax.validation:validation-api:jar:2.0.0.Final:compile
  34. [INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile
  35. [INFO] | - com.fasterxml:classmate:jar:1.3.4:compile
  36. [INFO] +- org.springframework:spring-web:jar:5.0.2.BUILD-SNAPSHOT:compile
  37. [INFO] | - org.springframework:spring-beans:jar:5.0.2.BUILD-SNAPSHOT:compile
  38. [INFO] - org.springframework:spring-webmvc:jar:5.0.2.BUILD-SNAPSHOT:compile
  39. [INFO] +- org.springframework:spring-aop:jar:5.0.2.BUILD-SNAPSHOT:compile
  40. [INFO] +- org.springframework:spring-context:jar:5.0.2.BUILD-SNAPSHOT:compile
  41. [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. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  1. import org.springframework.boot.*;
  2. import org.springframework.boot.autoconfigure.*;
  3. import org.springframework.stereotype.*;
  4. import org.springframework.web.bind.annotation.*;
  5. @RestController
  6. @EnableAutoConfiguration
  7. public class Example {
  8. @RequestMapping("/")
  9. String home() {
  10. return "Hello World!";
  11. }
  12. public static void main(String[] args) throws Exception {
  13. SpringApplication.run(Example.class, args);
  14. }
  15. }

这个类中指定了我们的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. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  1. <properties>
  2. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  3. <java.version>1.8</java.version>
  4. <maven.compiler.source>${java.version}</maven.compiler.source>
  5. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  6. <maven.compiler.target>${java.version}</maven.compiler.target>
  7. </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. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  1. mvn package
  2. ...
  3. [INFO]
  4. [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ springboot.demo2 ---
  5. [INFO] Building jar: /Volumes/DATA/code/springboot-demo/demo2/target/springboot.demo2-2.0.0.BUILD-SNAPSHOT.jar
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] BUILD SUCCESS

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

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

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

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

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

  1. 1
  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. 【iOS入门】UITableView加载图片

    学习带图片的列表 官方 LazyTableImages demo  http://download.csdn.net/detail/jlyidianyuan/5726749 分析源码是学习的好方法. ...

  2. visual studio2019下静态链接库的制作

    创建静态库项目 项目名称为20199324lib // pch.h #ifndef __PCH__ #define __PCH__ extern int add(int a, int b);//ext ...

  3. Papa开启“点播孙子”模式,新型老年人服务能在国内扎根吗?

    "互联网+"对多个行业的全面赋能和渗入,的确让我们的生活与工作处处充满了便利.很多"跑断腿"才能办的事,现在只要在PC.智能手机上滑动鼠标.点击屏幕就能轻松搞定 ...

  4. zabbix数据库占用磁盘空间较大的处理方法

    du -h /* |sort -nr  使用此命令一步步排查发现/var/lib/mysql/zabbix/这个目录占用磁盘空间较大 发现history_log.ibd这个文件最大,达到了38G,此文 ...

  5. Java复习(二)类与对象的基本概念

    2.1面向对象的程序设计方法概述 对象 程序中: 一切皆是对象 都具有标识,属性和行为 通过一个或多个变量来保存其状态 通过方法实现他的行为 类 将属性及行为相同或相似的对象归为一类 类可以看成是对象 ...

  6. PAT甲级——1006 Sign In and Sign Out

    PATA1006 Sign In and Sign Out At the beginning of every day, the first person who signs in the compu ...

  7. ubuntu .bashrc文件添加jdk后无法登录的解决方案

    1. 快捷键(ctl-alt-f2)进入虚拟终端 2. 执行export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/ ...

  8. pytorch源码解析-动态接口宏

    动态库接口定义: gcc: 定义在动态库的显示属性: 作用对象: 函数.变量.模板以及C++类 default: 表示在动态库内可见 hidden: 表示不可见 #define EXPORT __at ...

  9. LIS 问题

    #include<cstdio> #include<iostream> #include<algorithm> #include<queue> #inc ...

  10. python之接口开发

    一.接口开发的思路 1.启动一个服务: 2.接受客户端传过来的数据: 3.登录,注册,支付等功能 4.操作数据库,拿到数据: 5.返回数据: import flask server=flask.Fla ...