【微服务核心】Spring Boot

Spring Boot

文章目录

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

1. 简介

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

2. 开发步骤

  1. 创建Maven工程

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

  3. 编写启动配置类

    java 复制代码
    @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. 自定义拦截器:
java 复制代码
@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. 配置拦截器:
java 复制代码
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor ;

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

5. 整合 Druid 和 Mybatis

  1. 导入依赖

    xml 复制代码
    <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. 配置文件

    yaml 复制代码
    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. 配置启动类

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

java 复制代码
@Data
public class Schedule {
	private Integer id;
	private String title;
	private Integer age;
}
java 复制代码
@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));
	}
}
java 复制代码
public interface ScheduleMapper {
	List<Schedule> selectList(Schedule schedule);
}
xml 复制代码
<?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 注解即可

java 复制代码
@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项目是无法找到应用程序的入口点,因此导致无法运行

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

命令启动和参数说明:

powershell 复制代码
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
相关推荐
欢乐少年19041 小时前
SpringBoot集成Sentry日志收集-3 (Spring Boot集成)
spring boot·后端·sentry
夏天的味道٥2 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
冰糖码奇朵4 小时前
大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
java·数据库·sql·mysql
好教员好4 小时前
【Spring】整合【SpringMVC】
java·spring
浪九天5 小时前
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
java·后端·spring
堕落年代6 小时前
Maven匹配机制和仓库库设置
java·maven
功德+n6 小时前
Maven 使用指南:基础 + 进阶 + 高级用法
java·开发语言·maven
随风九天6 小时前
Spring Boot + MyBatis + MySQL:快速搭建CRUD应用
spring boot·mysql·mybatis
香精煎鱼香翅捞饭6 小时前
java通用自研接口限流组件
java·开发语言
ChinaRainbowSea6 小时前
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
java·linux·运维·服务器·docker·架构