文档章节

spring boot 入门介绍

jokeryang
 jokeryang
发布于 2017/03/29 18:06
字数 3297
阅读 16
收藏 0

摘要: springboot介绍与使用,一些版本问题等。

1 . springboot简单介绍(http://projects.spring.io/spring-boot/)

        现在的web项目几乎都会用到spring框架,而要使用spring难免需要配置大量的xml配置文件,而springboot的出现解   决了这一问题,一个项目甚至不用部署到服务器上直接开跑,真像springboot所说:“just run”。

        springboot的很多默认编码方式都是utf-8,真是福利啊。

    org.spring 2013年新开发的框架springboot , 它让一个单独项目的创建变得更加的简单,让所有依赖spring的程序可以做到“just run”。springboot提供大量第三方libraries让我们可以非常轻松的开始创建一个spring工程,甚至不需要再去配置一些繁琐的xml配置文件

    框架特点:

    1:创建独立的spring应用。

    2:嵌入Tomcat, Jetty Undertow 而且不需要部署他们。

    3:提供的“starters”poms来简化Maven配置

    4:尽可能自动配置spring应用。

    5:提供生产指标,健壮检查和外部化配置

    6:绝对没有代码生成和XML配置要求

2 . 简单实例演示  

    本文全程使用Springboot当前版本1.2.2(当前,推荐)

       

    一个简单的helloworld     直接开始run  main方法就可以了  控制台我也不知道都干了什么,好像是开始部署了,

    但是没有关联到我的tomcat。

     

    浏览器就能直接访问了。

    

3 . 步骤详解

    *注意事项:

    1.开发第一个springboot程序最好使用maven来搭建,文档全程也是maven构建。

    2.springboot因为是一个最新开发的框架,所以只支持java6以上,java7最好,官方推荐java8。

    3.需要maven3.2以上版本支持。

    4.支持以下servlet容器                 

                        也可以将springboot程序部署到所有支持servlet3.0以上的容器

     #开发第一个springboot应用  HelloWorld

        我这里用的MyEclipse10   java 6  maven 3.2.3   tomcat  7.0.55

        新建web project  并添加maven支持。

       

      next之后后面要选择javaee 6.0的library   记住不要选上,因为里面的slf4j会跟springboot自带的产生冲突。

      #配置pom.xml

        配置pom的时候碰到了很多问题。这里提醒大家一下:

<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>springboot</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>springboot</name>
    <description />

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- 这里一定要配置上java的版本,如果是1.7版本的可不用配置 -->
        <java.version>1.6</java.version>
        <!-- 配置你的tomcat版本 -->
        <tomcat.version>7.0.55</tomcat.version>
    </properties>
    <build>
        <plugins>
            <!--如果是通过parent方式继承spring-boot-starter-parent则不用此插件
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            -->
        </plugins>
    </build>
    <!-- 父依赖 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <!-- 导入jar包 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

1.    springboot 的logback-classes-1.1.2.jar的包下有一个org.slf4j.impl包 这是springboot真正需要的包而MyEclipse自带的javaEE6.0library里也有一个slf4j包但它不是springboot所需要的,会一直报 NoSuchMethod异常getSingleton()。搞了半天才找到,所以一开始暂时不添加javaEE6.0Library。

2.这里教大家一个快速找到class文件真正所处包的方法。

当无法确定某个类属于哪个包是   可以通过Test.class.getProtectionDomain();来查看

例如:发生noSuchMethod异常时,但是确实有该方法,一般就是重复加载了jar包。

3.官方文档的例子都是用java7运行的。不配置<java.version>1.6</java.version>的话可能 会报版本异常的错误。具体是啥忘了  类似mirro.minor什么51.0的   50表示jdk1.6   51是jdk1.7

4.如果也不配置tomcat版本的话springboot默认会使用8.x版本的tomcat。所以要加一个

<tomcat.version>7.0.55</tomcat.version>来指定你所使用的tomcat版本(视你CATALINA_HOME配 置的所定)。

       

 #编写java代码

        

package com.i.springboot.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class FirstController {
    
    @RequestMapping(value="/")//是springmvc中的注解
    String home(){
        return "helloworld";
    }
    
    public static void main(String[] args) throws Exception {
        SpringApplication.run(FirstController.class, args);
    }
    
}

@EnableAutoConfiguration注解用来自动配置,我们pom中配置了    spring-boot-starter-web所以spring会来创建一 个web应用来配置程序

  完成后运行main程序无报错则运行成功。在浏览器输入相应的路径即可获得@RequestMapping返回的数据。

4 .  一个标准的springboot程序结构应该是什么样?

   1. spring通常建议我们将main方法所在的类放到一个root包下,@EnableAutoConfiguration(开启自动配置)注解通常都放到main所在类的上面,下面是一个典型的结构布局,供参考

   

com
 +- example
     +- myproject
         +- Application.java//main方法所在类在最底层
         |
         +- bean            //bean类
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service         //service层
         |   +- CustomerService.java
         |
         +- web             //controller层
             +- CustomerController.java

    从整体看去跟我们平时的布局差不多,就是将main方法放到了最底层。

    这样@EnableAutoConfiguration可以从逐层的往下搜索各个加注解的类,例如,你正在编写一个JPA程序(如果你的pom里进行了配置的话),spring会自动去搜索加了@Entity注解的类,并进行调用。

    通常我们只需要一个@EnableAutoConfiguration类

    2. spring通常建议我们在进行配置的时候尽量使用@注解的方式,尽管现在网上有各种各样成熟的xml配置方式,如果你实在不想用注解(我目前还不会怎么用注解配置。。。)可以通过@ImportResource方式导入xml文件。

    下面是一个加载xml文件配置的例子(官方实例)。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import sample.xml.service.HelloWorldService;
public class SampleSpringXmlApplication implements CommandLineRunner {
    @Autowired
    private HelloWorldService helloWorldService;
    @Override
    public void run(String... args) {
        System.out.println(this.helloWorldService.getHelloMessage());
    }
    public static void main(String[] args) throws Exception {
        //run的时候加载xml的配置
        SpringApplication.run("classpath:/META-INF/application-context.xml", args);
    }
}
<!-- xml中与我们平时见到的一样。 -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config/>
    <context:property-placeholder/>
    <bean id="helloService" class="sample.xml.service.HelloWorldService"/>
    <bean id="application" class="sample.xml.SampleSpringXmlApplication"/>
</beans>

 

  3. 自动配置对程序没有影响,我们随时可以修改自己的配置来替代自动配置。例如,如果我们添加自己的数据源,那么spring默认的将不再使用。如果你一定要消除某些特定配置可以这样来,如下所示:

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {

}

    4.  使用@SpringbootApplication注解  可以解决根类或者配置类(我自己的说法,就是main所在类)头上注解过多的问题,一个@SpringbootApplication相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具有他们的默认属性值。

package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //等同于 @Configuration @EnableAutoConfiguration @ComponentScanpublic
class Application {    
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

 

5. springboot功能全解.

    1.SpringApplication  程序入口

        SpringApplication.run(MySpringConfiguration.class, args);

    2.自定义打印项(就是控制台输出内容)    

        在classpath下加入banner.txt 来定义程序启动时要输出的内容,例如我这样

        

        

    banner的变量:

Variable

Description

${application.version}

MANIFEST.MF中的版本号例如1.0

${application.formatted-version}

格式化后的版本号,就是加了个V,例如V1.0…

${spring-boot.version}

springboot版本号,例如1.2.2.RELEASE.

${spring-boot.formatted-version}

格式化后的Springboot版本号,例如V1.2.2.RELEASE………

    3. 自定义SpringApplication

        可以自定义一些应用的配置,如下关闭banner输出:

public static void main(String[] args) {
    SpringApplication app = new SpringApplication(MySpringConfiguration.class);
    app.setShowBanner(false);
    app.run(args);
}

        SpringApplication的一些方法:

        

        SpringApplication的构造器参数往往是一个类.class,而这个类一定是加有@Configuration注解的,另外还可以换成xml的配置路径哦,前面有写出来过,SpringApplication.run("classpath:/META-INF/application-context.xml",args);

     4. 流畅的创建API

通过SpringApplicationBuilder构建
    new SpringApplicationBuilder()
    .showBanner(false)
    .sources(Parent.class)
    .child(Application.class)
    .run(args);

    5.  程序的事件和监听

除了通常的Spring框架的事件,如ContextRefreshedEvent SpringApplication发送一些额外的应用程序事件。触发一些事件实际上是ApplicationContext之前创建。

        除了一些常见的spring时间,像ContextRefreshedEvent  SpringApplication会产生一些额外的事件,某些事件甚至会再ApplicationContext创建之间触发。你可以通过很多方式创建监听器,一般最常用的就是如下:

public static void main(String[] args) throws Exception {
        SpringApplication app = new SpringApplication(FirstController.class);
        app.addListeners(new TestListener());
        app.run(args);
}

付一个自定义的listener。

import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
public class TestListener implements ApplicationListener<ApplicationStartedEvent>{
    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        /*do something*/
    }
}

 

    程序事件运行顺序:

An ApplicationStartedEvent is sent at the start of a run, but before any processing except the registration of listeners and initializers.

An ApplicationEnvironmentPreparedEvent is sent when the Environment to be used in the context is known, but before the context is created.

An ApplicationPreparedEvent is sent just before the refresh is started, but after bean definitions have been loaded.

An ApplicationFailedEvent is sent if there is an exception on startup.

 

© 著作权归作者所有

标签: spring boot springmvc maven spring-boot-starter-parent springboot

崔江昆

+ 关注

崔江昆 

 朝阳

粉丝 16

 

博文 11

 

码字总数 6000

 

相关博客

初尝试Spring boot

 郁极风

492 0

Spring Boot 项目工程模板

 Mr_Sanders

34 0

使用spring boot构建微服务

 孟飞阳

3965 23

评论 (28)

 

Ctrl+Enter 发表评论

  

IncRediblE

IncRediblE

1楼 2015/03/18 17:30

是不是可以用在测试上

崔江昆

崔江昆

2楼 2015/03/19 11:36

引用来自“IncRediblE”的评论

是不是可以用在测试上当然可以,只运行一个main方法即可跑起来一个web程序,很适合做测试,在main方法中还可以可以做各种配置。

姚君

姚君

3楼 2015/03/20 10:22

做标记

无忌

无忌

4楼 2015/03/26 21:56

总结很好,公司目前全部使用spring-boot,很好用

yeahjava

yeahjava

5楼 2015/04/02 02:48

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用可以具体说一下吗?可以私聊吗?

Shawock

Shawock

6楼 2015/04/08 23:02

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用我想问一下,用这个干嘛?只是为了测试吗?

崔江昆

崔江昆

7楼 2015/04/10 16:53

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用

引用来自“Shawock”的评论

我想问一下,用这个干嘛?只是为了测试吗?不止啊,springboot全程注解,没有配置文件。

cableyang

cableyang

8楼 2015/07/27 11:53

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用问下 你们 怎么部署 到服务器上 我想请教下 我对 spring boot app这块不是很熟悉

无忌

无忌

9楼 2015/08/11 15:59

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用

引用来自“cableyang”的评论

问下 你们 怎么部署 到服务器上 我想请教下 我对 spring boot app这块不是很熟悉和之前web工程一样,打成war发布到tomcat下就行了。spring-boot是简化spring搭建和开发

kloseking

kloseking

10楼 2015/08/26 18:24

问下,是否可以用做应用程序。

崔江昆

崔江昆

11楼 2015/08/27 14:28

引用来自“kloseking”的评论

问下,是否可以用做应用程序。不能吧 , 都是b/s架构的 . spring就是干这个的.

影魅幽牙

影魅幽牙

12楼 2016/01/19 16:21

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用我最近也在用这个做 新人有些问题 求解 求联系方式 我的企鹅 360090489 

菜鸡也是鸡

菜鸡也是鸡

13楼 2016/03/02 15:55

引用来自“无忌”的评论

总结很好,公司目前全部使用spring-boot,很好用

引用来自“Shawock”的评论

我想问一下,用这个干嘛?只是为了测试吗?大咖,请问可以分享一下发布或者使用的经验吗?

庄稼步冰

庄稼步冰

14楼 2016/04/20 09:35

学习了

孙青彪

孙青彪

15楼 2016/04/23 14:02

引用来自“kloseking”的评论

问下,是否可以用做应用程序。

引用来自“崔江昆”的评论

不能吧 , 都是b/s架构的 . spring就是干这个的.能做b/s的就可以做application

浪花三朵

浪花三朵

16楼 2016/07/06 16:43

我也想学 springboot 但官方文档看的头疼,谢谢你的文章

浪花三朵

浪花三朵

17楼 2016/07/06 16:43

我也想学 springboot 但官方文档看的头疼,谢谢你的文章

浪花三朵

浪花三朵

18楼 2016/07/06 17:05

希望可以看到更多的关于 springboot 的文章

ddsdggsg

ddsdggsg

19楼 2016/07/12 15:37

博主写的很好,,,有更新文章吗?

无解无界

无解无界

20楼 2016/08/11 11:13

进行run as java application之前需要其他操作吗?我搭建spring boot项目,只要是执行main函数,eclipse就被结束进程了,是什么原因?

顶部

社区

 

众包

码云

活动

关注微信公众号

下载手机客户端

开源中国社区是工信部开源软件推进联盟指定的官方社区粤ICP备12009483号-3

本文转载自:https://my.oschina.net/jkcui/blog/388400

jokeryang
粉丝 0
博文 4
码字总数 871
作品 0
成都
程序员
私信 提问
Spring Boot实战与原理分析

Spring Boot实战与原理分析 1:Spring Boot概述与课程概要介绍 2:Spring4 快速入门 3:Spring4 扩展分析(一) 4:Spring4 扩展分析(二) 5:Spring Boot 快速入门 6:Spring Boot 配置分析...

刘宗泽
2018/06/26
0
0
极速上手进阶大神的 5 门 SpringBoot 课程

SpringBoot 因其大大简化了配置。可快速启动一个应用的开发环境,把时间和精力更多的投入到实现业务需求上去。成为了Java 服务器端近几年特别火爆的框架。 如此火爆的技术,怎能不抢先了解一...

实验楼
08/16
0
0
分布式、微服务架构Spring Boot入门及实例介绍

spring boot入门 -- 介绍和第一个例子 “越来越多的企业选择使用spring boot 开发系统,spring boot牛在什么地方?难不难学?心动不如行动,让我们一起开始学习吧!” 使用Spring boot ,可以...

尘光掠影
2018/06/04
0
0
2018年互联网架构主流微服务架构之潮流的主先锋Spring Boot 2.0

一、Spring Boot 介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定...

A尚学堂Len老师
2018/08/21
0
0
Spring Security4实战与原理分析视频课程( 扩展+自定义)

Spring Security概述与课程概要介绍 Spring Security快速入门(基于XML) Spring Security快速入门(基于XML) URL匹配详解 自定义登陆 配置退出 Ajax登陆退出 JDBC认证 层级角色关系 认证体...

刘宗泽
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

32位与64位Linux系统下各类型长度对比

64 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。 1. 32 位和 64 位C数据类型...

mskk
16分钟前
4
0
Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)

在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide。 针对此需求,整理了三种实现方式,大家按实际情况选择。 当然,我们做项目肯定会用到 UI 框架,常...

张兴华ZHero
22分钟前
5
0
SpringBoot激活profiles你知道几种方式?

多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或者多个配置文件。 激活Profi...

恒宇少年
24分钟前
6
0
PDF修改文字的方法有哪些?怎么修改PDF文件中的文字

PDF修改文字一直以来都是一个难以解决的问题,很多的办公族在办公的时候会有修改PDF文件中的文字的需要,可是PDF文件一般是不能进行编辑和修改的,难道就没有什么办法解决这个问题了嘛?不要...

趣味办公社
27分钟前
3
0
企业组织中采用服务网格的挑战

作者:Christian Posta 译者:罗广明 原文:https://blog.christianposta.com/challenges-of-adopting-service-mesh-in-enterprise-organizations/ 编者按 本文作者介绍了企业组织采用服务网...

jimmysong
37分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部