我们为什么需要 SpringBoot?

本文介绍SpringBoot的起源及其简化JavaEE开发的优势,包括自动化配置、微服务支持及如何快速搭建和定制SpringBoot应用。

作者 | 阿文,责编 | 郭芮

头图 | 优快云 下载自东方IC

出品 | 优快云(ID:优快云news)

任何先进技术的产生都不是凭空出现的,SpringBoot 也不例外,SpringBoot 是基于Spring 的基础上产生的。总所周知,Spring 是一个轻量级的容器,在Java EE 项目中得到广泛使用,但是Spring复杂、繁琐和臃肿的XML配置方式配置使得开发人员在实际使用过程中变得非常痛苦,尤其是与其他第三方工具进行整合时,比如Mybatis等就更会使得配置文件变得异常复杂和重复。

比如我们来看一段Spring的配置:

上图是一段配置数据库以及事务管理和Mybatis 的配置,我们发现仅仅是配置文件就非常的多,当然这还不是最复杂的。在这种基础上,SpringBoot 诞生了。

SpringBoot 的出现给开发者带来了新的自动化配置解决方案,使得开发者能够基于 SpringBoot 快速创建基于 Spring 生产级的独立应用程序, SpringBoot 中对一些常用的第三方库提供了默认的自动化配置方案,使得开发者只需要很少的 Spring 配置就能运行完整的 JavaEE 应用。由于其拥有了开箱即用的特性以及服务监控方案同时自带web服务器且与Spring的另一个主流的Spring Cloud 等服务治理框架以及kubernetes 等技术的融合使得开发人员可以快速的实现微服务以及服务的治理、熔断等,最重要的是你可以完全不需要配置XML,真的是太爽了。

那么,如何入门SpringBoot 呢?本文将带你了解。

小试牛刀

首先,我们创建一个SpringBoot工程,创建SpringBoot的方法有很多,这里以IDEA 企业版为例,我们选择 Spring initalizr 然后创建一个工程。

创建完工程之后,我们打开pom.xml,我们可以看到这段配置:

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

spring-boot-starter-parent 是一种特殊的 starter,它提供了一些 maven 默认配置,同时还提供了dependency-management ,可以便开发者在引入其他依赖时不必输入版本号,方便依赖管理。

SpringBoot 提供的starter 非常多,这些 Starter 要为第三方库提供自动配置,假如我们要配置一个web项目,则可以在maven 中加入:

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

在项目的入口我们可以看到一个DemoApplication,这是整个SpringBoot的入口:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

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


    }

}

其中@SpringBootApplication 注解等于如下注解,表示开启自动配置以及自动扫包:

@EnableAutoConfiguration
@ComponentScan

其中ComponentScan 会扫描@Service、@Repository、@Component、@Controller、@RestController以及带@Configuration 注解的类,但是我们为了更方便,通常都是直接在入口加上@SpringBootApplication。

在IDE中,我们运行DemoApplication 这个class 就可以运行SpringBoot 了,此时终端会出现如下信息,我们可以看到 (v2.2.6.RELEASE) 版本号以及Tomcat的端口:

但是此时我们去访问127.0.0.1:8080,会出现404的提醒:


我们可以在项目下新建一个 HelloController:

@RestController
public class HelloController {
    @GetMapping("/hello")

    public String hello(){
        return "Hello World!";
    }
}

此时,我们去访问可以看到如下内容:

当然,更多的时候我们写完一个应用,是需要放到服务器上去运行的,这个时候我们需要把应用进行打包,要打包应用,我们需要在pom.xml中配置:

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

当然,使用idea 创建的SpringBoot 这些都给我们安排的妥妥的,我们只需要在终端输入如下命令就可以将整个项目进行打包:

mvn package

然后我们在终端执行:

java -jar target/demo-0.0.1-SNAPSHOT.jar

就可以运行打包好的项目,如下所示:

定制Banner

当SpringBoot 程序启动之后,我们会看到SpringBoot 的Logo:

但是通常情况下,企业会将其替换成自己的公司Logo,那么如何定制属于自己的企业Logo 呢?

首先,我们要把文件转成TXT文本形式的字体,比如在 http://www.network-science.de/ascii/ 设置,比如我们设置一个SpringDemo的字体:

然后在项目的resource目录下新建一个banner.txt的文件,将生成的文字复制粘贴进去即可:

然后我们重新运行程序就会发现默认的Logo 被替换了:

如果要关闭也很简单,只需要在main函数中,设置:

SpringApplicationBuilder builder = new SpringApplicationBuilder(DemoApplication.class);
builder.bannerMode(Banner.Mode.OFF).run(args);

Web 容器的配置

在SpringBoot 中,我们可以在application.properties 中对web 容器进行配置,如下所示:

