【微服务核心】Spring Boot

Spring Boot

文章目录

  • Spring Boot
  • 1. 简介
  • 2. 开发步骤
  • 3. 配置文件
  • 4. 整合 Spring MVC 功能
  • 5. 整合 Druid 和 Mybatis
  • 6. 使用声明式事务
  • 7. AOP整合配置
  • 8. SpringBoot项目打包和运行

1. 简介

SpringBoot,开箱即用,设置合理的默认值,同时也可以根据需求进行适当的调整。遵从约定大于配置,基本不需要主动编写配置类、也不需要 XML 配置文件。

2. 开发步骤

  1. 创建Maven工程

  2. 添加依赖,使用 spring-boot-starter-parentspring-boot-starter-web

  3. 编写启动配置类

    @SpringBootApplication
    public class MainApplication {
        public static void main(String[] args) {
            SpringApplication.run(MainApplication.class,args);
        }
    }
    
  4. 编写处理器 Controller

通过上述步骤,即可直接根据启动配置类直接启动

总结:

  1. spring-boot-starter-parent :父项目中把常见的依赖版本都声明好了

  2. spring-boot-starter-webStarter 启动器依赖,是一系列预定义依赖项的集合,旨在简化Spring应用程序的配置和构建过程,

    Spring Boot提供了许多预定义的Starter,例如spring-boot-starter-web用于构建Web应用程序,spring-boot-starter-data-jpa用于使用JPA进行数据库访问,spring-boot-starter-security用于安全认证和授权等等,Spring boot 提供的全部启动器地址:

    https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

  3. @SpringBootApplication : 组合注解,功效由具体的子注解实现,含有的子注解及主要作用有:

    • @EnableAutoConfiguration :启用Spring Boot的自动配置机制
    • @ComponentScan :用于自动扫描并加载应用程序中的组件
    • @Configuration :将被标注的类声明为配置类。配置类可以包含Spring框架相关的配置、Bean定义,以及其他的自定义配置

3. 配置文件

默认读取,命名 application 后缀 .properties / .yaml / .yml 的配置文件,在配置文件中配置的属性可使用 @Value("${变量key}") 直接读取,集合定义用 , 隔开不同元素

  • @ConfigurationProperties :批量配置文件属性注入,指定 prefix 属性会将配置文件中配置的属性按属性名注入,底层依赖于 set方法 ,如无 set方法 将不会注入,而 @Value 不受此限制

多环境配置:不同环境配置可使用 application-dev.ymlapplication-uat.ymlapplication-prd.yml 命名来区分,在启动时指定 spring.profiles.activedevuatprd 即可。

指定活跃环境后有重叠属性则对应配置文件优先生效,无重叠属性时,application.yml 中的配置会生效。 spring.profiles.active 可同时指定多个,则对应配置文件都会生效,但一般只会按不同环境区分而只激活对应一个环境的配置文件。

配置文件中属性参考可看官方 Application Properties ,下面是其中 web 配置的 Server Properties 链接,也可点击进入参考其他属性:

https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.server

