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编译类后才能生效,你可以打开自动编译功能,这样在你保存修改的时候,类就自动重新加载了。

posted on 2017-05-17 14:51  cag2050  阅读(1560)  评论(0编辑  收藏  举报

导航