跳转至
本文阅读量

1. 6. ddd

1.1 7. 异步任务执行和调度

1.2 8. 测试(Testing)

几个核心概念

  • @SpringBootTest
  • @MockMvc
  • @MockBean

1.3 9. 创建自己的自动配置(Auto-Configuration)

核心类或注解

  • @AutoConfiguration

  • @Conditional

    • @ConditionalOnClass
    • @ConditionalOnMissingClass

    • @ConditionalOnBean

    • @ConditionalOnMissingBean

    • @ConditionalOnProperty

    • @ConditionalOnResource

    • @ConditionalOnWebApplicatio

    • @ConditionalOnNotWebApplication
    • @ConditionalOnWarDeployment

    • @ConditionalOnExpression

  • @AutoConfigureBefore

  • @AutoConfigureAfter

1.3.1 9.5 创建自己的 starter

1.3.1.1 命名规则

  • 不要使用 spring-boot 作为开始
  • 使用如下形式 acme-spring-boot-starter

1.4 10. Kotlin 的支持

1.5 8. Developing Tools

1.5.1 Restart vs Reload

1.5.2 远程调试

首先在远程 SpringBoot 应用中不能排除(需要包含) devtool

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

1.6 参数及配置文件优先级

传递参数的方式有多种:

  • 配置文件
  • Java 系统属性
  • 命令行参数
  • 环境变量

数值越高,优先级越大;高优先级的会覆盖低优先级的

方式 优先级 备注
命令行参数 11
Java 系统属性 6
环境变量 5
配置文件 3

示例

命令行参数

java -jar target/service-a-0.0.1-SNAPSHOT.jar --spring.cloud.nacos.config.server-addr=127.0.0.3:8848

Java 系统属性

java -Dspring.cloud.nacos.config.server-addr=127.0.0.2:8848 -jar target/service-a-0.0.1-SNAPSHOT.jar 

环境变量

export SPRING_CLOUD_NACOS_CONFIG_SERVERADDR=127.0.0.4:8848
java -jar target/service-a-0.0.1-SNAPSHOT.jar

配置文件

spring:
  application:
    name: service-a
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
      discovery:
        server-addr: 127.0.0.1:8848

参考:

java 命令行
  • -Dxxx=yyy虚拟机参数
    • -D 参数要在 -jar 之前 --xxx=yyy命令行参数
使用原则

总的来说,-D用于设置JVM系统属性,而–用于应用程序级别的参数。在实际应用中,开发人员可以根据具体需求选择适当的选项。历史上,-D主要用于设置系统属性,而–主要用于应用程序参数,但这并非绝对规定,具体的使用方式可能取决于应用框架或库的设计。

1.7 HowTo

1.7.1 如何排除某项的自动配置

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication {

}

1.8 参考