常用参数:

  • server.port :指定应用程序的HTTP服务器端口号,默认 8080
  • server.servlet.context-path :设置应用程序的上下文路径
  • spring.resources.static-locations :配置静态资源的位置,设置了后会覆盖默认值。默认包含 classpath:/META-INF/resources/ , classpath:/resources/** , classpath:/static/** , classpath:/public/

4. 整合 Spring MVC 功能

基础用法如第2开发步骤所示,关于拦截器及其他功能,则还像之前一样使用,如拦截器,增加组件自定义拦截器,增加配置类,注入对应拦截器

  1. 自定义拦截器:
@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor拦截器的preHandle方法执行....");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor拦截器的postHandle方法执行....");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor拦截器的afterCompletion方法执行....");
    }
}
  1. 配置拦截器:
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor ;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

5. 整合 Druid 和 Mybatis

  1. 导入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-3-starter</artifactId>
            <version>1.2.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
    </dependencies>
    
  2. 配置文件

    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        username: root
        password: root
        url: jdbc:mysql:///database
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    mybatis:
      configuration:
        auto-mapping-behavior: full
        map-underscore-to-camel-case: true
        log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
      type-aliases-package: com.springboot.pojo
      mapper-locations: classpath:/mappers/*.xml
    
  3. 配置启动类

    @MapperScan("com.springboot.mapper") // 扫描 mapper 接口
    @SpringBootApplication
    public class SpringBootApplicationMain {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringBootApplicationMain.class);
    	}
    }
    
  4. 其他类及目录结构

在这里插入图片描述

@Data
public class Schedule {
	private Integer id;
	private String title;
	private Integer age;
}
@RequestMapping("schedule")
@RestController
public class ScheduleController {

	@Autowired
	private ScheduleMapper scheduleMapper;

	@RequestMapping("query")
	public Result<List<Schedule>> query(@RequestBody(required = false) Schedule query) {
		return new Result<>(scheduleMapper.selectList(query));
	}
}
public interface ScheduleMapper {
	List<Schedule> selectList(Schedule schedule);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.mapper.ScheduleMapper">
    <select id="selectList" resultType="schedule">
        select * from schedule
    </select>
</mapper>

6. 使用声明式事务

引入了 spring-boot-starter-jdbc 即可直接使用

7. AOP整合配置

需引入依赖 spring-boot-starter-aop ,之后直接使用 aop 注解即可

@Aspect
@Component
@Slf4j
public class MyAdvice {

	@Pointcut("execution(* com.springboot.controller.*.*(..))")
	public void pointcut() {

	}

	@Around("pointcut()")
	public Object around(ProceedingJoinPoint proceedingJoinPoint) {
		try {
			log.info("入参:{}", proceedingJoinPoint.getArgs());
			Object proceed = proceedingJoinPoint.proceed();
			log.info("出参:{}", proceed);
			return proceed;
		} catch (Throwable t) {
			log.error("异常", t);
			throw new RuntimeException(t);
		}
	}
}

8. SpringBoot项目打包和运行

在Spring Boot项目中添加spring-boot-maven-plugin插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin插件配置,使用常规的java -jar命令来运行打包后的Spring Boot项目是无法找到应用程序的入口点,因此导致无法运行

<!--    SpringBoot应用打包插件-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

命令启动和参数说明:

java -jar  [选项] [参数] <jar文件名>
  1. -D<name>=<value>:设置系统属性,可通过 System.getProperty() 方法在程序中获取该属性值。如:java -jar -Dserver.port=8080 myapp.jar ,多参数可以 -Dserver.port=8080 -Dspring.profiles.active=prd
  2. -X:设置JVM参数,例如内存大小、垃圾回收策略等。常用的选项包括:
    • -Xmx<size>:设置JVM的最大堆内存大小,例如 -Xmx512m 表示设置最大堆内存为512MB
    • -Xms<size>:设置JVM的初始堆内存大小,例如 -Xms256m 表示设置初始堆内存为256MB
  3. -Dspring.profiles.active=<profile>:指定Spring Boot的激活配置文件,可以通过application-<profile>.propertiesapplication-<profile>.yml文件来加载相应的配置。例如:java -jar -Dspring.profiles.active=dev myapp.jar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/272655.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-单例模式(结合JVM基础知识)

1.定义介绍 所谓单例模式&#xff0c;是指在程序运行时&#xff0c;整个JVM中只有一个该类的实例对象 2. 单例模式的优点 复用性高&#xff0c;节省内存资源。类的加载、连接、初始化、使用都要占用虚拟机内存空间&#xff0c;因此&#xff0c;频繁创建对象会造成资源浪费&a…

文件夹共享(普通共享和高级共享的区别)防火墙设置(包括了jdk安装和Tomcat)

文章目录 一、共享文件1.1为什么需要配置文件夹共享功能&#xff1f;1.2配置文件共享功能1.3高级共享和普通共享的区别&#xff1a; 二、防火墙设置2.1先要在虚拟机上安装JDK和Tomcat供外部访问。2.2设置防火墙&#xff1a; 一、共享文件 1.1为什么需要配置文件夹共享功能&…

IDEA使用之打包Jar,指定main方法

前言 在某些场景&#xff0c;可能会遇到将非Spring项目打包的情况&#xff0c;我们不需要Tomcat服务器部署&#xff0c;只需要执行指定的main方法即可&#xff0c;这种情况打包成jar就比较方便了。 操作步骤 打包结果默认在项目的out目录下 使用 java -jar xxx.jar

企业微信自建应用获取用户信息

一.前言 开发企业微信自建应用的时候难免会有获取企微个人信息的业务需求,这篇博客将详细说明企微自建应用获取userId的具体流程. 二.基本概念介绍 2.1 corpid 每个企业都拥有唯一的corpid&#xff0c;获取此信息可在管理后台“我的企业”&#xff0d;“企业信息”下查看“企业…

(1)llvm学习词法分析器

首先是Token取值 下面两个值记录当前识别出来的token单元的字面量 首先是空字符&#xff0c;然后如果是空字符&#xff0c;就读下一个字符&#xff0c;知道这个字符不是空为止&#xff0c;也就是LastChar出循环的时候是下一个不为空的字符,下面两个值是记录实际值用于后续处理 …

VR渲染器怎么用之自适应图像采样器,可解决渲染黑图问题

大家好&#xff0c;相信刚接触到vr渲染器时&#xff0c;会vr的图像采样器感到迷茫&#xff0c;如何使用图像采样器&#xff1f;图像采样器有何用呢&#xff1f; 今天便为大家讲解vr中的自适应DMC图像采样器的运用。 说明&#xff1a;高版本渲染器中的渲染块整合了原有的“固定…

PYTHON入门级游戏开发:宇宙飞船游戏两万字详析

手讲解超详细python入门游戏项目‘打外星飞船’手把&#xff08;一&#xff09; 由于内容比较多&#xff0c;这里会分为五篇文章来讲解&#xff0c;从页面的创建、飞船控制、射击、外星人创建、射杀外星人五片来展开。 做一个窗口和设置响应用户 import sysimport pygame&qu…

STM32逆变器方案

输入电压&#xff1a; 额定输入电压&#xff1a;DC110V 输入电压范围&#xff1a;DC77-137.5V 额定输出参数 电压&#xff1a;200V5%&#xff08;200VAC~240VAC 可调&#xff09; 频率&#xff1a; 42Hz0.5Hz&#xff08;35-50 可调&#xff09; 额定输出容量&#xff1a;1…

CentOS7搭建Elasticsearch与Kibana服务

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2拉取elasticsearch镜像 docker pull elasticsearch:7.11.1 1.3.运行 运行docker命令&#xff0c;部…

致远互联FE协作办公平台 editflow_manager.jsp SQL注入漏洞

漏洞描述 致远互联FE协作办公平台是一款为企业提供全方位协同办公解决方案的产品。它集成了多个功能模块&#xff0c;旨在帮助企业实现高效的团队协作、信息共享和文档管理。致远互联FE协作办公平台editflow_manager存在sql注入漏洞&#xff0c;攻击者可以获得敏感信息。 资产…

Vue框架引入Element-Ui

首先已经创建好了 Vue 框架&#xff0c;安装好了 node.js。 没有完成的可按照此博客搭建&#xff1a;搭建Vue项目 之后打开终端&#xff0c;使用命令。 1、命令引入 npm i element-ui -S2、package.json 查看版本 在 package.json 文件里可查看下载好的依赖版本。 3、在 ma…

Selenium自动化测试-设置元素等待

selenium中有三种时间等待&#xff1a; 强制等待&#xff1a;sleep 隐式等待&#xff1a;implicitly_wait 显示等待&#xff1a;WebDriverWait 1.sleep 让程序暂停运行一定时间&#xff0c;等待时间到达后继续运行。 使用sleep&#xff0c;需先导入time模块&#xff0c;im…

002、使用 Cargo 创建新项目,打印 Hello World

1. Cargo 简介 Cargo 是 Rust 的构建系统和包管理工具&#xff0c;比如构建代码、下载依赖的库、构建这些库等等。在安装 Rust 时&#xff0c;Cargo也会一起安装。 2. 创建新项目的具体步骤 步骤1&#xff1a; 我们在桌面新建一个文件夹&#xff0c;用于存放后面练习用的代码文…

vector的erase()方法遍历删除元素迭代器失效问题、及删除最后一个元素迭代器失效问题)

1.删除指定范围的元素 vector删除元素之pop_back(),erase(),remove() 向量容器vector的成员函数pop_back()可以删除最后一个元素. 而函数erase()可以删除由一个iterator指出的元素&#xff0c;也可以删除一个指定范围的元素。 还可以采用通用算法remove()来删除vector容器中的…

数字电子技术 一天速成

文章目录 一、数制与编码1. 数制转换2. BCD编码 二、逻辑代数1. 常见逻辑运算及逻辑门 三、化简逻辑表达式1. 卡诺图 求 表达式2. 表达式 画 卡诺图3. 卡诺图 化简 表达式4. 公式法 化简 表达式 ⭐⭐5. 表达式 求 反函数6. 卡诺图 求 反函数 四、组合逻辑电路的分析和设计1. 逻…

Mysql(5日志备份恢复)

一.日志管理 MySQL 的日志默认保存位置为 /usr/local/mysql/data 先看下mysql的日志文件有无&#xff1a; 修改配置文件添加&#xff1a;错误日志&#xff0c;用来记录当MySQL启动、停止或运行时发生的错误信息&#xff0c;默认已开启 修改配置文件添加&#xff1a;通用查…

.json文件转为.dll文件后还能读取吗?

(只是修改了后缀名而已&#xff0c;做一个伪装&#xff09; 测试&#xff1a; QFile file(QApplication::applicationDirPath() "/config.dll");qDebug()<<QApplication::applicationDirPath() "/config.dll";if (file.open(QIODevice::ReadOnly))…

设计模式--抽象工厂模式

实验4&#xff1a;抽象工厂模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解抽象工厂模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用抽象工厂模式解决实际问题。 [实验任务]&#xff1a;人与肤色 使用抽象…

Netty—Reactor线程模型详解

文章目录 前言线程模型基本介绍线程模型分类Reactor线程模型介绍Netty线程模型&#xff1a; 传统阻塞IO的缺点Reactor线程模型单Reactor单线程模式单Reactor多线程模式主从Reactor多线程Reactor 模式小结 Netty 线程模型案例说明&#xff1a;Netty核心组件简介ChannelPipeline与…

服务运营 | 年终回顾:服务运营为您服务

文章作者&#xff1a;李舒湉&#xff0c;蔡君洋, Guo&#xff0c;陈盈鑫&#xff0c;王畅 编者按 在服务运营板块成立的第一年&#xff0c;给大家带来我们这一年中原创文章的年终回顾。迈向2024&#xff0c;服务运营继续为您服务 在服务运营板块成立的第一年&#xff0c;明确板…