2019独角兽企业重金招聘Python工程师标准>>> hot3.png

(一) 第一个SpringBoot程序

工作了挺久的,已学到的技术也没有系统性的整理一下,刚好最近在使用SpringBoot搭建新的框架,查过很多资料,现在就将SpringBoot的学习过程整理一下。

在此之前先说一下SpringBoot是什么:

Spring家族已经发展了很多年,我们在开发web应用程序的时候,绝大多数都是使用Spring,在使用Spring的时候,流程一般都是这样子的:先引入各种jar包,再写各种配置文件,再运行应用程序,程序运行正常,说明配置没问题,然后可以进行开发了。但是大多数情况下都是这样子的:启动应用报各种各样的错误,接着查资料,调整,运行,报错,查资料,调整,运行。。。。当搭好环境(这个环境仅仅是初始化环境)之后,才可以进行真正的业务开发任务。麻烦吗?麻烦。。。所以SpringBoot应声而出。

SpringBoot的一项重要任务就是让Spring的各种繁琐配置不再成为你编程路上的障碍。它包含了很多传统Spring不存在的新特性:

 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,
无需传统项目构建。
 Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。

以上摘自《Spring实战》第四版。

尽管有4点新特性,但是我们只要特别关注前两条就可以了,其他的有兴趣可以自行学习。先说说自动配置,什么是自动配置?我们在开发web应用的时候,总是要告诉Spring这是个web应用,我还需要SpringMVC/Struts框架,我还需要Mybatis/Hibernate,我要自己写一个Dao,Dao里边还有JdbcTemplate,要配置DataSource等等等等....那么,对这一系列的框架整合或者配置,我们不需要做任何配置,直接告诉SpringBoot我们需要什么样的组件,SpringBoot会自动为我们配置好。

另外一个就是起步依赖,起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。(摘自《Spring实战》第四版),在我理解而来,所谓起步依赖就是指某个功能所有的依赖都只需要SpringBoot的一个包就可以实现了,比如说我们需要用SpringMVC,那么在依赖中就要添加众多依赖包来满足框架的使用,包括版本号也需要一一验证,而SpringBoot完全不需要考虑这些,只需要引用org.springframework.boot:spring-boot-starter-web这一个jar包就可以了。

最后,Spring Boot还有一个特点,Spring Boot可以把Web应用程序变为可自执行的JAR文件,不用部署到传统Java应用服务器里就能在命令行里运行。这是因为Spring Boot在应用程序里嵌入了一个Servlet容器(Tomcat、Jetty或Undertow),这个内嵌的Servlet容器就提供了这样的功能。

以上描述只是我个人的理解,如有误差,欢迎提出更正。

下面我们就正式进入SpringBoot的世界吧!

一、环境

我是使用IDEA进行开发的,JDK版本是1.8,Maven版本是3.5.0,本地装MySQL。

二、创建第一个SpringBoot应用程序

创建SpringBoot应用有很多种方式,我们用最简单的一种,即使用IDEA自带的创建方式:

点击File->New->Project,选择Spring Initializr,然后next,编辑工程名等等信息(我的是com.shaoyu.first),next,选择需要的功能组件(也可以不选择),next,finish。

第一次创建的时候建议指定一些需要的组件:Web,Thymeleaf,JPA,MySQL。

创建完毕后,大概长这个样子:

2ba2d78b4ef5df6816856c6adaebf1252b0.jpg

我们来看看pom文件:

<?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.shaoyu</groupId><artifactId>first</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>first</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.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-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></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>

解释一下其中的5个依赖:

1.<artifactId>spring-boot-starter-data-jpa</artifactId>:创建应用时选择的JPA起步依赖;

2.<artifactId>spring-boot-starter-thymeleaf</artifactId>:创建应用时选择的视图模板Thymeleaf起步依赖;

3.<artifactId>spring-boot-starter-web</artifactId>:创建应用时,选择的Web起步依赖;

4.<artifactId>mysql-connector-java</artifactId>:创建应用时选择的mysql驱动包依赖;

5.<artifactId>spring-boot-starter-test</artifactId>:SpringBoot测试包起步依赖。

我们之前有用到MySql驱动包,需要对MySql数据源进行配置:

打开resources下的application.properties输入以下内容进行配置:

#JDBC驱动程序的完全限定名称。默认情况下,根据URL自动检测。
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库的JDBC url。
spring.datasource.url =jdbc:mysql://127.0.0.1:3306/fristDB
# 登录数据库的用户名。
spring.datasource.username=shaoyu
# 登录数据库的密码。
spring.datasource.password=shaoyu
# 连接数据库校验SQL
spring.datasource.validation-query=select 1

再给应用设置一个首页:在templates下新建一个index.html

内容简单点: <p>Hello World</p>

到这里为止,一个应用算是创建完毕了,我们启动一下FristApplication的main方法:

.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.0.3.RELEASE)2018-07-09 15:26:24.326  INFO 9588 --- [           main] com.shaoyu.first.FirstApplication        : Starting FirstApplication on YHDZJ-NB0000311 with PID 9588 (D:\search\Idea\project\first\target\classes started by shaoyu1 in D:\search\Idea\project\first)
2018-07-09 15:26:24.329  INFO 9588 --- [           main] com.shaoyu.first.FirstApplication        : No active profile set, falling back to default profiles: default
2018-07-09 15:26:24.381  INFO 9588 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@2ddc8ecb: startup date [Mon Jul 09 15:26:24 CST 2018]; root of context hierarchy
2018-07-09 15:26:25.439  INFO 9588 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$9239a53b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-07-09 15:26:25.755  INFO 9588 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2018-07-09 15:26:25.782  INFO 9588 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-07-09 15:26:25.782  INFO 9588 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.31
2018-07-09 15:26:25.805  INFO 9588 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_144\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Windows Resource Kits\Tools\;C:\Program Files\Java\jdk1.8.0_144/bin;D:\app\shaoyu1\product\11.2.0\dbhome_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;d:\Program Files\TortoiseSVN\bin;D:\Program Files (x86)\IDM Computer Solutions\UltraEdit;D:\Program Files\apache-maven-3.5.0/bin;D:\Program Files\Git\cmd;D:\Program Files\TortoiseGit\bin;C:\Program Files\Windows Resource Kits\Tools\;D:\Program Files\spring-2.0.3.RELEASE\bin;C:\Users\shaoyu1\AppData\Local\Programs\Fiddler;.]
2018-07-09 15:26:26.352  INFO 9588 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-07-09 15:26:26.353  INFO 9588 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1976 ms
2018-07-09 15:26:26.455  INFO 9588 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-07-09 15:26:26.459  INFO 9588 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-07-09 15:26:26.459  INFO 9588 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-07-09 15:26:26.459  INFO 9588 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-07-09 15:26:26.459  INFO 9588 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-07-09 15:26:26.608  INFO 9588 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-07-09 15:26:27.094  INFO 9588 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2018-07-09 15:26:27.145  INFO 9588 --- [           main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2018-07-09 15:26:27.165  INFO 9588 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default...]
2018-07-09 15:26:27.259  INFO 9588 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.2.17.Final}
2018-07-09 15:26:27.261  INFO 9588 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2018-07-09 15:26:27.454  INFO 9588 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2018-07-09 15:26:27.570  INFO 9588 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2018-07-09 15:26:27.777  INFO 9588 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-07-09 15:26:27.855  INFO 9588 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-09 15:26:28.084  INFO 9588 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@2ddc8ecb: startup date [Mon Jul 09 15:26:24 CST 2018]; root of context hierarchy
2018-07-09 15:26:28.123  WARN 9588 --- [           main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2018-07-09 15:26:28.211  INFO 9588 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-07-09 15:26:28.213  INFO 9588 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-07-09 15:26:28.265  INFO 9588 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-09 15:26:28.266  INFO 9588 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-07-09 15:26:28.352  WARN 9588 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2018-07-09 15:26:28.686  INFO 9588 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-07-09 15:26:28.687  INFO 9588 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name 'dataSource' has been autodetected for JMX exposure
2018-07-09 15:26:28.693  INFO 9588 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Located MBean 'dataSource': registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]
2018-07-09 15:26:28.735  INFO 9588 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-07-09 15:26:28.740  INFO 9588 --- [           main] com.shaoyu.first.FirstApplication        : Started FirstApplication in 4.765 seconds (JVM running for 7.858)

可以看到,应用正确启动了,日志中可以看到端口号是8080,打开浏览器:http://localhost:8080,页面显示了Hello World 。

