精华内容
下载资源
问答
  • Spring Boot面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 17:48:42
    文章目录概述什么是 Spring Boot?Spring Boot 有哪些优点?Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?配置什么是 JavaConfig?Spring Boot 自动配置原理是什么?你如何理解 Spring Boot 配置加载...

    大家好,我是CSDN的博主ThinkWon,“2020博客之星年度总评选"开始啦,希望大家帮我投票,每天都可以投多票哦,点击下方链接,然后点击"最大”,再点击"投TA一票"就可以啦!
    投票链接:https://bss.csdn.net/m/topic/blog_star2020/detail?username=thinkwon
    在技术的世界里,ThinkWon将一路与你相伴!创作出更多更高质量的文章!2020为努力奋斗的你点赞👍,️新的一年,祝各位大牛牛气冲天,牛年大吉!😊😊

    文章目录

    Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…

    序号 内容 链接地址
    1 Java基础知识面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104390612
    2 Java集合容器面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104588551
    3 Java异常面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104390689
    4 并发编程面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104863992
    5 JVM面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104390752
    6 Spring面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104397516
    7 Spring MVC面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104397427
    8 Spring Boot面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104397299
    9 Spring Cloud面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104397367
    10 MyBatis面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/101292950
    11 Redis面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/103522351
    12 MySQL数据库面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104778621
    13 消息中间件MQ与RabbitMQ面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104588612
    14 Dubbo面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104390006
    15 Linux面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104588679
    16 Tomcat面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104397665
    17 ZooKeeper面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104397719
    18 Netty面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/104391081
    19 架构设计&分布式&数据结构与算法面试题(2020最新版) https://thinkwon.blog.csdn.net/article/details/105870730

    概述

    什么是 Spring Boot?

    Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

    Spring Boot 有哪些优点?

    Spring Boot 主要有如下优点:

    1. 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
    2. 开箱即用,远离繁琐的配置。
    3. 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
    4. 没有代码生成,也不需要XML配置。
    5. 避免大量的 Maven 导入和各种版本冲突。

    Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

    启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

    @SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

    @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

    @ComponentScan:Spring组件扫描。

    配置

    什么是 JavaConfig?

    Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:

    (1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。

    (2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。

    (3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

    Spring Boot 自动配置原理是什么?

    注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,

    @EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。

    筛选有效的自动配置类。

    每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

    你如何理解 Spring Boot 配置加载顺序?

    在 Spring Boot 里面,可以使用以下几种方式来加载配置。

    1)properties文件;

    2)YAML文件;

    3)系统环境变量;

    4)命令行参数;

    等等……

    什么是 YAML?

    YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。

    YAML 配置的优势在哪里 ?

    YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?

    1. 配置有序,在一些特殊的场景下,配置有序很关键
    2. 支持数组,数组中的元素可以是基本数据类型也可以是对象
    3. 简洁

    相比 properties 配置文件,YAML 还有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置。

    Spring Boot 是否可以使用 XML 配置 ?

    Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。

    spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?

    单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。

    spring boot 核心的两个配置文件:

    • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
    • application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

    什么是 Spring Profiles?

    Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。

    如何在自定义端口上运行 Spring Boot 应用程序?

    为了在自定义端口上运行 Spring Boot 应用程序,您可以在application.properties 中指定端口。server.port = 8090

    安全

    如何实现 Spring Boot 应用程序的安全性?

    为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。

    比较一下 Spring Security 和 Shiro 各自的优缺点 ?

    由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:

    1. Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
    2. Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
    3. Spring Security 功能强大;Shiro 功能简单

    Spring Boot 中如何解决跨域问题 ?

    跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

    @Configuration
    public class CorsConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowCredentials(true)
                    .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                    .maxAge(3600);
        }
    
    }
    

    项目中前后端分离部署,所以需要解决跨域的问题。
    我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。
    当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
    我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。

    @Configuration
    public class CorsConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.addAllowedHeader("*");
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.setAllowCredentials(true);
            UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
            urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
            return new CorsFilter(urlBasedCorsConfigurationSource);
        }
    
    }
    

    什么是 CSRF 攻击?

    CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

    监视器

    Spring Boot 中的监视器是什么?

    Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。

    如何在 Spring Boot 中禁用 Actuator 端点安全性?

    默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

    我们如何监视所有 Spring Boot 微服务?

    Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。 它建立在 Spring Boot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。

    整合第三方项目

    什么是 WebSockets?

    WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。

    1、WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。

    2、WebSocket 是全双工的 -客户端和服务器通信是相互独立的。

    3、单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信

    4、Light -与 http 相比,WebSocket 消息数据交换要轻得多。

    什么是 Spring Data ?

    Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。Spring Data 具有如下特点:

    SpringData 项目支持 NoSQL 存储:

    1. MongoDB (文档数据库)
    2. Neo4j(图形数据库)
    3. Redis(键/值存储)
    4. Hbase(列族数据库)

    SpringData 项目所支持的关系数据存储技术:

    1. JDBC
    2. JPA

    Spring Data Jpa 致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!Spring Data JPA 通过规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。

    什么是 Spring Batch?

    Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。

    什么是 FreeMarker 模板?

    FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构进行动态网页生成。使用 Freemarker 的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理 html 页面设计。最后使用freemarker 可以将这些结合起来,给出最终的输出页面。

    如何集成 Spring Boot 和 ActiveMQ?

    对于集成 Spring Boot 和 ActiveMQ,我们使用依赖关系。 它只需要很少的配置,并且不需要样板代码。

    什么是 Apache Kafka?

    Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。

    什么是 Swagger?你用 Spring Boot 实现了它吗?

    Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

    前后端分离,如何维护接口文档 ?

    前后端分离开发日益流行,大部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离一定会有接口文档,不然会前后端会深深陷入到扯皮中。一个比较笨的方法就是使用 word 或者 md 来维护接口文档,但是效率太低,接口一变,所有人手上的文档都得变。在 Spring Boot 中,这个问题常见的解决方案是 Swagger ,使用 Swagger 我们可以快速生成一个接口文档网站,接口一旦发生变化,文档就会自动更新,所有开发工程师访问这一个在线网站就可以获取到最新的接口文档,非常方便。

    其他

    如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?

    这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

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

    您使用了哪些 starter maven 依赖项?

    使用了下面的一些依赖项

    spring-boot-starter-activemq

    spring-boot-starter-security

    这有助于增加更少的依赖关系,并减少版本的冲突。

    Spring Boot 中的 starter 到底是什么 ?

    首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

    spring-boot-starter-parent 有什么用 ?

    我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

    1. 定义了 Java 编译版本为 1.8 。
    2. 使用 UTF-8 格式编码。
    3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
    4. 执行打包操作的配置。
    5. 自动化的资源过滤。
    6. 自动化的插件配置。
    7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

    Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

    Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

    Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

    运行 Spring Boot 有哪几种方式?

    1)打包用命令或者放到容器中运行

    2)用 Maven/ Gradle 插件运行

    3)直接执行 main 方法运行

    Spring Boot 需要独立的容器运行吗?

    可以不需要,内置了 Tomcat/ Jetty 等容器。

    开启 Spring Boot 特性有哪几种方式?

    1)继承spring-boot-starter-parent项目

    2)导入spring-boot-dependencies项目依赖

    如何使用 Spring Boot 实现异常处理?

    Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。

    如何使用 Spring Boot 实现分页和排序?

    使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。

    微服务中如何实现 session 共享 ?

    在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

    Spring Boot 中如何实现定时任务 ?

    定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。

    在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。

    使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

    使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

    展开全文
  • Vue + Spring Boot 项目实战(一):项目简介

    万次阅读 多人点赞 2019-03-31 11:19:37
    白卷是一款使用 Vue+Spring Boot 开发的前后端分离项目,主要帮助 web 开发初学者通过实践方式打通各个环节的知识。

    logo


    GitHub 地址:https://github.com/Antabot/White-Jotter
    lisense

    教程目录

    第一部分

    Vue + Spring Boot 项目实战(一):项目简介
    Vue + Spring Boot 项目实战(二):搭建 Vue.js 项目
    Vue + Spring Boot 项目实战(三):前后端结合测试(登录页面开发)
    Vue + Spring Boot 项目实战(四):数据库的引入
    Vue + Spring Boot 项目实战(五):使用 Element 辅助前端开发
    Vue + Spring Boot 项目实战(六):前端路由与登录拦截器
    Vue + Spring Boot 项目实战(七):导航栏与图书页面设计
    Vue + Spring Boot 项目实战(八):数据库设计与增删改查
    Vue + Spring Boot 项目实战(九):核心功能的前端实现
    Vue + Spring Boot 项目实战(十):图片上传与项目的打包部署

    第二部分

    Vue + Spring Boot 项目实战(十一):用户角色权限管理模块设计
    Vue + Spring Boot 项目实战(十二):访问控制及其实现思路
    Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息加密与登录认证
    Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
    Vue + Spring Boot 项目实战(十五):动态加载后台菜单
    Vue + Spring Boot 项目实战(十六):功能级访问控制的实现
    Vue + Spring Boot 项目实战(十七):后台角色、权限与菜单分配
    Vue + Spring Boot 项目实战(十八):博客功能开发

    第三部分

    Vue + Spring Boot 项目实战(十九):Web 项目优化解决方案
    Vue + Spring Boot 项目实战(二十):前端优化实战
    Vue + Spring Boot 项目实战(二十一):缓存的应用

    开源精选

    Erupt Framework:开源神器,助你无需前端代码搞定企业级后台管理系统
    AntdFront: React 纯 Hook 多标签微前端管理系统解决方案

    前言

    之前写了一些关于 Java EE 的文章,主要是理论性质的,目的是帮助大家快速了解 Java EE 的核心内容,早日爬出这个陈旧又绕不开的坑,进入 Java Web 开发的新天地。当然只有理论是不够的,有很多细节需要在实践中理解,所以我决定做一个实践教程。

    这个项目十分简单,是一个纯粹为教程而生的原型,可以视为一个简陋的带后台的门户网站。所以学习时不用有什么压力,估计你们学的比我写的快很多。

    我的目标是根据这个教程,可以帮助 新入行的或是刚开始学习相关技术 的小伙伴们把一个完整的项目还原出来,建立起对前后端分离式 Web 开发的整体认知。

    一开始,我会尽量详细地描述开发的过程,帮助大家快速上手。随着项目进展,曾经讲到过的、比较容易搜索到的内容会适当省略。

    当然,每个人的理解方式不同,可能有些重要的细节没讲到位,欢迎大家在评论区提问。受限于个人水平,一定有很多说的不对的地方,大家理解一下,友善白嫖哈。

    一、项目概述

    这个项目我把它命名为 “白卷”,估摸着很多同学会拿它做课程设计之类,建议你们尽量加点自己的东西在里面,直接交白卷,你的良心不会痛吗?(狗头保命)

    开个玩笑,叫白卷是因为它随着教程进展逐渐完善,象征着知识的从无到有,从有到多。

    另外我还给它起了一个英文名字,叫 White Jotter(白色笔记本),纯粹是为了谐音。

    项目遵循敏捷开发原则,会根据大家反馈的意见整理出新的需求,动态扩展、调整、优化。初始阶段按照简单的分层架构设计,具体见下图:

    • 应用架构
      应用架构

    • 技术架构
      技术架构图

    项目需要在前后端之间不断穿梭,但在做教程的时候,我会尽量模块化地去讲解。

    此外,我把教程分为了几个阶段,是为了循序渐进、由易到难地讲解知识点。

    各个阶段的主要内容如下(随教程进展更新):

    (一)第一部分

    这个项目的第一部分以图书信息管理为示例,主要帮助大家理解以下内容:

    • 如何从 0 开始搭建 Web 项目?
    • 什么是前后端分离?如何实现前后端分离?
    • 单页面应用有哪些特点?
    • 如何在 Web 项目中使用数据库并利用网页实现增删改查?
    • 在开发中如何利用各种辅助手段?
    • Vue.js 的基本概念与用法
    • 简单的前端页面设计
    • 如何部署 Web 应用?

    各个页面的效果大致如下:

    登录页面
    登录页面
    首页
    首页
    图书馆页面
    图书馆

    (二)第二部分

    项目的第二部分是后台管理模块的开发,主要包括以下内容:

    • 后台管理模块的常见功能与布局(内容管理、用户\权限管理、运维监控)
    • 用户身份验证、授权、会话管理与信息加密存储
    • Shiro 框架的使用
    • 实现不同粒度的访问控制(动态菜单、功能控制、数据控制)
    • 结合内容管理,实现文章的编写与展示

    后台基本结构如下:
    在这里插入图片描述
    后台页面效果:

    Dashboard(from PanJiaChen / vue-element-admin)
    dashboard

    图书管理
    图书管理
    用户管理
    在这里插入图片描述
    笔记本页面效果:

    文章列表:
    笔记本
    文章详情:
    文章详情

    (三)第三部分

    第三部分是在前面的基础上,分析项目存在的不足,并对其进行由点及面的优化。

    当简单的优化无法达到我们想要的目的时,就需要从架构层面进行整体的升级改造,那就是下一套教程的事情了。

    (四)开源精选

    在做这个项目的过程中结识了一些小伙伴,他们凭借一腔热枕坚持为开源社区做贡献,开发出了许多优秀的项目。我打算在编写教程的同时穿插对这些项目的介绍,以便让更多朋友们了解这个群体,甚至加入到新兴项目的发展壮大过程中去。这样,也算是自己尽了一份绵薄之力吧!

    此外,这个教程还有姐妹篇,也就是我正在更新的信息安全方面的教程。在攻防实践阶段,会把我们这个项目当作一号靶机,对黑客技术有兴趣的同学可以走一波关注:

    【信息安全系列文章地址】


    二、技术栈

    参考技术架构图,项目使用的主要技术如下:

    1.前端技术栈

    1.Vue.js
    2.ElementUI
    3.axios

    2.后端技术栈

    1.Spring Boot
    2.Apache Shiro
    3.Apache Log4j2
    4.Spring Data JPA
    5.Spring Data Redis

    3.数据库

    1.MySQL
    2.Redis

    在开发过程中还会不断用到一些新的技术,有必要的我会增添上去。

    三、主要参考内容

    下一篇:Vue + Spring Boot 项目实战(二):搭建 Vue.js 项目


    有兴趣听我扯技术之外的故事的同学可以关注我的公众号。不定期更新,权当和大家聊聊天,图个乐子。
    heihei

    展开全文
  • 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过...

    一、Spring Boot简介

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。SpringMVC是非常伟大的框架,开源,发展迅速。优秀的设计必然会划分、解耦。所以,spring有很多子项目,比如core、context、bean、mvc等。这对知根底的人来说很简单明了,然而springmvc就是为了傻瓜式的操作而发明的。对于初学springmvc的人来说,想要入手就开发需要拷贝一连串的dependency而不知道这个是干嘛,不知道是不是少了依赖。像我刚接触springmvc的时候到处百度教程而发现各有不同,于是复制了一个又一个代码却不能自己设置,根本原因是不了解各个依赖的包。

    Spring-Boot 正是为了解决繁复的代码配置而产生的。Spring-Boot 也是基于java-base 开发的代码,及不用xml文件配置,所有代码都由java来完成。还可以加入Groovy的动态语言执行。

    本文是一个Spring Boot入门级的helloworld程序。

     

    二、准备工作

    • Java JDK1.7(安装过程省略)
    • maven:apache-maven-3.3.9(安装过程省略)
    • eclipse(安装过程省略)
    • spring-boot-1.5.1

    三、用Spring Boot新建web项目

    新建一个maven工程(注意,不要勾选create from archytype,虽然它会帮你创建骨架,但是会从外网下载一些东西,很慢,导致会卡在那,下载东西的时间,还不如手工创建一下目录,分分钟搞定)。

    然后输入相应的groupId,artifactId。

    项目创建过程就省略了。项目建好后,目录结构是这样的:

    打开pom.xml文件,添加<parent></parent>节点:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>myproject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.0.RELEASE</version>
        </parent>
        <!-- Additional lines to be added here... -->
    </project>

    上面没有添加任何依赖,但仍然可以build。使用命令行:mvn package 对项目进行打包。

    注意,是当前项目路径E:\workspace-springBoot\zsqSpringBoot>下执行命令。当然,你也可以使用IDE,不过使用文本编辑器会让我们对它更理解。

    现在需要添加依赖 -- 其实就是把依赖的jar添加到buildpath。由于我们已经继承了 spring-boot-starter-parent ,而 spring-boot-starter-parent 又提供了 dependency-management ,所以我们可以忽略被选中依赖的版本。

    在添加依赖之前,我们先看一下现在已有什么:mvn dependency:tree。该命令会打印一个当前项目的依赖树。

    结果表明,当前没有任何依赖。 如下:

    OK,现在我们添加spring-web项目依赖:

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

    现在再次查看一下依赖树。


     

    可以看出,spring-boot-starter-web  包含了很多内容,spring-webmvc、spring-web、jackson、validation、tomcat、starter。

     

    好,接下来修改pom.xml,我直接贴上我的pom.xml完整配置信息:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.zsq.msb</groupId>
    	<artifactId>zsqSpringBoot</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    
    	<!-- Maven POM文件继承 spring-boot-starter-parent -->
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.4.0.RELEASE</version>
    	</parent>
    
    	<!-- 为一个web应用程序添加典型的依赖关系, Starter POMs依赖 -->
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    	</dependencies>
    
    	<!-- Spring Boot也提供了一个可选的 Maven Plugin来创建可执行的jars -->
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>


    可以看出,继承了spring-boot-starter-parent,依赖了junit,spring-boot-starter-web,spring-boot-maven-plugin。以前我们在spring的配置,spring-boot都会按照默认配置,帮我们弄好。(你可以像使用标准的Java库文件一样使用Spring Boot。简单的将需要的 spring-boot-*.jar 添加到classpath即可。)

    Spring Boot不要求任何特殊的工具集成,所以可以使用任何IDE,甚至文本编辑器。只是,仍然建议使用build工具:Maven 或 Gradle。

    Spring Boot依赖使用 org.springframework.boot groupId 。通常,让你的Maven POM文件继承 spring-boot-starter-parent,并声明一个或多个 Starter POMs依赖即可。Spring Boot也提供了一个可选的 Maven Plugin来创建可执行的jars。

    需要注意的是, spring-boot-starter-parent 是一个非常好的方法,但并不适用于所有情况。有时你需要继承其他的POM,或者你不喜欢默认的设置,可以使用另外的方式。
    完成后下载了相关的额jar包,如下图:

     

     

     

     

    现在就可以开始写代码了。 由于Maven默认编译路径为 src/main/java 下面的源码,所以,默认设置下,需要创建这些文件夹。然后,编写文件 src/main/java/Example.java:

    package com.zsq.msb.dexam;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    @Controller
    @EnableAutoConfiguration
    public class Example {
    	
    	 @RequestMapping(value ="/home", method = RequestMethod.GET)
    	 @ResponseBody
    	public String home(){
    		return "你好,Spring Boot";
    	}
    	
    	public static void main(String[] args){
    		SpringApplication.run(Example.class, args);
    		
    	}
    	
    
    }
    

    这里我们只需要关心 @EnableAutoConfiguration 即可。这个注解是让Spring Boot猜测 你想怎么配置Spring,但实际上,它是根据你添加到classpath中的依赖来判断的。

    注意,自动配置 可以配合 Starter POMs 一起工作,但二者不是捆绑到一起的。你仍然可以将Starter POMs中的依赖单独拣出使用,Spring Boot还是会自动配置。

    现在可以右键运行main方法,效果如下:

    当你看到这样的运行后的效果,说明配置是成功的,这样也就相当于项目已经启动了。(当然,由于我们使用了 spring-boot-starter-parent POM,所以可以使用 mvn spring-boot:run来启动项目(根路径)。)

    注意:在启动之前,先使用Maven来install(打包),你可以在/target目录下看到zsqSpringBoot-0.0.1-SNAPSHOT.jar,大约10 Mb左右。可以通过 jar tvf target/zsqSpringBoot-0.0.1-SNAPSHOT.jar来查看其中的内容。此外,在/target目录下,还可以看到 zsqSpringBoot-0.0.1-SNAPSHOT.jar.original,这是Maven打包出来的。也可以使用命令来启动项目,在项目文件下执行命令如:java -jar target/zsqSpringBoot-0.0.1-SNAPSHOT.jar。

    使用命令启动项目效果如下:

    执行 ctrl+c,退出。

    另外,查看日志可以发现默认使用的是tomcat,端口绑定在8080:

    现在让我们来访问:http://localhost:8080/home。如下图:

    就可以看到我们代码中输出的字样:“你好,Spring Boot”了。

    回首这个过程,是不是相比于以前快速了许多呢!!

    源码下载地址:http://download.csdn.net/detail/zsq520520/9753537

    展开全文
  • Spring Boot -01- 快速入门篇(图文教程)

    万次阅读 多人点赞 2018-11-28 13:31:59
    Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心...

    Spring Boot -01- 快速入门篇(图文教程)

    今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费!

    什么是 Spring Boot?

    在这里插入图片描述

    Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。

    设计目的: 用来简化新 Spring 应用的初始搭建以及开发过程。

    从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。用大佬的话来理解,就是 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,spring boot 整合了所有的框架,总结一下及几点:

    (1)为所有 Spring 开发提供一个更快更广泛的入门体验。

    (2)零配置。无冗余代码生成和XML 强制配置,遵循“约定大于配置” 。

    (3)集成了大量常用的第三方库的配置, Spring Boot 应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。

    (4)提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。

    (5)Spring Boot 不是Spring 的替代者,Spring 框架是通过 IOC 机制来管理 Bean 的。Spring Boot 依赖 Spring 框架来管理对象的依赖。Spring Boot 并不是Spring 的精简版本,而是为使用 Spring 做好各种产品级准备

    Spring Boot 在应用中的角色

    Spring Boot 是基于 Spring Framework 来构建的,Spring Framework 是一种 J2EE 的框架(什么是 J2EE?
    Spring Boot 是一种快速构建 Spring 应用
    Spring Cloud 是构建 Spring Boot 分布式环境,也就是常说的云应用
    Spring Boot 中流砥柱,承上启下

    在这里插入图片描述

    环境准备

    Maven 安装与环境变量配置

    (1)Maven 安装:

    在这里插入图片描述

    (2)Maven 配置环境变量:

    解压到一个路径,然后配置环境变量:

    • 新建变量名:MAVEN_HOME 变量值:D:\server\apache-maven-3.6.0(这是我的 MAVEN 路径)
    • 编辑变量名:Path 在最前面加上:%MAVEN_HOME%\bin

    (3)检查是否配置成功:

    在命令行输入:

    mvn -V
    

    然后会一大堆东西:
    在这里插入图片描述

    (4)配置 maven 仓库:

    1.打开 maven 文件夹下的 config 文件夹下的 settings.xml;
    2.找到 localRepository 标签,此时是被注释掉的,我们解除注释,然后配置一个路径,例如:D:/space/MavenRepository/maven_jar,这样以后 MAVEN 管理下载的jar 包都会在这个路径下。
    【注意】:注意结点的位置,先找到注释掉的部分,贴在下面

    <localRepository>D:\space\MavenRepository\maven_jar</localRepository>
    

    在这里插入图片描述

    3.配置远程仓库,找到 mirrors 标签

    <!--远程仓库-->
    <mirror>
      <id>aliyun</id>
      <name>aliyun Maven</name>
      <mirrorOf>*</mirrorOf>
       <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
    

    在这里插入图片描述

    4.当然我们需要先建这样一个目录结构,然后还要把settings.xml 复制一份到 D:/space/MavenRepository 下

    在这里插入图片描述

    (5)在 idea 配置 maven:
    点击【File】>【Settings】>搜索【Maven】,按截图配置安装目录和选择刚刚 settings 配置文件;
    在这里插入图片描述
    选择完settings之后,本地仓库自动改成settings文件中配置的;点击apply,再点击ok即配置完成。


    使用 idea 快速搭建 Spring Boot

    第一步:新建 Spring Initializr 项目:

    在这里插入图片描述

    (1)选择 Spring Initializr
    (2)选择 SDK,点击【new】这里就是使用 JAVA SDK 要求版本 1.8+,选择你默认安装在 C:\Program Files\Java\jdk1.8.0_191 目录:
    在这里插入图片描述

    (3)然后选择默认的 url (不用管)点击【Next】:

    在这里插入图片描述

    (4)然后填写一下项目的信息:

    在这里插入图片描述

    (5)先勾选上 Web 依赖:
    在这里插入图片描述

    (6)勾选 SQl 下的 MySQL,MyBatis 依赖:
    (根据自己的项目选择,后面可加)
    在这里插入图片描述

    (7)选择好项目的位置,点击【Finish】:

    在这里插入图片描述

    (7)如果是第一次配置 Spring Boot 的话可能需要等待一会儿 IDEA 下载相应的 依赖包,默认创建好的项目结构如下:

    在这里插入图片描述

    项目结构还是看上去挺清爽的,少了很多配置文件,我们来了解一下默认生成的有什么:

    • SpringbootApplication: 一个带有 main() 方法的类,用于启动应用程序
    • SpringbootApplicationTests:一个空的 Junit 测试了,它加载了一个使用 Spring Boot 字典配置功能的 Spring 应用程序上下文
    • application.properties:一个空的 properties 文件,可以根据需要添加配置属性
    • pom.xml: Maven 构建说明文件

    第二步:HelloController

    在 【main/java/com.xpwi.springboot】包下新建一个【HelloController】:

    在这里插入图片描述

    package com.xpwi.springboot;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 测试控制器
     *
     * @author: @肖朋伟CSDN
     * @create: 2018-11-18
     */
    @RestController
    public class HelloController {
    
        @RequestMapping("/hello")
        public String hello() {
            return "Hello Spring Boot!";
        }
    }
    

    第三步:利用 IDEA 启动 Spring Boot

    (1)我们回到 SpringbootApplication 这个类中,然后右键点击运行:

    在这里插入图片描述

    (2)会提示 Maven 导包,点击 import
    在这里插入图片描述

    (3)注意:我们之所以在上面的项目中没有手动的去配置 Tomcat 服务器,是因为 Spring Boot 内置了 Tomcat
    等待一会儿就会看到下方的成功运行的提示信息:

    在这里插入图片描述

    (4)此时,可以看到我们的 Tomcat 运行在 8080 端口,我们来访问下面地址试一下:

    http://localhost:8080/hello
    

    在这里插入图片描述

    Spring Boot 项目文件介绍

    一、解析 pom.xml 文件:

    (1)让我们来看看默认生成的 pom.xml 文件中到底有些什么:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.xpwi</groupId>
        <artifactId>springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springboot</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.0.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>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <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>
    
    
    </project>
    
    

    (2)我们可以看到一个比较陌生一些的标签 ,这个标签是在配置 Spring Boot 的父级依赖:

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

    有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。

    关于具体 Spring Boot 提供了哪些 jar 包的依赖,我们可以查看本地 Maven 仓库下:\repository\org\springframework\boot\spring-boot-dependencies\2.1.0.RELEASE\spring-boot-dependencies-2.1.0.RELEASE.pom 文件来查看,挺长的…

    二、应用入口类 SpringbootApplication.java

    Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法, 这个 main 方法其实就是一个标准的 Javay 应用的入口方法。

    @SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,该注解组合了:@Configuration@EnableAutoConfiguration、@ComponentScan; 若不是用 @SpringBootApplication 注解也可以使用这三个注解代替。

    • 其中,@EnableAutoConfiguration 让 Spring Boot 根据类路径中的 jar 包依赖为当前项目进行自动配置,例如,添加了 spring-boot-starter-web 依赖,会自动添加 Tomcat 和 Spring MVC 的依赖,那么 Spring Boot 会对 Tomcat 和 Spring MVC 进行自动配置。
    • Spring Boot 还会自动扫描 @SpringBootApplication 所在类的同级包以及下级包里的 Bean ,所以入口类建议就配置在 grounpID + arctifactID 组合的包名下(这里为 com.xpwi.springboot 包)

    三、Spring Boot 的配置文件:

    Spring Boot 使用一个全局的配置文件 application.properties 或 application.yml,放置在【src/main/resources】目录或者类路径的 /config 下。

    Spring Boot 不仅支持常规的 properties 配置文件,还支持 yaml 语言的配置文件。yaml 是以数据为中心的语言,在配置数据的时候具有面向对象的特征。

    Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。

    修改 properties 配置文件实例:

    (1)打开 resources 下的 application.properties

    在这里插入图片描述

    (2)在这里我们可以设置访问的端口,将 Tomcat 默认端口设置为 8080 (默认的不修改) ,并将默认的访问路径从 “/” 修改为 “/cn” 时,再访问 http://localhost:8080/ 是什么都没有的,此时要访问 hello 是要使用 http://localhost:8080/cn/hello

    在这里插入图片描述

    注意:如果是 yml 需要在 “:” 后加一个空格,幸好 IDEA 很好地支持了 yml 文件的格式有良好的代码提示;
    我们可以自己配置多个属性

    (3)使用 yml 文件作为配置文件,我们直接把 .properties 后缀的文件删掉,使用 .yml 文件来进行简单的配置

    在这里插入图片描述

    (4)在然后使用在我们的 HelloController.java 类中使用 @Value 来获取配置属性,代码(请看注释):

    package com.xpwi.springboot;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 测试控制器
     *
     * @author: @肖朋伟CSDN
     * @create: 2018-11-18
     */
    @RestController
    public class HelloController {
    
        // 获取.yml 文件中值
        @Value("${name}")
        private String name;
    
        // 获取 age
        @Value("${csdnUrl}")
        private String csdnUrl;
    
        //路径映射,对应浏览器访问的地址,访问该路径则执行下面函数
        @RequestMapping("/hello")
        public String hello() {
            return name + " CSDN 博客:"+ csdnUrl;
        }
    }
    

    (5)重启 Spring Boot ,输入地址:http://localhost:8080/hello 能看到正确的结果:

    在这里插入图片描述

    【注意】:此时如果你第一次使用 idea 出现中文乱码,解决办法:

    在这里插入图片描述

    (6)【注意】: 我们并没有在 yml 文件中注明属性的类型,而是在使用的时候定义的。你也可以在配置文件中使用当前配置:

    在这里插入图片描述

    (7)任然可以得到正确结果:

    在这里插入图片描述

    (8)【问题】: 这样写配置文件繁琐而且可能会造成类的臃肿,因为有许许多多的 @Value 注解。

    可以,封装配置信息

    封装配置信息使用方法:

    (1)application.yml 文件内容如下:
    在这里插入图片描述

    (2)新建 author.java 和 HelloController.java 同级,内容如下:

    package com.xpwi.springboot;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "author")
    public class author {
        private  String name;
    
        private  String csdnUrl;
    
        public String getCsdnUrl() {
            return csdnUrl;
        }
    
        public void setCsdnUrl(String csdnUrl) {
            this.csdnUrl = csdnUrl;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    

    (3)此时可能会报错,如果报错,打开 pom.xml 文件,添加内容(注意位置):

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
    

    在这里插入图片描述

    (4)重新编写 HelloController 类,内容如下:

    package com.xpwi.springboot;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * 测试控制器
     *
     * @author: @肖朋伟CSDN
     * @create: 2018-11-18
     */
    @RestController
    public class HelloController {
    
        // 获取.yml 文件中值
        //@Value("${name}")
        //private String name;
    
        // 获取 age
        //@Value("${csdnUrl}")
        //private String csdnUrl;
    
        @Autowired
        private author author;
    
        //路径映射,对应浏览器访问的地址,访问该路径则执行下面函数
        @RequestMapping("/hello")
        public String hello() {
            return "名字:" + author.getName() + " 地址:" + author.getCsdnUrl();
        }
    }
    

    (5)重启 Spring Boot,访问浏览器:

    http://localhost:8080/hello
    

    在这里插入图片描述

    【提示】:我们可以把配置信息封装成一个类,首先在我们的 name 和 age 前加一个 student 前缀,然后新建一个 StudentProperties 的类用来封装这些信息,并用上两个注解:

    • @Component:表明当前类是一个 Java Bean
    • @ConfigurationProperties(prefix = “author”):表示获取前缀为 author 的配置信息

    转载请注明出处:肖朋伟:https://blog.csdn.net/qq_40147863/article/details/84194493

    更多文章链接:

    展开全文
  • 学习 Spring Boot 知识看这一篇就够了

    万次阅读 多人点赞 2018-05-28 07:36:00
    从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了,其中一部分是在技术社区做的系列...
  • Mac使用Boot Camp安装win10(不用U盘)

    万次阅读 多人点赞 2018-01-05 11:06:55
    原文在 ...大概的步骤: 1、从微软官网下载win10专业版本iso文件(文件有4.6G,官网白天下载很慢,晚上下载快点); 2、使用MacOS自带的Boot Camp(新兵训练营?)安装win10,Boot Camp安装时会从官网服务器下载支
  • 初识Spring Boot框架

    万次阅读 多人点赞 2016-12-19 20:42:04
    关注公众号【江南一点雨】,专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货! 前面的铺垫文章已经连着写了六篇了,主要是介绍了...
  • 史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家! 一.Spring Boot、Spring MVC 和 Spring 有什么区别? SpringFrame SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入...
  • Spring boot(4)-应用打包部署

    万次阅读 多人点赞 2016-08-18 15:35:40
    1、Spring Boot内置web Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,...
  • spring boot应用启动原理分析

    万次阅读 多人点赞 2015-11-30 22:36:38
    spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。如果之前没有使用过spring boot可以通过下面...
  • Spring Boot 入门

    万次阅读 多人点赞 2015-12-27 15:41:29
    Spring Boot入门Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的...
  • Spring Boot面试杀手锏————自动配置原理

    万次阅读 多人点赞 2018-11-07 14:11:15
    引言 不论在工作中,亦或是求职面试...当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。 Spr...
  • 开源框架面试之Spring Boot面试题

    万次阅读 2020-09-28 00:14:31
    文章目录1、什么是 Spring Boot?2、Spring Boot有哪些优点?3、什么是 JavaConfig?4、如何重新加载Spring Boot上的更改,而无需重新启动服务器?5、Spring Boot中的监视器是什么?6、如何在Spring Boot中禁用...
  • Spring Cloud+Spring Cloud Alibaba+Spring Boot 版本说明 组件版本关系 Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version 2.2.3.RELEASE or ...
  • Spring Boot 集成MyBatis

    万次阅读 多人点赞 2015-12-27 15:29:01
    Spring Boot 集成MyBatis在配置MyBatis前,我们先配置一个druid数据源。Spring Boot 集成druiddruid有很多个配置选项,使用Spring Boot 的ConfigurationProperties我们可以很方便的配置druid。创建DataSourceConfig...
  • 填坑之路!SpringBoot导包坑之spring-boot-starter-parent

    万次阅读 多人点赞 2018-11-14 21:03:25
    在新建springboot项目引入RELEASE版本时,有几率从远程仓库下载jar包出错,导致jar包无法导入.即使我把相关的包都删完,都不行,要么换个仓库,要么...org.springframework.boot</groupId> <artifactId>spr...
  • Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、...
  • --凑字数结束,开始正题:spring-boot项目需要部署在外部容器中的时候,spring-boot导出的war包无法再外部容器(tomcat)中运行或运行报错,本章就是详细讲解如何解决这个问题 1、pom.xml一览 <project xmlns="ht
  • 15 个优秀开源的 Spring Boot 学习项目,一网打尽!

    万次阅读 多人点赞 2019-12-12 11:44:43
    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 《Spring Boot + Vue 全栈开发实战》迄今为止已经加印了 8 次,Spring Boot 的受欢迎程度可见一斑。经常有人问松哥有没有推荐的 Spring Boot 学习...
  • Spring Boot的设计目的是来简化新Spring应用的初始搭建以及开发过程,大大减少了代码量,通过这篇文章你可以清楚的看到。这是一个基于Spring Boot的简单demo,希望读者可以通过这篇文章大概能看懂这一个简单的框架...
  • Spring boot面试题整理

    万次阅读 多人点赞 2018-11-20 12:51:34
    1、什么是springboot  用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)  创建独立的spring引用...答:spring boot来简化spring应用开发,约定大于配置,去繁从简,...
  • Spring Boot【快速入门】

    万次阅读 2020-09-14 17:51:55
    Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-based applications. Spring Boot is designed to get you up and running as quickly as ...
  • Spring Boot 入门实战

    万次阅读 多人点赞 2018-07-14 15:07:40
    微服务是未来发展的趋势,Spring Boot 继承了 Spring 的优良特性,与 Spring 一脉相承,支持各种REST API 的实现方式。Spring Boot 也是官方大力推荐的技术,是未来发展的一个大趋势。
  • Spring Boot Admin 2.1.0 全攻略

    万次阅读 多人点赞 2019-01-08 23:07:56
    转载请标明出处: ...Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud...
  • 学习Spring Boot时,看到了一篇总结的很好的文章,翻译过来作为学习笔记。 通过本文你将学到: Component Scan是什么? 为什么ComponentScan很重要? 项目中Spring Boot会对哪些包自动执行扫描(Component Scan)? ...
  • Spring Boot拦截器配置拦截登陆

    万次阅读 多人点赞 2018-07-09 18:34:57
    这里很简单,先引入spring-boot-starter-parent,parent 是父模块,由父模块统一进行 spring-boot 版本管理,dependencies 中与 spring-boot 启动绑定的包不需要再指定版本。 <parent> <groupId>org...
  • How to use maven plugin spring-boot startup parameters in spring boot
  • Spring Boot 属性配置和使用

    万次阅读 多人点赞 2015-12-27 15:27:51
    Spring Boot 属性配置和使用Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。Spring Boot 入门 请看:...
  • 40 篇原创干货,带你进入 Spring Boot 殿堂!

    万次阅读 多人点赞 2019-08-20 07:45:00
    两个月前,松哥总结过一次已经完成的 Spring Boot 教程,当时感受到了小伙伴们巨大的热情。两个月过去了,松哥的 Spring Boot 教程又更新了不少,为了方便...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 384,173
精华内容 153,669
关键字:

boot