SpringBoot的打包部署、版本仲裁

索引

    • 背景
    • 简介
    • 上手
    • 顺便yy下SpringMVC的运行流程
    • 打包部署
    • SpringBoot版本仲裁中心
    • 依赖
    • @SpringBootApplication

背景

   
    最近头发掉的厉害了,整理下SpringBoot系列及周边的技术,总的来看分为配置、日志、web、docker、数据访问、缓存、消息、检索、任务、安全、分布式、开发习惯、监控等,慢慢更新
  

简介

    为了简化开发,尊崇约定大于配置的思想,干掉复杂的配置,让咱码农能把精力都用在开发上。

上手

  1.     IDEA-创建项目-引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
  1.     IDEA生成了启动类
@SpringBootApplication
public class DemoApplication {

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

}
  1.     编写controller
    SpringBoot的打包部署、版本仲裁_第1张图片
@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String getHello(){
        return "Hello! SpringBoot";
    }
}

  这里的 @RestController 来看一下

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 * @since 4.0.1
	 */
	@AliasFor(annotation = Controller.class)
	String value() default "";

}

    这里边放了@ResponseBody注解,所以HelloController 里边所有的方法都不用再写@ResponseBody注解了

  1.     启动项目并访问
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-09-05 21:29:04.859  INFO 1948 --- [           main] hellospringboot.demo.DemoApplication     : Starting DemoApplication on 7RX0H6QOXGFFX6A with PID 1948 (F:\work\JavaProject\demo\target\classes started by Administrator in F:\work\JavaProject\demo)
2020-09-05 21:29:04.951  INFO 1948 --- [           main] hellospringboot.demo.DemoApplication     : No active profile set, falling back to default profiles: default
2020-09-05 21:29:06.798  INFO 1948 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-09-05 21:29:06.839  INFO 1948 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-09-05 21:29:06.839  INFO 1948 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.37]
2020-09-05 21:29:06.986  INFO 1948 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-09-05 21:29:06.986  INFO 1948 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1844 ms
2020-09-05 21:29:07.324  INFO 1948 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-09-05 21:29:07.599  INFO 1948 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-09-05 21:29:07.631  INFO 1948 --- [           main] hellospringboot.demo.DemoApplication     : Started DemoApplication in 4.341 seconds (JVM running for 9.855)
2020-09-05 21:29:22.614  INFO 1948 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-09-05 21:29:22.614  INFO 1948 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-09-05 21:29:22.626  INFO 1948 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 11 ms

    SpringBoot的打包部署、版本仲裁_第2张图片
    访问到了,从启动信息可以看到,此项目用了自带的tomcat9,初始化并启动了Spring任务调度、前端控制器DispatcherServlet 等

顺便yy下SpringMVC的运行流程

    第一步:发起请求到前端控制器(DispatcherServlet)

    第二步:前端控制器请求HandlerMapping(处理器映射器)查找Handler

    第三步:处理器映射器HandlerMapping向前端控制器返回Handler执行链

    第四步:前端控制器调用处理器适配器(HandlerAdaptor)去执行Handler

    第五步:适配器执行完成后给前端控制器返回ModelAndView;

    第六步:前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图

    第七步:视图解析器向前端控制器返回View

    第八步:前端控制器进行视图渲染

    第九步:前端控制器向用户响应结果
   

打包部署

    不废话,直接贴图,噢对了,首先得有springboot maven插件,这个一般创建工程的时候就已经弄好了,这里也贴一下

 	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    有插件后------>直接打包,这个默认是打成了jar包

SpringBoot的打包部署、版本仲裁_第3张图片
    运行成功后在target里就可以找见项目jar包,可以直接拖到桌面 cmd java -jar jar包名部署运行

SpringBoot的打包部署、版本仲裁_第4张图片
  部署环境里没有tomcat也没事,因为包里自带了,至于为什么,请往下瞅

SpringBoot版本仲裁中心

  根据上边,根本没写几行代码,也没去搞复杂的配置,就直接运行了,来细细瞅瞅pom文件里是不是有下边这个parent父项目
  

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

  点进去看看,还有一个parent父项目,再点进去可以看到好多已经定好依赖版本,所以我们在引入需要的依赖时,是不需要写版本号的,它已经定义好了,不写就是在用默认的版本,如果没有在版本仲裁中心管理的依赖,需要写版本号

依赖

  我们这个项目明明没有导入spring mvc、也没导入tomcat,它就搞定了,那它是咋弄的?
  还记得我们引入了一个spring-boot-starter-web吧,点进去看看,tomcat、mvc…都在里边了, spring-boot-starter-web场景启动器会帮我们导入web模块正常运行所需要的依赖。咱这个项目只用到了web模块,那别的模块呢?跟web模块类似,导一个就能搞定一票子需要的依赖了。
SpringBoot的打包部署、版本仲裁_第5张图片

@SpringBootApplication

  被@SpringBootApplication标注的类就是SpringBoot的启动类,自动配置就是它完成的,点进去看下

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

  这里边每个注解的作用,原理等详细信息想深研究可以自行百度或者看书,我们在这里只看下字面意思就能基本明白它是咋搞的了,@SpringBootConfiguration是SpringBoot的配置类,那就是做配置的呗,@EnableAutoConfiguration就是自动配置呗。需要注意的一点是,启动类必须与咱的controller、service、mapper等包平级,跳出项目之外那肯定就扫不到了呗,我前几年学这个的时候手贱建错包,第一个demo就报错哭了一个月

你可能感兴趣的:(SpringBoot,Java,java,spring,boot)