前面我们有提到SpringBoot可以把Web应用程序变为可自执行的JAR文件,我们来试试:

先关掉应用,然后在IDEA下面有一个Terminal终端窗口:

1ae4e53e260a4ebdebebbc71d7bab8cce9d.jpg

打开它,输入命令进行打包:mvn package -Dmaven.test.skip=true

几秒钟后,会在target目录下生成一个jar包:

d208c45607a4b5ad5c5c9a0a479ace56142.jpg

回到终端,输入命令:

cd target

java -jar first-0.0.1-SNAPSHOT.jar

然后应用也成功启动了,在浏览器中验证一下,也显示了Hello World,成功!

没有找到终端窗口的小伙伴可以在cmd中使用这些命令,前提是已经配置好了jdk环境变量和maven环境变量。

至此,第一个SpringBoot应用程序就已经完成了。简单吗?很简单,在这之后我们就可以根据自己的需要进行代码的编写,而不需要进行任何其他配置了。

当然,这个应用中使用的是单模块工程,而在工作中,我们很多应用都是使用多模块应用系统,后续我将继续整理SpringBoot的学习,其中就包括了多模块应用。

转载于:https://my.oschina.net/siwcky90/blog/1842849

SpringBoot学习(一)相关推荐

  1. springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题

    springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...

  2. SpringBoot学习笔记(3):静态资源处理

    SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...

  3. 目录:SpringBoot学习目录

    SpringBoot配套源码地址:gitee.com/hengboy/spr- SpringCloud配套源码地址:gitee.com/hengboy/spr- SpringBoot相关系列文章请访问 ...

  4. springboot学习笔记(五)

    一丶注值方式 1.在application.properties文件中注值 首先我们将application.yml中的学生名字和年龄给注释掉,来验证在applic.properties的注值方式. ...

  5. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  6. SpringBoot学习笔记(16):单元测试

    SpringBoot学习笔记(16):单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小 ...

  7. SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理

    在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...

  8. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  9. SpringBoot学习笔记(8):事物处理

    SpringBoot学习笔记(8):事物处理 快速入门 在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚.大量的t ...

  10. SpringBoot 学习二:操作数据库

    2019独角兽企业重金招聘Python工程师标准>>> 本文将从以下几个方面介绍: 前言 配置数据源 SpringBoot 整合 Mybatis SpringBoot 整合 Jdbc ...

最新文章

  1. 超参数调优河伯、组合优化器CompBO,华为诺亚开源贝叶斯优化库
  2. 吐槽一下微信公众号的赞赏号
  3. 判断图片下载是否成功 file_exists和filesize 图像0KB问题
  4. 基于heartbeat v1+ldirectord实现LVS的高可用
  5. linux 中 set,env,export,declare显示shell变量的区别
  6. sigmoid函数解决溢出_梯度消失和梯度爆炸及解决方法
  7. python参数_python 参数
  8. [C++11]initializer_lisr模板类的使用
  9. 2017.4.17------软件测试的艺术+整理以前的摘记
  10. 【BO】WEBI文件打开时提示Illegal access错误
  11. Excel进行粗糙的快速更换图片背景颜色
  12. 反序列化时出现“base-64 字符数组的无效长度”错误提示的解决
  13. 使用光学鼠标传感器实现旋转(或线性)测量(转)
  14. 机械电子计算机哪个更适合创业,二本 电气工程及其自动化,和机械电子工程 哪个专业技术性很强,更好就业,更适合考研。...
  15. Mip-NeRF学习
  16. 基于R语言的方差分析及多重比较
  17. 黑客逆向破解基础-3:如何识别程序加的什么壳
  18. docker golang buid rstp2webrtc
  19. Vue脚手架html2canvas生成图片
  20. 低代码平台,企业业务创新的最佳路径

热门文章

  1. springAop @AfterReturning注解 获取返回值
  2. 【XStream】XStream 忽略不重要点元素
  3. 【VMCloud云平台】SCCM(三)初始配置
  4. freebsd系统/: write failed, filesystem is full问题解决办法
  5. 个人知识管理专著《你的知识需要管理》出版
  6. nginx strip模块优化页面
  7. apache加入chkconfig
  8. zabbix_get 无法获取值(解决思路)
  9. 你能用大数据创造一个新的商业模型吗?
  10. strut2以及路径的一些问题