SpringBoot学习(一)
2019独角兽企业重金招聘Python工程师标准>>>
(一) 第一个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。
创建完毕后,大概长这个样子:
我们来看看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终端窗口:
打开它,输入命令进行打包:mvn package -Dmaven.test.skip=true
几秒钟后,会在target目录下生成一个jar包:
回到终端,输入命令:
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学习(一)相关推荐
- springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...
- SpringBoot学习笔记(3):静态资源处理
SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...
- 目录:SpringBoot学习目录
SpringBoot配套源码地址:gitee.com/hengboy/spr- SpringCloud配套源码地址:gitee.com/hengboy/spr- SpringBoot相关系列文章请访问 ...
- springboot学习笔记(五)
一丶注值方式 1.在application.properties文件中注值 首先我们将application.yml中的学生名字和年龄给注释掉,来验证在applic.properties的注值方式. ...
- SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用
1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...
- SpringBoot学习笔记(16):单元测试
SpringBoot学习笔记(16):单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小 ...
- SpringBoot学习笔记(9)----SpringBoot中使用关系型数据库以及事务处理
在实际的运用开发中,跟数据库之间的交互是必不可少的,SpringBoot也提供了两种跟数据库交互的方式. 1. 使用JdbcTemplate 在SpringBoot中提供了JdbcTemplate模板 ...
- SpringBoot学习笔记(16)----SpringBoot整合Swagger2
Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...
- SpringBoot学习笔记(8):事物处理
SpringBoot学习笔记(8):事物处理 快速入门 在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚.大量的t ...
- SpringBoot 学习二:操作数据库
2019独角兽企业重金招聘Python工程师标准>>> 本文将从以下几个方面介绍: 前言 配置数据源 SpringBoot 整合 Mybatis SpringBoot 整合 Jdbc ...
最新文章
- 超参数调优河伯、组合优化器CompBO,华为诺亚开源贝叶斯优化库
- 吐槽一下微信公众号的赞赏号
- 判断图片下载是否成功 file_exists和filesize 图像0KB问题
- 基于heartbeat v1+ldirectord实现LVS的高可用
- linux 中 set,env,export,declare显示shell变量的区别
- sigmoid函数解决溢出_梯度消失和梯度爆炸及解决方法
- python参数_python 参数
- [C++11]initializer_lisr模板类的使用
- 2017.4.17------软件测试的艺术+整理以前的摘记
- 【BO】WEBI文件打开时提示Illegal access错误
- Excel进行粗糙的快速更换图片背景颜色
- 反序列化时出现“base-64 字符数组的无效长度”错误提示的解决
- 使用光学鼠标传感器实现旋转(或线性)测量(转)
- 机械电子计算机哪个更适合创业,二本 电气工程及其自动化,和机械电子工程 哪个专业技术性很强,更好就业,更适合考研。...
- Mip-NeRF学习
- 基于R语言的方差分析及多重比较
- 黑客逆向破解基础-3:如何识别程序加的什么壳
- docker golang buid rstp2webrtc
- Vue脚手架html2canvas生成图片
- 低代码平台,企业业务创新的最佳路径