SpringBoot 基本使用

2023-11-04


 

热部署

相关问题

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

常用有2种方式

  • Spring Boot DevTools:监听文件修改,修改代码后自动重启应用,需要重新部署整个应用,耗时较长,不推荐
  • 使用JRebel插件:支持本地热部署、远程服务器的热部署,修改代码后 Ctrl+Shift+F9 一键同步部署,只重新部署修改的部分、不重启应用,速度快,推荐。

都支持web静态资源的自动刷新,Spring Boot DevTools 刷新web静态资源无需重启应用。

 

方式一 Spring Boot DevTools

spring boot devtools 需要IDE自动编译的支持,先配置IDE的自动编译、运行时自动编译。

1、Settings -> Build,Execution,Deployment -> Compiler -> 勾选自动编译
在这里插入图片描述
 
2、Ctrl+Shift+Alt+/ -> Registry -> 勾选运行时自动编译
在这里插入图片描述
 

3、后续创建springboot项目时勾选 Developer Tools -> Spring Boot DevTools,或手动添加 spring-boot-devtools 的依赖,即可实现热部署

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

 

方式二 使用JRebel插件

1、安装插件 JRebel and XRebel for Intellij

高版本的IDEA自带此插件,无需手动安装
 

2、激活JRebel

https://www.guidgen.com/ -> 复制GUID

JRebel Activation -> Team URL -> 填写 https://jrebel.qekang.com/{GUID}、邮箱,邮箱可以瞎填
 

3、点击右上角的JRebel运行应用,修改代码后 Ctrl+Shift+F9 同步更改

 

web静态资源的存放

springboot默认的web静态资源存放位置有4个

  • classpath:/static
  • classpath:/public
  • classpath:/resources
  • classpath:/META-INF/resources

一般是在resources下新建static文件夹存放web静态资源。

 

json日期时间设置

可以在yml中统一设置 springmvc 内置的 jackson 的日期时间序列化设置,不必在实体类的每个Date字段上加@JsonFormat

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

 

组件扫描、资源导入

引导类上的 @SpringBootApplication 中包含了 @ComponentScan,但默认只扫描引导类同级目录下的组件,不会扫描依赖中的组件。

一些基础模块、类库,可能会直接使用spring|springboot来写,使用dspring|springboot的注解。引入这种依赖包时,需要在显式配置包扫描,把要扫描的依赖中的包也加进去
 

组件扫描

  • 可以用 @ComponentScan 或 @ComponentScans 来配置,可以配置多个 @ComponentScan
  • 可以用单独的配置类 (@Configuration)来配置,也可以直接标注在引导类上
  • 指定 项目本身 + 依赖 中要扫描的包
//value、basePackages互为别名,String[]
@ComponentScan({"com.chy.xxx1", "com.chy.xxx2"})


//可以用 excludeFilters 排除指定包中不需要扫描的类
@ComponentScan(
        value = {"com.chy.xxx1", "com.chy.xxx2"},
        //@ComponentScan.Filter[]
        excludeFilters = {
        		//排除指定的类,value为String[],classes为Class[],互为别名
                @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {com.chy.xxx1.A.class, com.chy.xxx2.B.class}),
                //排除指定注解
                @ComponentScan.Filter(type = FilterType.ANNOTATION, value = {com.chy.xxx1.A.class, com.chy.xxx2.B.class}),
                //排除正则表达式匹配的包、类
                @ComponentScan.Filter(type = FilterType.REGEX, pattern = {"com.chy.xxx1.config", "com.chy.xxx2.config"})
        })


//不一定非要配置value,比如项目中自定义的bean、依赖中定义的bean冲突,可以直接excludeFilters移除不需要的
@ComponentScan(excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {com.chy.xxx1.A.class, com.chy.xxx2.B.class}),
})



//value是 @ComponentScan[]
@ComponentScans(value = {
        @ComponentScan({"com.chy.xxx1", "com.chy.xxx2"}),
        @ComponentScan({"com.chy.xxx3", "com.chy.xxx4"})
})



//@SpringBootApplication与@ComponentScan、@EnableAutoConfiguration的部分字段互为别名,可以直接配置
@SpringBootApplication(
		//要扫描的包
        scanBasePackages = {"com.chy.xxx1", "com.chy.xxx2"},
        //要扫描的类
        scanBasePackageClasses = {com.chy.xxx1.A.class, com.chy.xxx2.B.class},
        //要排除的自动配置类,也可以用 excludeName 字段来配置。关联的是 @EnableAutoConfiguration 的字段,只能排除自动配置类,不同于 @ComponentScan 的 excludeFilters
        //自动配置类bean定义冲突报错时,也可以用此属性来排除
        exclude = {DataSourceAutoConfiguration.class}
)

 

