SpringBoot笔记1——一个例子和springboot的三种启动方式

原创
2018/02/10 16:24
阅读数 1.6K

最近打算把现有的系统重构成微服务。趁此机会,把springboot和springCloud两个系列的博客给写了。

根据以往的经历,系列的开篇不必粘一大堆对入门者来说看不懂的文字介绍,没有什么比一个例子更能说明“这是个什么东西”以及有啥用处、好处。

今天也不例外。今年有今年的新目标,快过年了,祝愿大家心想事成。

 

一个springboot项目示例

首先我们的环境版本如下:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\IDE\apache-maven-3.3.9
Java version: 1.8.0_112, vendor: Oracle Corporation
Java home: D:\Java\jdk1.8.0_112\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

(本文出自oschina博主HappyBKs的博文:https://my.oschina.net/happyBKs/blog/1621031)

下面我们用IDEA来构建一个springboot项目。

选择jdk版本,并指定springboot初始化的服务URL。选择默认的就好。你可以打开这个连接看看

https://start.spring.io/

其实它是一个在线的构建springboot的服务,自己可以通过向导创建一个初始化好的springboot项目。

这里我们用IDE中的向导即可。点击下一步:

点击下一步,选择web下的web

保存路径中最好不要出现中文和空格等。

 

关于maven的镜像,可以使用阿里云的那个。

完成建立项目后,可以将三个不需要的文件删除:

 

项目中已经帮我们配置好了基本的maven pom。这里包括:指定parent版本,指定项目编码,建立springboot及其springboot-test的依赖,并且给项目build一个springboot的maven插件。

<?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.happybks</groupId>
	<artifactId>pets</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>pets</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.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>

springboot的项目程序启动的入口,需要在类上加入@SpringBootApplication注解

项目默认一个为我们建立好了一个启动类,并注解了org.springframework.boot.autoconfigure.SpringBootApplication

package com.happybks.pets;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class PetsApplication {

	public static void main(String[] args) {
		SpringApplication.run(PetsApplication.class, args);
	}
}

另外,resouces文件夹下还有springboot的配置文件,初始为空。

test文件夹下有springboot的测试类。

package com.happybks.pets;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class PetsApplicationTests {

	@Test
	public void contextLoads() {
	}

}

然后我们启动服务:

控制台打印出:说明springboot启动OK了。

D:\Java\jdk1.8.0_112\bin\java -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=62619 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2017.3\lib\idea_rt.jar=62620:D:\Program Files\JetBrains\IntelliJ IDEA 2017.3\bin" -Dfile.encoding=UTF-8 -classpath D:\Java\jdk1.8.0_112\jre\lib\charsets.jar;D:\Java\jdk1.8.0_112\jre\lib\deploy.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\access-bridge-64.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\cldrdata.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\dnsns.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\jaccess.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\jfxrt.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\localedata.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\nashorn.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\sunec.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\sunjce_provider.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\sunmscapi.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\sunpkcs11.jar;D:\Java\jdk1.8.0_112\jre\lib\ext\zipfs.jar;D:\Java\jdk1.8.0_112\jre\lib\javaws.jar;D:\Java\jdk1.8.0_112\jre\lib\jce.jar;D:\Java\jdk1.8.0_112\jre\lib\jfr.jar;D:\Java\jdk1.8.0_112\jre\lib\jfxswt.jar;D:\Java\jdk1.8.0_112\jre\lib\jsse.jar;D:\Java\jdk1.8.0_112\jre\lib\management-agent.jar;D:\Java\jdk1.8.0_112\jre\lib\plugin.jar;D:\Java\jdk1.8.0_112\jre\lib\resources.jar;D:\Java\jdk1.8.0_112\jre\lib\rt.jar;F:\Users\Neil\IdeaProjects\pets\target\classes;C:\Users\Neil\.m2\repository\org\springframework\boot\spring-boot-starter-web\1.5.10.RELEASE\spring-boot-starter-web-1.5.10.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\boot\spring-boot-starter\1.5.10.RELEASE\spring-boot-starter-1.5.10.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\boot\spring-boot\1.5.10.RELEASE\spring-boot-1.5.10.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\1.5.10.RELEASE\spring-boot-autoconfigure-1.5.10.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\boot\spring-boot-starter-logging\1.5.10.RELEASE\spring-boot-starter-logging-1.5.10.RELEASE.jar;C:\Users\Neil\.m2\repository\ch\qos\logback\logback-classic\1.1.11\logback-classic-1.1.11.jar;C:\Users\Neil\.m2\repository\ch\qos\logback\logback-core\1.1.11\logback-core-1.1.11.jar;C:\Users\Neil\.m2\repository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;C:\Users\Neil\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Neil\.m2\repository\org\slf4j\log4j-over-slf4j\1.7.25\log4j-over-slf4j-1.7.25.jar;C:\Users\Neil\.m2\repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;C:\Users\Neil\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\1.5.10.RELEASE\spring-boot-starter-tomcat-1.5.10.RELEASE.jar;C:\Users\Neil\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.27\tomcat-embed-core-8.5.27.jar;C:\Users\Neil\.m2\repository\org\apache\tomcat\tomcat-annotations-api\8.5.27\tomcat-annotations-api-8.5.27.jar;C:\Users\Neil\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.27\tomcat-embed-el-8.5.27.jar;C:\Users\Neil\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.27\tomcat-embed-websocket-8.5.27.jar;C:\Users\Neil\.m2\repository\org\hibernate\hibernate-validator\5.3.6.Final\hibernate-validator-5.3.6.Final.jar;C:\Users\Neil\.m2\repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;C:\Users\Neil\.m2\repository\org\jboss\logging\jboss-logging\3.3.1.Final\jboss-logging-3.3.1.Final.jar;C:\Users\Neil\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Neil\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.8.10\jackson-databind-2.8.10.jar;C:\Users\Neil\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;C:\Users\Neil\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.8.10\jackson-core-2.8.10.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-web\4.3.14.RELEASE\spring-web-4.3.14.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-aop\4.3.14.RELEASE\spring-aop-4.3.14.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-beans\4.3.14.RELEASE\spring-beans-4.3.14.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-context\4.3.14.RELEASE\spring-context-4.3.14.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-webmvc\4.3.14.RELEASE\spring-webmvc-4.3.14.RELEASE.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-expression\4.3.14.RELEASE\spring-expression-4.3.14.RELEASE.jar;C:\Users\Neil\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Neil\.m2\repository\org\springframework\spring-core\4.3.14.RELEASE\spring-core-4.3.14.RELEASE.jar com.happybks.pets.PetsApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.10.RELEASE)

2018-02-10 15:51:06.115  INFO 48676 --- [           main] com.happybks.pets.PetsApplication        : Starting PetsApplication on MSI with PID 48676 (F:\Users\Neil\IdeaProjects\pets\target\classes started by Neil in F:\Users\Neil\IdeaProjects\pets)
2018-02-10 15:51:06.126  INFO 48676 --- [           main] com.happybks.pets.PetsApplication        : No active profile set, falling back to default profiles: default
2018-02-10 15:51:06.171  INFO 48676 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@50de0926: startup date [Sat Feb 10 15:51:06 GMT+08:00 2018]; root of context hierarchy
2018-02-10 15:51:07.107  INFO 48676 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2018-02-10 15:51:07.125  INFO 48676 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-02-10 15:51:07.126  INFO 48676 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.27
2018-02-10 15:51:07.212  INFO 48676 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-02-10 15:51:07.213  INFO 48676 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1055 ms
2018-02-10 15:51:07.308  INFO 48676 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2018-02-10 15:51:07.311  INFO 48676 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-02-10 15:51:07.311  INFO 48676 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-02-10 15:51:07.311  INFO 48676 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-02-10 15:51:07.311  INFO 48676 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-02-10 15:51:07.549  INFO 48676 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@50de0926: startup date [Sat Feb 10 15:51:06 GMT+08:00 2018]; root of context hierarchy
2018-02-10 15:51:07.592  INFO 48676 --- [           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.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-02-10 15:51:07.593  INFO 48676 --- [           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.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-02-10 15:51:07.614  INFO 48676 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-02-10 15:51:07.614  INFO 48676 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-02-10 15:51:07.637  INFO 48676 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-02-10 15:51:07.727  INFO 48676 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-02-10 15:51:07.784  INFO 48676 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-02-10 15:51:07.789  INFO 48676 --- [           main] com.happybks.pets.PetsApplication        : Started PetsApplication in 2.116 seconds (JVM running for 4.683)

注意,这里默认已经有了一个内嵌的tomcat服务,不需要我们再另外配置server。

2018-02-10 15:51:07.784  INFO 48676 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)

这个时候web服务已经启动,但是没有内容:

我们来添加一个controller。

package com.happybks.pets;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloHappyBKsController {

    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public String sayHello(){
        return "Hello! I am HappyBKs, from Oschina! ";
    }
}

重启服务:访问http://localhost:8080/hello

 

springBoot的三种启动方式

(1)使用IDEA启动

以上是springboot的一种启动方式,即在IDE开发工具IDEA中启动。

(2)使用mvn启动

下面介绍另一个启动方式:使用mvn启动springboot

首先,请进入到项目目录下

然后输入:mvn spring-boot:run

然后一会看到一大堆mvn下载springboot各种组件的刷屏。最后当你再次看到springboot的LOGO出现,并加载了项目的控制器等类后,springboot就成功启动了

注意,这里可以看到tomcat相关的配置及端口:

(3)mvn install编译生成出项目的jar,然后运行jar

载项目目录下,使用mvn install进行编译

然后又是一大堆下载。

之后,我们可以看到,在项目target文件夹下,生成了一个pets-0.0.1-SNAPSHOT.jar

我们运行这个jar包:

springboot依然可以启动:

 

 

展开阅读全文
加载中
点击加入讨论🔥(1) 发布并加入讨论🔥
打赏
1 评论
11 收藏
2
分享
返回顶部
顶部