SpringBoot基础

微服务

  • 解决大一统的服务化架构的问题

    1. 代码冲突问题
    2. 交付复杂,影响面大
    3. 测试困难
  • 微服务的好处
    1. 可扩展性
    2. 隔离性
    3. 灵活性,多语言多技术生态
  • 微服务的挑战
    1. 保持微服务的互通性
    2. 通过标准化降低开发成本

JavaConfig常用注解

  • @Bean : 用于方法时,其返回值将作为bean注册到Ioc容器,方法名默认为id,也可以指定id
  • @PropertySource : 加载*.properties文件,与@PropertySourcePlaceholderConfigurer配合使用来替换占位符
  • @ImportResource : 加载*.xml文件
  • @Import : 在当前JavaConfig配置类中整合另一个JavaConfig配置类
  • @Conditional: 用于实现基于条件的“智能”自动化配置
  • @AutoConfigureBefore/@AutoConfigurateAfter:用于调整自动配置的顺序

@SpringBootApplication

  • 是一个三体复合Annotation
  • @Configuration : 用于类表示这是一个JavaConfig配置类
  • @EnableAutoConfiguration : 与其它的Enable开头的Annotation一样,通过@Import和SpringFactoriesLoader将所有@Configuration汇总加载到当前SpringBoot创建并使用的Ioc容器
  • @ComponentScan : 扫描包,加载那些需要ComponentScan来加载的Bean
    1. 默认扫描SpringBootApplication启动类所在包与子包
    2. 如果需要扫描依赖jar包里的annonation,需要手动设置包路径@ComponentScan("com.citi.cv.rates")
  • 示例
    1. @SpringBootApplication(scanBasePackages = { "com.common, com.db" )
    2. @PropertySource(value = { "x.${SERVER_ENV}.properties" })
    3. SpringApplication.run(BondLevelsLiveApp.class, args);

约定优于配置

  • 配置方式的优先级

    1. 命令行参数
    2. 系统环境变量
    3. 文件系统中的配置文件
    4. classpath中的配置文件
    5. 代码中的配置项
  • Spring默认配置文件application.properties
    1. 可以放在项目根目录
    2. 或者放在根目录下的config子目录下

其他

  • spring-boot-maven-plugin可以将项目打包成可执行jar包
  • http://start.spring.io/ : 官方构建项目脚手架

spring-boot-starter

开箱即用的依赖模块

  • 以spring-boot-starter开头
  • parent都是spring-boot-starters
  • spring-boot-starters的parent是spring-boot-parent
  • spring-boot-parent的parent是spring-boot-dependencies

spring-boot-starter-web

  • Maven项目的webapp下面的所有东西放至src/main/resource下面
  • src/main/resource/static下面放html,js,css等静态资源,可以跟在contextPath后面访问

spring-boot-starter-actuator

spring boot 2的变化

  • endpoints.xxx 变为management.endpoint.xxx :注意endpoints的s没有了
  • mapping path加上actuator
    1. management.endpoints.web.base-path=/ 修改默认path
  • 默认只开启health/info
  • management.endpoints.jmx.exposure.exclude
  • management.endpoints.jmx.exposure.include=* 开启所有功能,默认*
  • management.endpoints.web.exposure.exclude=env
  • management.endpoints.web.exposure.include* 开启所有功能,默认 info, health

应用配置类

  • mappings : Spring MVC controller映射
  • beans : 查看spring容器的bean
  • env : 查看系统属性,环境变量,自定义属性的配置
  • configprops : 查看application属性的配置,属性的配置路径
  • autoconfig :查找生效与未生效的自动化配置
  • info : 查看application自定义信息,通过info.app.name=CitiVelocity, info.app.version=1.0.1配置

指标监控类

  • metrics: 监控内存,线程数,gc, http请求,启动时间等信息
  • health : 检查服务器状态,各种数据库,服务器的链接状态,磁盘空间使用情况
  • dump : 所有线程详细信息
  • trace : 最近100条http请求信息

操作控制类

  • shutdown :

    1. 正确关闭spring boot 应用的方法
    2. endpoints.shutdown.enabled=true
    3. management.security.enabled=false 或者 endpoints.shutdown.sensitive=false关闭用户验证
    4. POST请求,可以用curl -X POST http://localhost:7070/MarkdownNote/shutdown
    5. 搭配spring boot security进行权限校验

其他

  • 有些功能需要配置spring security或者设置management.security.enabled=false

spring boot 配置

  • application.properties放在src/main/resource下面
  • server.port=8081
  • server.contextPath=/MarkdownNote
  • server.tomcat.basedir=C://Base
  • 除了INT,还支持YAML格式,但是YAML目前不支持@PropertySource来加载配置文件
  • 配置文件里面也支持${xxx}进行参数引用
  • 随机参数
    1. ${random.value}
    2. ${random.int}
    3. ${random.long}
    4. ${random.int[0,100]}
  • 不同环境
    1. application-{profile}.properties : profile一般为dev,uat,prod
    2. spring.profiles.active=uat指定加载uat的配置
  • 修改可执行jar包的配置文件
    1. 如果jar包同级目录下有application.properties,会直接加载这个而不是jar包里的

配置详解

  • 修改默认path : management.endpoints.web.base-path

    1. springboot 2.0.x 默认/actuator

开发注意事项

修改spring boot内置的tomcat的 docBase目录

  • 如果有src/main/webapp目录,docBase默认为此目录

  • 如果没有则使用temp目录C:\Users\xs47604\AppData\Local\Temp\tomcat-docbase.58621522083049082.8081

  • 如果打成可执行jar包也使用temp目录

  • 自定义目录方法

      @Bean
    public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() {
    EmbeddedServletContainerCustomizer s = (ConfigurableEmbeddedServletContainer container) -> {
    container.addInitializers();
    File file = new File("C://docbase");
    if(!file.exists()) file.mkdirs();
    container.setDocumentRoot(file);
    };
    return s;
    }

创建resourcees目录下的File

  • Resource resource = new ClassPathResource("DataSource.xml");
  • File file = resource.getFile();
  • 打包成jar之后不能通过操作系统的文件系统找到文件,可以使用InputStream
    1. InputStream inputStream = resource.getInputStream();
    2. File file = new File(inputStream)

Spring Boot 揭秘的更多相关文章

  1. Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

    Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...

  2. Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块

    文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...

  3. Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

    文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...

  4. Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机

    文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内 ...

  5. Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点

    文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本 ...

  6. Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控

    文章目录 1. 内置 HealthIndicator 监控检测 2. 自定义 HealthIndicator 监控检测 3. 源代码 Health 信息是从 ApplicationContext 中所 ...

  7. Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 应用监控

    文章目录 1. 快速开始 2. 监控和管理端点3. 定制端点 2.1. health 应用健康指标 2.2. info 查看应用信息 2.3. metrics 应用基本指标 2.4. trace 基本 ...

  8. Spring Boot 揭秘与实战(八) 发布与部署 - 远程调试

    文章目录 1. 依赖 2. 部署 3. 调试 4. 源代码 设置远程调试,可以在正式环境上随时跟踪与调试生产故障. 依赖 在 pom.xml 中增加远程调试依赖. <plugins> &l ...

  9. Spring Boot 揭秘与实战(八) 发布与部署 - 开发热部署

    文章目录 1. spring-boot-devtools 实现热部署 2. Spring Loaded 实现热部署 3. 模板文件热部署 4. 源代码 Spring Boot 支持页面与类文件的热部署 ...

  10. Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制

    文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...

随机推荐

  1. WPF实现DoEvents

    WPF实现DoEvents 原创 2011年06月30日 12:23:00 标签: wpf / object 2550 static void DoEvents() { DispatcherFrame ...

  2. js中 offset /client /scroll总结

    offset家族(只能读取,不能操作): offsetLeft:元素的边框的外边缘距离与已定位的父容器(offsetparent)的左边距离(就是子元素左边框到父元素左边框的距离). offsetTo ...

  3. css选择器思维导图

  4. 深入理解java虚拟机---虚拟机工具jhat(十六)

    jhat JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器 ...

  5. tfs 2017 使用

    安装完成之后,创建一个项目管理. 初始化代码库 然后下载代理 (服务器)并设置.下载代理需要FQ才可以下载成功. 想要支持 netcore2.0  必须在代理服务器上安装 vs2017 跟netcor ...

  6. SUSE_LINUX 11 SP3 安装 IBM MQ 7.5

    0.环境介绍 mq7.5 suse linux 11 1. 上传安装包 上传安装包到 softWare/CI79IML.tar.gz 2. 安装证书 sh ./mqlicense.sh 输入 1 同意 ...

  7. UVALive - 6434 (贪心)

    题目链接:https://vjudge.net/problem/UVALive-6434 题意:给你n个数字,要你把这n个数字分成m组,每一组的消耗值定义为改组最大值和最小值之差,要求这m组的消耗值总 ...

  8. linux内核工作队列使用总结

    我总结出的内核工作队列中的4种用法 1. 使用系统的工作队列(不延迟) 1)定义一个工作: struct work_struct my_work; 2)编写一个函数: void my_work_fun ...

  9. <context:annotation-config/>和<mvc:annotation-driven/>及解决No mapping found for HTTP request with URI [/role/getRole] in DispatcherServlet with name 'springmvc-config'

    1:什么时候使用<context:annotation-config> 当你使用@Autowired,@Required,@Resource,@PostConstruct,@PreDest ...

  10. Debugging memory usage with kbmMW

    kbmMW的更高版本包含越来越多的功能,可用于通常的日志记录,审计,运行期发生异常时的堆栈跟踪以及现在的内存使用调试.这些功能实际上可用于任何应用程序,不仅限于基于kbmMW开发的多层应用系统.我已经 ...