资源导入

//value、locations互为别名,String[]
@ImportResource({"classpath*:spring/**.xml"})

 

运行项目的多个实例

勾选Allow parallel run
在这里插入图片描述
修改项目使用的端口号有2种方式

  • 在VM options中指定,示例: -Dserver.port=9000
  • 在Program arguments中指定,示例:–server.port=9000,注意此处是2根短横

这2种方式均会覆盖配置文件中指定的端口号。

 

资源文件的拷贝问题

运行、打包时resources下很多自定义的文件夹、文件都不会自动拷贝,需要我们配置一下pom.xml

<build>

    <!--配置resources的拷贝-->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.*</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.*</include>
            </includes>
        </resource>
    </resources>

</build>

如果已存在输出目录target文件夹,需要先删除target文件夹才会生效

 

读取resources下的文件

假设要读取的文件是 resources/template/1.txt

// 方式一   开头不加/
ClassPathResource classPathResource = new ClassPathResource("template/1.txt");
InputStream is = classPathResource.getInputStream();


// 方式二   开头要加/
InputStream is = this.getClass().getResourceAsStream("/template/1.txt");

 

SpEL的解析、计算

有时候需要将表达式放到数据表、nacos配置等外部位置,动态加载解析表达式,传入参数计算结果。
eg. 一个连续7天的抽奖活动,要求第一天中奖概率100%,每天的中奖概率依次降低10%

//表达式
String probabilityExpression = "1 - (#root['dayNum']-1) * 0.1";
//String probabilityExpression = "1 - (#this.get('dayNum')-1) * 0.1";
SpelExpressionParser spelExpressionParser = new SpelExpressionParser();
Expression expression = spelExpressionParser.parseExpression(probabilityExpression);

//参数,Object类型,常使用数组、集合、实体对象
Map<String, Object> extParams = new HashMap<>();
extParams.put("dayNum", dayNum);

//传入参数,计算结果
StandardEvaluationContext ctx = new StandardEvaluationContext(extParams);
Double result = expression.getValue(ctx, Double.class);

表达式

  • 对象用 .fieldName 来取字段值,map用 [‘key’] 来取值,数组用 [index] 来取元素。
  • 可以使用2个内置对象:#root、#this,都表示传入的参数(整体),#root是数据容器、上下文,用于取值;#this代表参数自身,即传入的map、实体等的引用,可以通过#this来调用map、实体等的方法。

更多用法可参考:https://docs.spring.io/spring-framework/docs/5.3.24/reference/html/core.html#expressions-language-ref

 

常见问题

运行、打包springboot项目时报错:找不到主类

可以尝试以下三种方式

  • mvn clean compile,重新编译(推荐)
  • 清除IDEA的缓存后重启IDEA
  • 在pom.xml中显式指定主类
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <!--指定主类-->
        <mainClass>com.chy.mall.MallApplication</mainClass>
    </configuration>
</plugin>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot 基本使用 的相关文章