server.address=127.0.0.1 # 配置地址
server.port=8888 # 配置端口
server.tomcat.basedir=/opt/tmp # 配置目录
server.tomcat.uri-encoding=utf-8 #配置编码
server.tomcat.max-threads=300 #配置最大线程数

在idea 中,会对配置项进行智能提示,非常方便:

我们还可以在该文件中配置证书:

server.ssl.key-store= #配置秘钥文件名称
server.ssl.key-alias= #配置秘钥别名
server.ssl.key-password= # 配置证书密码

application.properties 的文件加载顺序

SpringBoot 中的application.properties配置文件可以出现在如下4个位置:

  • 项目根目录下的config 文件夹中

  • 项目的根目录下

  • classpath 下的config文件夹下

  • classpath 下

开发者也可以自定义这个文件的名称,只需要在运行时加上spring.config.name=xxx即可:

jar -jar xxx.jar --spring.config.name=xxx

也可以知道配置文件所在路径:

jar -jar xxx.jar --spring.config.location=classpath:/

SpringBoot 的配置文件最终都会被加载到Environment中,我们可以通过@Value 注解以及EnvironmentAware 接口来讲数据注入到属性上,例如application.properties中的内容如下:

book.name=西游记
book.author=六承恩
book.price=66
book.type="古典文学","四大名著"

Book 类的内容如下:

@Component
@ConfigurationProperties(prefix = "book")
public class Book {
    private String name;
    private String author;
    private Float price;
    private List<String> type;

    //getter 省略
    //seteer 省略
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type=" + type +
                '}';
    }
}

其中ConfigurationProperties 注解中的prefix 属性描述了要加载配置文件的前缀对应的控制器类如下:

@RestController
public class BookController {
    @Autowired
    Book book;
    @GetMapping("/book")
    public String book(){
        return book.toString();
    }
}

我们执行后访问可以看到如下内容:

除此之外,还支持YAML 配置,我们将application.properties中的内容删除或注释,然后在resource中新建一个application.yml 文件,内容如下,重新运行程序得到的结果与上面的一样。

book:
  name: 西游记
  author: 六承恩
  price: 66
  type:
    -  古典文学
    - 四大名著

YAML格式的文件虽然方便,但是无法使用@PropertySource 注解加载YAML文件。

Profile

在实际的开发过程中,开发人员需要频繁的在生产和测试环境进行切换,其中一些配置就需要变动,比如数据库的配置。对此,SpringBoot 提供了@Profile注解,我们可以配置2个配置文件分别代表生产和测试环境的,在resource中新建application-dev.properties以及application-prod.properties。

然后在main 函数中配置:

SpringApplicationBuilder builder = new SpringApplicationBuilder(DemoApplication.class);
    builder.application().setAdditionalProfiles("prod");
    builder.run(args);

或者在项目启动时候加上--spring.profiles.active=prod

【END】

更多精彩推荐

平台抗住日访问量 7 亿次,研发品控流程全公开

深度干货!如何将深度学习训练性能提升数倍?

☞“手把手撕LeetCode题目,扒各种算法套路的裤子”

北京四环堵车引发的智能交通大构想

从Ngin到Pandownload,程序员如何避免面向监狱编程?

从 Web 1.0到Web 3.0:详析这些年互联网的发展及未来方向

你点的每个“在看”,我都认真当成了喜欢

