• spring boot 知识点


    • 如果不想生成可执行的jar文件,想生成war包并自己直接放在tomcat容器跑,那就这样操作:
      1.修改pom.xml,将packaging由jar改成war,并添加tomcat的依赖,scope值为provided表明:如果打包时,需要内嵌tomcat,就自动提供。

      2.打开DemoApplication.java ,让他直接继承SpringBootServletInitializer,并重写configure方法,该方法的作用提供类似web.xml的配置服务。
    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.context.web.SpringBootServletInitializer;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication extends SpringBootServletInitializer{
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(DemoApplication.class);
        }
    
        @RequestMapping(value = {"/",""})
        public String helloboot(){
            return "hello boot !!" ;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    3.DemoApplication.java 直接右键,Run As - >Maven build..输入package的命令,就直接打成war包了

    • 为了构建一个既可执行,又能部署到外部容器的war文件,你需要标记内嵌容器依赖为"provided"。

    • 构建的jar或war里,你想启动的main类既可以通过一个配置选项指定,也可以通过向manifest添加一个Main-Class属性。如果你没有指定main类,该插件会搜索带有public static void main(String[] args)方法的类。

    • Spring Boot默认的日志输出节点(items)如下:

    1. 日期和时间 - 精确到毫秒,且易于排序。
    2. 日志级别 - ERROR, WARN, INFO, DEBUG 或 TRACE。
    3. Process ID。
    4. ---分隔符,用于区分实际日志信息开头。
    5. 线程名 - 包括在方括号中(控制台输出可能会被截断)。
    6. 日志名 - 通常是源class的类名(缩写)。
    7. 日志信息。
      注 Logback没有FATAL级别,它会映射到ERROR。
    • Spring DevTools 特点:
    1. 默认禁用缓存选项。
    2. 在类路径上的文件发生更改时自动重启。注意:某些资源(如静态资源和视图模板)不需要重启应用程序。
    3. 实时加载。
    4. 全局设置。
    • Spring DevTools 相关知识:
      运行打包的应用程序时,开发人员工具会自动禁用。如果你通过 Java -jar或者其他特殊的类加载器进行启动时,都会被认为是“生产环境的应用”。
      将依赖标记为optional可选是一种最佳做法,可以防止将devtools依赖传递到其他模块中。Gradle 不支持开箱即用的optional依赖项。

    • Spring官方已经不推荐使用JSP来开发WEB,而是推荐使用如下几种模板引擎来开发:
      Thymeleaf(Spring官方推荐)
      FreeMarker
      Velocity
      Groovy
      Mustache
      Spring Boot默认存放模板的路径在 src/main/resources/templates,不过我们也可以自行配置路径。

    • 处理静态文件
      默认情况下我们只需要在 src/main/resources/static 目录下添加 css/style.css 和 js/main.js 文件,Spring MVC能够自动将他们发布,浏览器通过访问/css/style.css, /js/main.js就可以正确加载这些资源。

    • 打包成了jar包,不需要容器就可以在生成环境下通过运行jar包启动一个Web服务。
      这样的服务怎么样正确的停止呢?或许你只是简单的kill -9对应的进程,但实际上,有更优雅的方式。
      Spring Boot里面有一个spring-boot-starter-actuator的项目,可以监控和管理Spring Boot应用。其中暴露了很多endpoint,可以方便的检测应用的健康情况。其中有一个shutdown的endpoint可以优雅地停止应用。
      参考链接:http://jaskey.github.io/blog/2016/04/05/shutdown-spring-boot-application-gracefully/

    • 报错:XX cannot be resolved to a type
      解决:

    1. jdk不匹配(或不存在)
      项目指定的jdk为“jdk1.6.0_18”,而当前eclipse使用的是“jdk1.6.0_22”。需要在BuildPath | Libraries,中做简单调整。
    2. jar包缺失或冲突
      当找不到“XX”所在的jar包时,会报这个错。解决只需要找到(ctrl+点击,可能能看到jar包名称)对应jar包导入项目即可。
      另外,出现相同的XX时也会报此错。可能需要调包、解包、选删。
    3. eclipse查找项目类型策略所致
      eclipse下,上述两条都对比过了,没有任何问题,可偏偏还报这错。这时,需要操作一下 Project | Clean... ,问题即可解决。原因是,机制所致。因为某些特殊原因,eclipse没能自动编译源代码到build/classes(或其他classes目录),导致类型查找不到。
    • 运行Spring Boot项目的方式:
      方式1:在IDE中直接执行 main 函数,然后访问http://localhost:8080。
      方式2:用 mvn 打包为可执行jar包,然后执行java -jar xxx.jar。
      方式3:执行 mvn spring-boot:run 运行项目(直接使用tomcat(默认)启动项目)。

    • 运行 main函数 方式来启动Spring Boot项目,下面3种写法中选择一种
      写法1,最简单的写法:

    SpringApplication.run(Application.class, args);
    

    该方法返回一个ApplicationContext对象,使用注解的时候返回的具体类型是AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,当支持web的时候是第二个。
    写法2:

    SpringApplication application = new SpringApplication(Application.class);
    application.run(args);
    

    SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用这种方式。
    写法3:使用SpringApplicationBuilder

    new SpringApplicationBuilder()
            .showBanner(false)
            .sources(Application.class)
            .run(args);
    

    当使用SpringMVC的时候由于需要使用子容器,就需要用到SpringApplicationBuilder,该类有一个child(xxx...)方法可以添加子容器。

    • java类文件中的注解
    1. @RestController
      web应用,需要写这个注解,这个注解相当于同时添加@Controller和@ResponseBody注解。
    2. @EnableAutoConfiguration
      Spring Boot建议只有一个带有该注解的类。
      @EnableAutoConfiguration作用:Spring Boot会自动根据你jar包的依赖来自动配置项目。
      如果你不想让Spring Boot自动创建,你可以配置注解的exclude属性,例如:
    @Configuration
    @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    public class MyConfiguration {
    }
    
    1. @SpringBootApplication
      由于大量项目都会在主要的配置类上添加@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解。
      因此Spring Boot提供了@SpringBootApplication注解,该注解可以替代上面三个注解(使用Spring注解继承实现)。
    2. @RequestMapping("xxx")
      这个注解起到路由的作用。
    • 增加父pom比较简单,而且spring-boot-starter-parent包含了大量配置好的依赖管理,在自己项目添加这些依赖的时候不需要写版本号。
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.3.0.RELEASE</version>
        </parent>
    

    使用父pom虽然简单,但是有些情况我们已经有父pom,不能直接增加时,可以通过如下方式:

    <dependencyManagement>
         <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    • Spring通过添加spring-boot-starter-*这样的依赖就能支持具体的某个功能。
      更完整的功能列表可以查看:using-boot-starter-poms

    • Spring-Loaded项目提供了强大的热部署功能,添加/删除/修改 方法/字段/接口/枚举 等代码的时候都可以热部署,速度很快,很方便。
      想在Spring Boot中使用该功能非常简单,就是在spring-boot-maven-plugin插件下面添加依赖:

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework</groupId>
                            <artifactId>springloaded</artifactId>
                            <version>1.2.5.RELEASE</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    

    添加以后,通过mvn spring-boot:run启动就支持热部署了。
    注意:使用热部署的时候,需要IDE编译类后才能生效,你可以打开自动编译功能,这样在你保存修改的时候,类就自动重新加载了。

  • 相关阅读:
    小程序登录页面
    小程序环境搭建
    js闭包
    作用域和作用域链及预解析
    高阶函数
    在.net core项目中,增加gulp打包任务
    阿里云部署docker-swarm 内网问题
    .net identity scaffold
    c#中对XML反序列化
    c# Reactive Extension中的FromEventPattern和FromEvent
  • 原文地址:https://www.cnblogs.com/cag2050/p/6867552.html
Copyright © 2020-2023  润新知