我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaSpringboot重要知识点整理汇总

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaSpringboot重要知识点整理汇总

1、springboot controller 单例

Spring中 controller默认是单例的,因为单例所以不是线程安全的。

所以需要注意下面几点

  1. 不要在Controller中定义成员变量,可能会造成数据混乱。
  2. 万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式。
  3. 在Controller中使用ThreadLocal变量解决多线程问题

spring bean作用域:

singleton:单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理;

prototype:原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理;

2、Springboot 环境变量配置

在开发的过程中不是所有的配置文件都可以写入yaml或者properties文件中,可能需要动态的从容器中读取,看下如何配置

现在看看如果我们使用环境变量的方式来配置我们的参数,如下:


spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${DEMO_APP_JDBC_URL:jdbc:mysql://127.0.0.1/demo?serverTimezone=Asia/Shanghai}
    username: ${DEMO_APP_JDBC_USERNAME:demo}
    password: ${DEMO_APP_JDBC_PASSWORD:demo}
    hikari:
      maximum-pool-size: ${DEMO_APP_JDBC_POOL_MAX_SIZE:30}
      max-lifetime: ${DEMO_APP_JDBC_POOL_MAX_LIFE_TIME:60000}
      minimum-idle: ${DEMO_APP_JDBC_POOL_MIN_SIZE:5}

以上使用${ENV:defauleValue}的形式配置了我们应用的相关参数,如果我们的运行环境配置了上面用到的环境变量,则使用环境变量中的配置,如果没有配置则使用默认的,比如我配置了环境变量DEMO_APP_JDBC_POOL_MAX_SIZE = 100,则应用程序中的连接池最大连接数就变成100了。

配合docker 食用更香哦

3、restful 接口

现在的应用基本上都是前后端分离的,所以后端接口基本上都是restful接口,怎么做呐?

在controller 的class 上增加注解 @RestController,就会生成restful接口

@RestController的作用 相当于@Controller + @ResponseBody


@RestController
@RequestMapping("/api/v1/h5Adapter")
@Api(description = "server-h5-adapter")
public class BaMessageConverterController {

4、@ResponseBody 和 @RequestBody 的区别

@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

5、@Schedule

定时任务几乎是项目的标配了, SpringBoot内置了Sping Schedule定时框架,通过注解驱动方式添加所注解方法到定时任务,根据配置定时信息定时执行

主要是以下两步:

1、开启定时器


@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
@EnableCircuitBreaker
@EnableCaching
@EnableScheduling
public class Application {
​
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
​

2、在方法上加上注解


    //每天凌晨1点执行
    @Scheduled(cron = "0 0 1 * * ?")
    public void doTask() {
    
    }

6、async异步调用

异步调用主要处理一些不要求及时返回的任务,springboot提供了支持

SpringBoot中使用 async实现异步调用

基于注解的使用方式包括如下三步:

  1. 启动类加上@EnableAsync(也可以在配置类中加上)
  2. 配置类中完成异步线程池的导入(这一个可以不要,采用默认的)
  3. 需要异步调用的方法加上@Async

定义线程池


package com.aispeech.bj.bams.msproduct.config;
​
import org.springframework.context.annotation.AdviceMode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
​
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
​
@Configuration
@EnableAsync(mode = AdviceMode.ASPECTJ)
public class ExecutorConfig {
​
    
    private int corePoolSize = 10;
    
    private int maxPoolSize = 300;
    
    private int queueCapacity = 10;
​
    @Bean
    public Executor myAsync() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setThreadNamePrefix("MyExecutor-");
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
​
}
​

使用异步 @Async 注解


  @Async("myAsync")
    void notifyProductInfo(String thirdPartyId, ThirdPartyProductVO thirdPartyProductVO) {}

7、request 的获取方式和线程安全

request 是来自前端的请求,怎么才能安全的获取request,线程安全的request 才能取出正确的数据,主要有下面几种方式

1、静态类获取


HttpServletRequest request = ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();

2、函数参数

Controller中获取request对象后,如果要在其他方法中(如service方法、工具类方法等)使用request对象,需要在调用这些方法时将request对象作为参数传入

此时request对象是方法参数,相当于局部变量,毫无疑问是线程安全的。


@RequestMapping("/test")
    public void test(HttpServletRequest request) {
        ......
    }

3、自动注入


    @Autowired
    private HttpServletRequest request; //自动注入request

对象是线程局部变量(ThreadLocal),因此request对象也是线程局部变量;这就保证了request对象的线程安全性。

不会有线程安全问题的 实际上spring 注入的是一个代理类

到此这篇关于Java Springboot 重要知识点整理汇总的文章就介绍到这了,更多相关Java Springboot 知识点汇总内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaSpringboot重要知识点整理汇总

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL必备的常见知识点汇总整理

本文实例总结了MySQL必备的常见知识点。分享给大家供大家参考,具体如下:最近在整理 sql 的时候发现一份优秀的笔记,是原作者学习 sql 所做的笔记,分享这份总结给大家,对大家对 sql 的可以来一次全方位的检漏和排查,感谢原作者 hj
2022-05-28

2023上半年软考重要知识点(各科目汇总)

  为帮助考生备考2023上半年软考,编程学习网软考学院为大家整理了2023上半年软考重要知识点的内容(各科目汇总),希望对大家掌握软考考试知识点会有帮助。  为帮助考生了解2023上半年软考各科目考试知识点,编程学习网软考学院为大家整理了2023上半年软考重要知识点(各科目汇总),希望对大家备考会有帮助。 信息系统项目管理
2023上半年软考重要知识点(各科目汇总)
2024-04-19

python中的编码知识整理汇总

问题 在平时工作中,遇到了这样的错误:UnicodeDecodeError: 'ascii' codec can't decode byte想必大家也都碰到过,很常见 。于是决定对python的编码做一个整理和学习。 基础知识 在pytho
2022-06-04

重复数据删除知识点大汇总

这篇文章主要讲的是重复数据的概念原理和重复数据删除技术的使用方法和重复数据删除知识点的大汇总。重复数据删除是一个很热门的存储技术哦!。希望本篇文章对你们有用,大家要认真看噢~今天的分享就到这了,也不知道对大家有用不,如果有用的话,那就点个赞吧!如果哪部分知识点欠缺,欢迎各位朋友进行补充哦~更多精彩的内容,就在编程学习网教育,还不赶紧行动?等着你们哟~
重复数据删除知识点大汇总
2024-04-23

2024上半年软考重要知识点100条(各科目汇总)

  为帮助考生备考2024上半年软考,编程学习网软考学院为大家整理了2024上半年软考重要知识点100条的内容(各科目汇总),希望对大家掌握软考考试知识点会有帮助。  为帮助考生了解2024上半年软考各科目考试知识点,编程学习网软考学院为大家整理了2024上半年软考重要知识点100条(各科目汇总),希望对大家备考会有帮助。对应
2024上半年软考重要知识点100条(各科目汇总)
2024-04-19

【整理汇总】45+个Vue面试题,带你巩固知识点!

本篇文章给大家总结分享一些Vue面试题(附答案解析),带你梳理基础知识,增强Vue知识储备,值得收藏,快来看看吧!
2023-05-14

项目管理的重要知识点

  项目整体管理,体现完整和善始善终的意思,所以整体管理是唯一贯穿启动到收尾所有过程组的知识体系,从项目启动到项目收尾项目整体管理都得管,对于微型项目来讲,其它项目知识体系或过程组都可以裁剪,但整体管理则是最小的过程集,每一个过程对项目来讲都非常重要。  在建立组织结构时,必须注意以下五个基本原则:一是组织结构必须反映
项目管理的重要知识点
2024-04-17

python文件操作相关知识点总结整理

本文汇总了python文件操作相关知识点。分享给大家供大家参考,具体如下: 总是记不住API。昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块
2022-06-04

2023上半年软考重要知识点10G资料包免费领取(各科目汇总)

  为帮助考生备考2023上半年软考,编程学习网软考学院为大家整理了2023上半年软考重要知识点10G学习资料的内容(各科目汇总),希望对大家掌握软考考试知识点会有帮助。  为帮助考生了解2023上半年软考各科目考试知识点,编程学习网软考学院为大家整理了2023上半年软考重要知识点10G学习资料(各科目汇总),希望对大家备考会
2023上半年软考重要知识点10G资料包免费领取(各科目汇总)
2024-04-19

2023年上半年网络管理员重要知识点

  编程学习网软考学院为2023年上半年网络管理员考生整理了2023年上半年网络管理员重要知识点的内容,希望能帮助考生掌握网络管理员的重要知识点。  2023年上半年网络管理员重要知识点由编程学习网软考学院整理,因篇幅有限,本文只展示了部分内容,完整内容请考生点击资料下载查看免费领取10G学习资料。  2023年上半年网络管理
2023年上半年网络管理员重要知识点
2024-04-19

2023年系统规划与管理师重要知识点

  编程学习网软考学院为2023年系统规划与管理师考生整理了2023年系统规划与管理师重要知识点的内容,希望能帮助考生掌握系统规划与管理师的重要知识点。  2023年系统规划与管理师重要知识点由编程学习网软考学院整理,因篇幅有限,本文只展示了部分内容,完整内容请考生点击资料下载查看免费领取10G学习资料。  2023年系统规划
2023年系统规划与管理师重要知识点
2024-04-19

可能是全网最好的MySQL重要知识点/面试题总结

文末有公众号二维码,欢迎关注获取笔主最新更新文章,并可免费获取笔主总结的《Java面试突击》以及Java工程师必备学习资源。 @[toc] 什么是MySQL? MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且
可能是全网最好的MySQL重要知识点/面试题总结
2022-02-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录