<think>我们正在处理一个关于Vue+SpringBoot项目集成时,在开发环境中仅显示SpringBoot文件夹的问题。根据用户描述,当打开项目时,IDE(如IntelliJIDEA)只显示了SpringBoot相关的文件夹结构,而没有显示Vue部分的文件夹。这通常是由于项目结构配置或IDE设置导致的。结合站内引用内容,我们注意到:-引用[1][2]提到SpringBoot简化了Web开发配置,通过`spring-boot-starter-web`依赖整合了Web开发所需组件。-引用[3]提到了Thymeleaf模板引擎的配置,但用户使用的是Vue,所以不直接相关。-引用[4]是无关的(开放源代码下载),可忽略。在Vue+SpringBoot前后端分离项目中,通常有两个独立的子项目:1.后端SpringBoot项目(通常放在一个目录下,比如`backend`)2.前端Vue项目(通常放在另一个目录下,比如`frontend`)问题原因分析:1.**项目结构问题**:如果Vue项目没有放在SpringBoot项目的目录下,而是作为同级目录,那么当用IDE打开SpringBoot项目时,自然看不到Vue的文件夹。我们需要将整个项目(包含前后端)组织在一个根目录下,然后用IDE打开这个根目录。2.**IDE设置问题**:有些IDE(如IntelliJIDEA)默认会忽略某些文件夹(比如`node_modules`),或者如果前端项目是独立项目,但没有被正确识别为模块,也会导致不显示。解决方案:**方案一:正确组织项目结构并打开整个项目**1.确保项目结构如下:```my-project/#项目根目录backend/#SpringBoot项目src/pom.xml...frontend/#Vue项目src/package.json...```2.使用IDE(如IntelliJIDEA)打开整个根目录`my-project`,而不是只打开`backend`文件夹。**方案二:在IDE中手动添加前端模块(如果前端项目不在同一个根目录下)**如果前端项目已经存在但不在同一个根目录下,可以:1.在IDE中打开SpringBoot项目。2.然后通过IDE的菜单添加模块:File->New->ModulefromExistingSources...,然后选择前端项目的文件夹(包含package.json的目录),并按照向导导入(通常选择作为Vue模块,IDEA会识别为前端项目)。**方案三:配置IDE的忽略文件(如果前端文件夹被忽略)**有时IDE会自动忽略某些文件夹(比如`node_modules`),但我们可能希望看到除了`node_modules`之外的其他前端文件夹。可以检查IDE是否忽略了整个前端目录:1.在IDEA中,打开设置:File->Settings2.搜索“IgnoredFilesandFolders”,检查是否将前端目录加入了忽略列表。如果是,请移除忽略。**方案四:检查项目配置(如果使用了Maven多模块)**如果项目采用了Maven多模块结构,需要确保前端模块也被包含在根pom.xml中。但通常Vue项目不需要作为Maven模块,所以这种方案较少使用。根据以上分析,最常见的原因是用户直接打开了SpringBoot项目目录(backend),而没有打开整个项目的根目录(包含backend和frontend)。因此,建议用户检查项目结构,并尝试打开整个根目录。相关问题:§§相关问题§§1.如何正确组织Vue+SpringBoot前后端分离项目的目录结构?2.在IntelliJIDEA中如何导入多个模块(如前后端)?3.Vue项目中哪些文件夹通常会被IDE忽略?如何取消忽略?</think> ### Vue+SpringBoot项目集成时仅显示SpringBoot文件夹的原因及解决方案 #### 问题原因分析 1. **项目结构认知问题** Vue+SpringBoot项目通常是前后端分离架构: - SpringBoot作为后端服务(位于类似`backend`目录) - Vue作为前端项目(位于类似`frontend`目录) IDE默认只识别Java项目结构,可能未加载前端目录[^1][^2]。 2. **IDE配置限制** 如使用IntelliJ IDEA: - Vue目录未被识别为有效模块 - 前端目录被标记为"Excluded"(排除状态) - 缺少前端开发插件(Vue.js插件) 3. **构建工具配置缺失** - `pom.xml`/`build.gradle`未配置前端构建插件(如`frontend-maven-plugin`) - 未设置资源目录映射(参考引用[3]的资源路径配置)[^3] #### 解决方案 ##### 方案一:IDE手动配置 1. **添加Vue模块** - 右键项目根目录 → "Add Framework Support" - 勾选`JavaScript`和`Vue.js`(需提前安装插件) ```xml <!-- 示例:确保前端资源目录被识别 --> <resources> <resource> <directory>frontend/dist</directory> </resource> </resources> ``` 2. **解除目录排除** - 右键前端目录 → "Mark Directory as" → "Unmark as Excluded" - 检查`.idea/workspace.xml`删除`excludeFolder`相关配置 ##### 方案二:项目结构重构(推荐) 1. **标准目录结构** ``` project-root/ ├── backend/ # SpringBoot项目(含pom.xml) │ └── src/main/resources/static # 前端构建产物目录 └── frontend/ # Vue项目(含package.json) ``` 2. **添加构建配置** 在SpringBoot的`pom.xml`添加: ```xml <build> <plugins> <plugin> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>1.12.1</version> <executions> <execution> <id>install-node</id> <phase>generate-resources</phase> <goals> <goal>install-node-and-npm</goal> </goals> </execution> <execution> <id>npm-build</id> <phase>generate-resources</phase> <goals> <goal>npm</goal> </goals> <configuration> <arguments>run build</arguments> <workingDirectory>../frontend</workingDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 执行`mvn clean package`时会自动构建Vue项目[^2] ##### 方案三:开发环境热部署配置 1. **Vue开发服务器独立运行** ```bash # 前端目录启动 cd frontend npm run serve ``` 2. **SpringBoot配置代理**(参考引用[1]的热部署)[^1] ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/"); } } ``` #### 验证步骤 1. 执行`mvn spring-boot:run`后访问`http://localhost:8080` 2. 检查控制台日志: ```log Mapped URL path [/] onto handler... Serving static content from [classpath:/static/] ``` #### 调试建议 - 使用`VS Code`单独打开`frontend`目录进行前端开发 - 使用`Postman`测试后端API连通性 - 检查浏览器开发者控制台的404错误路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优快云资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值