随机推荐

  • Python实现识别图片内容的方法分析

    Python实现识别图片内容的方法分析 本文实例讲述了Python实现识别图片内容的方法 分享给大家供大家参考 具体如下 python识别图片内容 这里我的环境为windows64位 python2 7 14 需要用到PIL模块和tesse
  • springboot事务管理 注解@Transactional 无效原因,及解决办法

    1 不需要在启动类加上 EnableTransactionManagement EnableTransactionManagement是 spring tx 的注解 不是 spring boot 的 spring boot 会自动配置事务
  • 篇八:冒泡排序

    交换排序的一种 author xiaocui date 2022年08月02日 13 49 public class BubbleSort public static void main String args int arr new in
  • React 列表 & Keys

    React 列表 Keys const numbers 1 2 3 4 5 const listItems numbers map number gt li number li ReactDOM render ul listItems ul
  • leecode 题目5 最长回文子串(python)

    给你一个字符串 s 找到 s 中最长的回文子串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s cbbd 输出 bb 代码是根据B站上的一位up主写的 使用动态规划算法 从小字符串衍生相
  • css3新弹性盒子-flex-grow

    目录 flex grow 1 flex grow定义和用法 2 flex grow属性值 flex grow说明 flex grow实例 flex grow flex grow属性在CSS新弹性盒模型中是比较常用 想要用好它就先了解它的 语
  • 花卉识别卷积神经网络

    卷积神经网络做的花卉识别 keras 五分类 向日葵 雏菊 郁金香 玫瑰 蒲公英 之后更怎么做的
  • 【专题5: 硬件设计】 之 【68.开关电源 之 buck电路中的电感电流波形】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有 无所谓无的 这正如脚下的路 其实地上本没有路 走的人多了 也便成了路 原创不易 文章会持续更新 欢迎微信扫码关注公众号 承接 小程序 嵌入式 PC端项目开发 联系作者
  • Arduino基础入门篇31—LCD1602液晶显示

    LCD1602也叫1602字符型液晶 是一种专门用来显示字母 数字 符号的点阵型液晶模块 能同时显示16X2即32个字符 本篇我们来认识LCD1602 驱动它显示 Hello World 1 LCD1602介绍 对于单片机爱好者和电子爱好者
  • php-cgi.exe - FastCGI 进程超过了配置的请求超时时限

    解决方案一 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 内容转载 处理 php cgi exe FastCGI 进程超过了配置的请求超时时限 的问题 php技巧 脚本之家 详细错误 HTTP 错误 5
  • 【华为OD机试真题 JAVA】出错的或电路

    JS版 华为OD机试真题 JS 出错的或电路 标题 出错的或电路 时间限制 1秒 内存限制 262144K 语言限制 不限 某生产门电路的厂商发现某一批次的或门电路不稳定 具体现象为计算两个二进制数的或操作时 第一个二进制数中某两个比特位会
  • 利用Java对后端数据进行分页处理(Java假分页)

    代码如下 import java util Collections import java util List java分页 辅助器 public class PageHelper
  • HttpClient远程调用工具类

    文章目录 前言 一 HttpClient工具类 二 使用步骤 1 引入库 前言 提示 当前工具类get方式无法传分页数据 可自行篡改 不行就用post方式哈哈 提示 以下是本篇文章正文内容 下面案例可供参考 一 HttpClient工具类
  • Qt中显示摄像头数据(V4L2三)

    目录 一 通过V4l2来采集用qt显示 1 将V4L2获取摄像头数据封装成一个类 2 设置开始按钮开始采集数据 3 设置停止按钮停止采集数据 4 设置定时器不断采集数据 二 直接用qt多媒体模块来实现采集并且显示 1 在qt工程文件中添加
  • 【网络结构设计】7、RepVGG

    文章目录 一 背景 二 方法 2 1 使用简单结构的卷积神经网络的三个原因 2 2 使用多分支结构的训练时长 2 3 边端设备推理的重参数化 2 4 结构细节 三 效果 论文 RepVGG Making VGG style ConvNets
  • 解决野鸡大学水硕、水博?中国首次发布海外大学排名!

    本文分享中国首次发布的海外大学排名 来源 全国高校信息资料研究会与中国人民大学评价研究中心 新东方在线托福 青塔等平台 编辑 学妹 不久前 我国一科研机构首次发布了对海外学校的评估 网传 这或许会成为以后中国看待海归大学的背景考核依据之一
  • 深度学习:循环神经网络RNN及LSTM

    深度学习 循环神经网络RNN及LSTM 循环神经网络RNN 原理 代码 长短期记忆网络LSTM 原理 遗忘门 记忆门 输出门 代码 循环神经网络RNN 原理 对于传统的神经网络 它的信号流从输入层到输出层依次流过 同一层级的神经元之间 信号
  • 两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!

    两行css代码实现瀑布流 html css最简单的瀑布流实现方式且没有缺点 之前一直使用css position定位 js原生的方法实现 代码如下 html代码段
  • 因果推断理论框架 Potenial Outcomes Framework

    1 Potenial Outcomes Framework 因果效应通常无法直接计算 无法同时观测一个样本施加和不施加干预的结果 所以通常是通过观测数据推断 由于相关性 neq 因果性 观测结果不直接等于ATE Potenial Outco
  • SpringBoot 基本使用

    目录 热部署 方式一 Spring Boot DevTools 方式二 使用JRebel插件 web静态资源的存放 json日期时间设置 组件扫描 资源导入 运行项目的多个实例 资源文件的拷贝问题 读取resources下的文件 SpEL的