SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例
作者:mmseoamin日期:2023-12-25

IDEA 启动SpringBoot的命令

C:\Users\Administrator\.jdks\corretto-17.0.8\bin\java.exe 
-XX:TieredStopAtLevel=1 
-Dspring.output.ansi.enabled=always 
-Dcom.sun.management.jmxremote 
-Dspring.jmx.enabled=true 
-Dspring.liveBeansView.mbeanDomain 
-Dspring.application.admin.enabled=true "
-Dmanagement.endpoints.jmx.exposure.include=*" 
"-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\lib\idea_rt.jar=5810:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\bin" 
-Dfile.encoding=UTF-8 
-classpath E:\JavaProjects\first-spring-boot\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-web.1.2\spring-boot-starter-web-3.1.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter.1.2\spring-boot-starter-3.1.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot.1.2\spring-boot-3.1.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-autoconfigure.1.2\spring-boot-autoconfigure-3.1.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging.1.2\spring-boot-starter-logging-3.1.2.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic.4.8\logback-classic-1.4.8.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core.4.8\logback-core-1.4.8.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j.20.0\log4j-to-slf4j-2.20.0.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-api.20.0\log4j-api-2.20.0.jar;C:\Users\Administrator\.m2\repository\org\slf4j\jul-to-slf4j.0.7\jul-to-slf4j-2.0.7.jar;C:\Users\Administrator\.m2\repository\jakarta\annotation\jakarta.annotation-api.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\Administrator\.m2\repository\org\yaml\snakeyaml.33\snakeyaml-1.33.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-json.1.2\spring-boot-starter-json-3.1.2.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind.15.2\jackson-databind-2.15.2.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations.15.2\jackson-annotations-2.15.2.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core.15.2\jackson-core-2.15.2.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8.15.2\jackson-datatype-jdk8-2.15.2.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310.15.2\jackson-datatype-jsr310-2.15.2.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names.15.2\jackson-module-parameter-names-2.15.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat.1.2\spring-boot-starter-tomcat-3.1.2.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core.1.11\tomcat-embed-core-10.1.11.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el.1.11\tomcat-embed-el-10.1.11.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket.1.11\tomcat-embed-websocket-10.1.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web.0.11\spring-web-6.0.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans.0.11\spring-beans-6.0.11.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-observation.11.2\micrometer-observation-1.11.2.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-commons.11.2\micrometer-commons-1.11.2.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc.0.11\spring-webmvc-6.0.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop.0.11\spring-aop-6.0.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-context.0.11\spring-context-6.0.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression.0.11\spring-expression-6.0.11.jar;C:\Users\Administrator\.m2\repository\org\slf4j\slf4j-api.0.7\slf4j-api-2.0.7.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-core.0.11\spring-core-6.0.11.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jcl.0.11\spring-jcl-6.0.11.jar 
com.zing.firstspringboot.FirstSpringBootApplication

这段代码是一个 Java 启动命令,用于运行 Spring Boot 应用程序。让我为你详细解释每个部分的含义:

  1. C:\Users\Administrator\.jdks\corretto-17.0.8\bin\java.exe: 这是 Java 的可执行文件路径,表示你正在使用 Amazon Corretto 17 版本的 Java 运行你的应用程序。

  2. -XX:TieredStopAtLevel=1: 这是 Java 虚拟机的参数,用于控制 JIT 编译的阶段。在这里,它将 JIT 编译限制为第一层。

  3. -Dspring.output.ansi.enabled=always: 设置 Spring 输出使用 ANSI 颜色。

  4. -Dcom.sun.management.jmxremote: 启用 Java 远程管理。

  5. -Dspring.jmx.enabled=true: 启用 Spring JMX(Java Management Extensions)。

  6. -Dspring.liveBeansView.mbeanDomain: 设置 Spring Live Beans View 的 MBean 域。

  7. -Dspring.application.admin.enabled=true: 启用 Spring 应用程序管理。

  8. "-Dmanagement.endpoints.jmx.exposure.include=*": 配置哪些管理端点会在 JMX 中公开。

  9. "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\lib\idea_rt.jar=5810:C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.3\bin": 配置 IntelliJ IDEA 的 Java 代理。

  10. -Dfile.encoding=UTF-8: 设置文件编码为 UTF-8。

  11. -classpath: 设置类路径,包含了你的应用程序的类文件以及各种依赖。

  12. com.zing.firstspringboot.FirstSpringBootApplication: 这是你的 Spring Boot 应用程序的入口类的完全限定名,用于告诉 Java 虚拟机从哪个类开始执行。

