springboot学习 - hello world

引子:
       开始之前允许我介绍下我认识的spring,认识Spring是 从2007 年开始的,那时候spring without ejb 一书早已成名,基于对spring的好奇 看了这本书。那时候自诩是正统的java学习者,对spring有很多不屑,无论是从学习路径还是后来的工作需要,基本上是用j2EE那套 如EJB,JMS,JTA等,从而对j2EE的官方蓝皮书到相关的规范都有所了解,那时候对spring给我的感觉尽管简单但不正统,呵呵,感觉自己有点像朝代更迭后的老臣一般,是的,就是顽固,这个是思想上面的。 从具体使用上当时感觉spring只是通过各种整合和封装给开发人员带来了很多便利,当然最让自己感觉别扭的就是xml配置,原来我自己可以随意施展和调遣的对象,使用后必须先配置,这无形中失去了很多自由的空间。10年前的这种观念对我后续使用spring有很多影响,尽管后续通过那本书尝试了每个案例,以及后来项目中多多少少用了很多特性,总之没有提起我深入的兴趣,尽管购买了spring内幕一书 并对其内部有所了解,但总之未深入。10年后重新开始学习还是在春天,如同你的名字一般spring,这次或许是因为雨季你穿着“长靴”,引导(boot )我重新认识SpringBoot。
摘要:
     springboot 项目的启动原因 当前我还不甚了解,但从他提供的特性来看 促使我愿意重新学习和使用,先介绍下官方的描述:
 (1) Create stand-alone spring  applications  创建可独立运行的 spring 应用程序
 (2) Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)  内嵌tomcat,jetty   web容器,不需要发布war文件到容器里
 (3) Provide opinionated 'starter' POMs to simplify your Maven configuration   通过提供预置的启动器pom 来简化maven 配置
 (4)Automatically configure Spring whenever possible      无论何时只要可以都能够实现spring的自动配置,从而摆脱了xml的配置问题
 (5)Provide production-ready features such as metrics, health checks and externalized configuration   ,提供了多种服务于产品准备的特性,如 健康检查
 (6)Absolutely  no code generation and  no requirement for XML configuration  ,完全不需要代码生成,完全不需要xml配置
正是因为这些特性让我重燃信心,当然后有其与其他项目的无缝结合,如云,社交媒体 让我产生了很大的兴趣。对于初学的人来说可能很多特性不知为什么要有,或者现在也挺好的,基于此我说一下我之前针对这些特性是如何解决的,以及为什么要用这个。
(1) 独立运行的spring 程序, 对于部分应用需要单独运行特别是普通java 程序,如某些业务场景下需要一个定时任务定期在后台运行 ,此时程序不依赖于web容器,同时该应用引入了很多第三方jar包,之前我的做法是使用fatjar 这个插件来打包,这种方式会自动将关联的jar 解压成class然后再打成jar包。两者相比springboot的jar包要小很多,主要是其对关联jar的引入做了优化具体后续再研究单独写分析文章。
(2) 内嵌的web容器 ,如tomcat jetty ,这个应用场景主要是为了简便开发和调试,当然后续生产的部署也可以一站式解决,以前的方式就是开发完 打包部署到web容器,或者开发工具集成了web容器调试。应用场景,如需要快速的提供便于部署和使用的web应用,例如用于演示的应用 无需复杂的部署,以前的方案 如直接调用jetty的api通过程序直接启动,springboot此次将此方案做了无缝结合。
(3)通过提供预置的启动器pom 来简化maven 配置, 这个场景,主要是解决复杂的maven配置,使用的子项目越多涉及的依赖就越多,通过预制的启动期配置可以大大的简化maven配置。
(4)自动配置,这个是我此次重新学习的最关键点,无需那么多配置,让开发 自由,灵活 ,让我们只关注java代码。
(5)提供了多种服务于产品准备的特性,如 健康检查  ,这个场景还没有用,后面补充 大体看应该是针对应用的监控和检查,这个是很好的想法,后续不需要再使用第三方应用进行监控了。
实战:
    对于编程人员来说学习一样新的语言,框架,最开始想到的就是hello world,是的 此次旅程也从这里开始:
  1.   环境准备
            java1.8 maven3.3.9  gradle3 springboot2 ,下载链接可以自己百度,下载完毕后配置环境变量,同时验证结果 。
           这里列举下我的验证结果:
  1.   开始开发
          (1)  如 D盘创建springboot/helloworld  文件夹
          (2)  创建pom文件,这里主要是先引入springboot必须的一些依赖和插件,为了简便springboot提供了对应的父pom(spring-boot-starter-parent) ,这个也就是上面说的启动期简化pom配置的一个例子
下面先列出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.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
    </parent>
    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>
    如上的maven文件包含了 依赖,打包插件,仓库信息等,主要关注 spring-boot-starter-web,其他可以默认,因为只有引入 spring-boot-starter-web 后才可以使用web特性。
   (3) 创建controller 类
         创建 src/main/java/HelloWorld.java 
         代码如下:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
public class HelloWorld {
  @RequestMapping("/")
   string home(){
      return "hello world";
    }

   public static void mian (String[] args)  throws Exception{
          SpringApplication.ruu(HelloWorld.class ,args);
    }
}
@RestController  定义这个类为Rest方式的控制类
 @RequestMapping("/")  定义请求路径 ,这个表示可以通过 localhost:端口/  直接访问这个控制类
的此方法
(4) 运行程序 使用命令 mvn spring-boot:run
      通过该命令启动应用程序,这时候springboot会自动启动内嵌的web容器(tomcat),并且通过8080端口打开,同时会将HelloWorld 这个控制类放到容器里。 
(5) 验证结果 
    通过浏览器打开  localhost:8080  ,页面显示 Hello World!
    
       
(6) 打包为可执行程序
     我们上面看到的运行结果,如果关闭掉控制台是无法一直执行的,同时在没有maven环境下也是无法执行的,现在来解决这个问题,方式是通过mvn package 打包。
    

 
(6)执行程序 ,打包完成后会出现一个target目录 ,进入此目录执行生成 jar文件(java -jar 命令)


 
验证结果和上面是一致的,现在这个jar包 在有java8(这个例子用java8开发的 ,保证与开发环境一致) 的环境下可以任意执行了。
 

猜你喜欢

转载自verran.iteye.com/blog/2363374