SpringBoot系列01-Hello SpringBoot

SpringBoot作为Spring的子项目,提供了一种快速配置Spring的方式,极大简化了开发流程。本文介绍了SpringBoot的核心功能,包括独立运行Spring项目、内嵌Servlet容器、提供Starter简化Maven配置及自动配置SpringBean。并通过具体步骤演示了如何从零开始创建并运行一个SpringBoot项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot 是什么?

Spring BootSpring的子项目,他提供Spring 的引导(Boot )的功能。

通过 Spring Boot ,我们可以快速配置 Spring 项目,引入各种 Spring MVC、Spring Transaction、Spring AOP、MyBatis 等等框架,而无需不断重复编写繁重的 Spring 配置,降低了 Spring 的使用成本。

  • Spring Boot 提供了各种 Starter 启动器,提供标准化的默认配置。
    • spring-boot-starter-web 启动器,可以快速配置 Spring MVC 。
    • mybatis-spring-boot-starter 启动器,可以快速配置 MyBatis 。

Spring Boot 的核心功能

1、独立运行 Spring 项目

Spring Boot 可以以 jar 包形式独立运行,运行一个 Spring Boot 项目只需要通过 java -jar xx.jar 来运行。

2、内嵌 Servlet 容器

Spring Boot 可以选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。

3、提供 Starter 简化 Maven 配置

  • Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载。例如,当你使用了 spring-boot-starter-web ,会自动加入如下依赖:
<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.0.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.0.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.0.1.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.9.Final</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.5.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.5.RELEASE</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

4、自动配置 Spring Bean

Spring Boot 检测到特定类的存在,就会针对这个应用做一定的配置,进行自动配置 Bean ,这样会极大地减少我们要使用的配置。
当然,Spring Boot 只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean ,而 Spring Boot 没有提供支持,则可以自定义自动配置进行解决。

SpringBoot简单开始

1、新建一个Maven项目
2、在pom.xml中添加一下依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <skipTests>true</skipTests>
    </properties>

    <dependencies>
        <!-- 默认就内嵌了Tomcat 容器,如需要更换容器也极其简单-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 测试包,当我们使用 mvn package 的时候该包并不会被打入,因为它的生命周期只在 test 之内-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 编译插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

3、新建FirstApplication类文件

@SpringBootApplication
@RestController
public class FirstApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstApplication.class,args);
    }

    //GetMapping相当于:@RequestMapping(method = RequestMethod.GET)
    @GetMapping("/hello")
    public String hello(){
        return "Hello SpringBoot";
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx){
        return args -> {
            System.out.println("SpringBoot 默认为我们提供的 Bean:");
            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            // 此处使用java8的stream相关知识
            Arrays.stream(beanNames).forEach(System.out::println);
        };
    }
}

4、右键运行此java类,在浏览器中输入:http://localhost:8080/hello
5、运行结果图如下:
运行结果示意图

<think>嗯,用户遇到了Docker构建时的语法错误,具体是在使用--build-arg参数时出现了问题。我需要先理解他的具体使用场景和可能出错的地方。他提到的是syntax error,可能是在命令行中的参数格式不正确,或者在Dockerfile中的定义有问题。 首先,我应该回顾Docker的--build-arg的正确用法。构建参数需要在docker build命令中指定,格式是--build-arg <变量名>=<值>。同时,这些参数在Dockerfile中需要用ARG指令来声明。用户可能在命令行中漏掉了等号,或者变量名和值之间有空格,导致语法错误。 比如,用户可能写成了--build-arg NAME VALUE,而没有用等号连接,这样会引发错误。另外,如果Dockerfile中没有对应的ARG指令,即使命令行传入了参数,构建时也会被忽略,但不会直接导致语法错误。所以更可能的是命令行的参数格式不对。 接下来,用户的例子中有提到springboot-hello-webapp,这可能是一个Spring Boot项目,构建时需要传递一些参数,比如版本号、依赖路径等。需要检查他是否在Dockerfile中正确使用了ARG,并在后续的步骤中用ENV或直接使用这些变量。 此外,用户可能混淆了构建参数和其他docker build的选项,比如路径的位置是否正确。例如,docker build命令最后的.表示上下文路径,如果用户遗漏了这个点,或者将--build-arg放在错误的位置,也会导致语法错误。 还需要考虑环境变量的引用方式,在命令行中使用变量时,如果值包含空格,是否用引号包裹。例如,--build-arg APP_NAME="My App" 如果值有空格,必须用引号,否则会解析错误。 另外,用户可能没有正确安装Docker版本,或者使用了过时的版本导致某些语法不被支持。根据引用[1],Docker Engine >=19.03和Compose >=3.8,所以需要确认用户的Docker版本是否符合要求,不过这可能不是语法错误的主要原因。 最后,需要给出具体的正确用法示例,帮助用户对照检查自己的命令。比如正确的命令应该是docker build --build-arg VERSION=1.0.0 -t springboot-hello-webapp .,并确保Dockerfile中有ARG VERSION的定义,并且后面有使用这个变量,比如在ENV或RUN指令中。 可能还需要提醒用户其他注意事项,比如构建参数的作用域仅在构建过程中,区分ARG和ENV的不同,以及如何避免在构建时传递敏感信息等。</think>### 关于Docker构建命令中`--build-arg`参数的使用 #### 1. **语法错误原因分析** 您的语法错误可能由以下原因导致: - **参数格式错误**:`--build-arg`的语法必须为`--build-arg <变量名>=<值>`,若缺少等号或值包含空格未加引号会报错。例如: ```bash # 错误示例(缺少等号) docker build --build-arg VERSION 1.0.0 -t springboot-hello-webapp . # 正确示例 docker build --build-arg VERSION=1.0.0 -t springboot-hello-webapp . ``` - **未在Dockerfile中声明参数**:若在命令行传递了参数,但Dockerfile中未使用`ARG`指令声明,会导致参数被忽略(但不会直接引发语法错误)[^1]。 --- #### 2. **正确使用步骤** ##### (1) **Dockerfile中定义构建参数** 在Dockerfile中通过`ARG`声明变量,例如: ```dockerfile # 定义构建参数 ARG VERSION ARG JAR_PATH # 使用参数(例如设置环境变量) ENV APP_VERSION=${VERSION} # 复制JAR文件到镜像中 COPY ${JAR_PATH}/app.jar /app/app.jar ``` ##### (2) **构建时传递参数** 在`docker build`命令中通过`--build-arg`传递值: ```bash docker build --build-arg VERSION=1.0.0 \ --build-arg JAR_PATH=target \ -t springboot-hello-webapp . ``` --- #### 3. **注意事项** - **参数作用域**:`ARG`定义的变量仅在构建阶段有效,若需在容器运行时使用,需通过`ENV`转换为环境变量[^4]。 - **敏感信息处理**:避免直接传递密码等敏感信息,建议使用Docker Secrets或配置文件(参考引用[4]中的`configs`配置)。 - **命令行路径**:确保构建命令末尾的上下文路径(如`.`)正确,否则会导致文件复制失败。 --- #### 4. **完整示例** 假设Spring Boot项目的JAR文件位于`target/`目录: ```bash # Dockerfile FROM openjdk:11 ARG JAR_FILE=app.jar COPY target/${JAR_FILE} /app/app.jar ENTRYPOINT ["java", "-jar", "/app/app.jar"] # 构建命令 docker build --build-arg JAR_FILE=springboot-hello-webapp.jar -t myapp . ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值