-Dspring.output.ansi.enabled=always 这类传入参数,代码中怎么获取到

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
    @Value("${spring.output.ansi.enabled}")
    private String ansiEnabled;
    // 省略其他代码
}

使用 IDEA 自带 Run/Debug configurations 启动

  1. 这个其他弱类型语言的人用的很少,源于弱类型语言的开发者大多没有经历从强类型语言转弱类型语言的过程,所以对调试不感兴趣
  2. 很多前端同学用了很久的 javascript,都不在谷歌浏览器devtools 打 debug,看调用栈,而是用 console.log 方式来调试,用 IDEA 的 debug 可以调试 webpack 的打包过程,这个对于快速掌握 webpack 打包过程非常有用;
  3. PHP 开发者绝大部分都不知道远程调试是什么,若能突破这个概念基本上都是高级程序员了,对于弱类型语言,如果不调试,又加上没有类型提示,是很难搞明白程序的执行过程的;
  4. 对于弱类型语言开发人员不喜欢调试的原因一是主流教程不教,二是自我摆烂,使用弱类型语言的一批人本身就是冲着简单编写来的,不想去学习更深的知识,所以鄙视链也是起源的,只不过鄙视到后期,就变成了鄙视语言了。
  5. Run/Debug 执行时可以看到在 run 控制台中有相应的执行脚本,这些脚本参数人手动敲是无法想象的,参考上面 IDEA 启动SpringBoot的命令 这个就能看出来,这些参数平时我们也不会用,了解这些可有助于更快明白源代码所起到的作用——直观、简化、有条理;
SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第1张
windows 下 2021 版本的 IDEA 配置界面

2022版本的界面,点击Modify options可以添加VM options栏

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第2张
这是 mac 中在脚本文件右键调用 Debug 的入口截图
SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,IDEA run/debug 截图,第3张
这是 mac 上的 phpstorm run/debug 编辑配置的入口截图
SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第4张
windows IDEA 2022 配置页面截图

-Dspring.output.ansi.enabled=always 这类传入参数,代码中怎么获取到

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
    @Value("${spring.output.ansi.enabled}")
    private String ansiEnabled;
    // 省略其他代码
}

以jar包方式启动不同的环境案例

Idea 内置Maven的查找和配置

有两种方式配置maven

  1. 下载 maven 这个有很多教程了,这里不做赘述;
  2. 直接使用Idea的Maven进行配置,这里给idea的maven进行配置,idea内置maven3路径需要通过everything来找一下,搜索mvn,会找到 plugins 的路径,Maven 作为 IDEA的插件使用,所以下载不了多个 Maven 版本,实际创建项目时,Maven 版本也不让选择, 右键打开路径

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第5张

把上面的路径拷贝进来,到环境变量中去配置

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第6张

用MAVEN_HOME的方式非常好,可以非常方便的切换MVN的版本,以后更换Maven 版本时就不用跑到 Path 里面再设置一下了,这个挺方便,以前没太注意这一点

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第7张

本地没配置JAVA_HOME时,mvn --version 会提示你找不到JAVA_HOME 路径,而且powershell控制台也找不到mvn命令,等你设置好了JAVA_HOME 之后,则powershell也能识别mvn了,这个挺奇怪的,我暂且理解为mvn需要java环境才能运行,这里我依然使用的是idea自带的jdk-17

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第8张

用户变量和系统变量都配置上去

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第9张

将 springboot 打成 jar 包 在 cmd 中进行启动 并设置启动环境

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第10张

然后选中该jar文件,右键单击打开面板选择Show in Explorer 即可跳转到该文件位置上,

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第11张

在路径栏输入cmd 然后点击回车,直接在cmd打开

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第12张

输入以下命令,可以启动dev环境

java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第13张

SpringBoot 学习(04):Idea 中控制启动命令的详细过程 环境区分案例,第14张

 Python/PHP 思维学 SpringBoot 系列探索

学习知识都是环环相扣,我们先看看之前探索过什么

  1. SpringBoot 学习(01): javac、src/main/java目录、Maven与pip 弱类型语言为何没有子模块编译_森叶的博客-CSDN博客
  2. SpringBoot 学习(02): 从嵌入式系统到嵌入式Servlet SpingBoot 的进化之路_森叶的博客-CSDN博客
  3.  SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同_森叶的博客-CSDN博客