热部署,配置文件使用

一、热加载

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools

实现热部署,首先要引入:spring-boot-devtools.jar包

核心依赖包:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <optional>true</optional>
  5. </dependency>

添加依赖后,在ide里面重启应用,后续修改后马上可以生效

默认不被热部署的文件
1、/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates
2、指定文件不进行热部署 spring.devtools.restart.exclude=static/**,public/**

在开发中,我们会思考一个问题?

如果你写一个逻辑代码,需要好几个文件,总不能你每保存一次就进行一次热部署,这里有个解决方法。

在application.properties添加手工触发重启

  1. #指定某些文件不进行监听,即不会进行热加载
  2. #spring.devtools.restart.exclude=application.properties
  3.  
  4. #通过触发器,去控制什么时候进行热加载部署新的文件
  5. spring.devtools.restart.trigger-file=trigger.txt

然后在src\main\resources目录下,添加trigger.txt文件

  1. version=

这样你每次改好代码,不会每次保存就热部署,而是改好代码后,改version=2就会进行热部署。

注意点:生产环境不要开启这个功能,如果用java -jar启动,springBoot是不会进行热部署的

二、SpringBoot注解把配置文件自动映射到属性和实体类实战

方式一、Controller上面配置

简介:讲解使用@value注解配置文件自动映射到属性和实体类
1、配置文件加载
方式一
1、Controller上面配置
@PropertySource({"classpath:resource.properties"})
2、增加属性
@Value("${test.name}")
private String name;

举例

上篇的文件上传的地址我是写死的。

这样显然不科学,这里改成写在1.application.properties配置文件里。

  1. #文件上传路径配置
  2. web.file.path=C:/Users/chenww/Desktop/springbootstudy/springbootstudy/src/main/resources/static/images/

2在FileController 类中

  1. @Controller
  2. @PropertySource({"classpath:application.properties"})
  3. public class FileController {
  4.  
  5. //文件放在项目的images下
  6. // private String filePath = "C:\\Users\\chenww\\Desktop\\springbootstudy\\springbootstudy\\src\\main\\resources\\static\\images\\";
  7. @Value("${web.file.path}")
  8. private String filePath;

总结:

1:@PropertySource代表读取哪个文件

2:@Value通过key得到value值

方式二:实体类配置文件

步骤:
1、添加 @Component 注解;
2、使用 @PropertySource 注解指定配置文件位置;
3、使用 @ConfigurationProperties 注解,设置相关属性;

4、必须 通过注入IOC对象Resource 进来 , 才能在类中使用获取的配置文件值。
@Autowired
private ServerSettings serverSettings;

案例:

1.在application.properties

  1. #测试配置文件路径
  2. test.domain=www.jincou.com
  3. test.name=springboot

2.创建ServerSettings实体

  1. import org.springframework.beans.factory.annotation.Value;
  2. import org.springframework.boot.context.properties.ConfigurationProperties;
  3. import org.springframework.context.annotation.PropertySource;
  4. import org.springframework.stereotype.Component;
  5.  
  6. //服务器配置
  7.  
  8. @Component
  9. @PropertySource({"classpath:application.properties"})
  10. @ConfigurationProperties
  11.  
  12. public class ServerSettings {
  13.  
  14. //名称test.domain是key值
  15. @Value("${test.domain}")
  16. private String name;
  17. //域名地址
  18. @Value("${test.name}")
  19. private String domain;
  20.  
  21. //提供set和get方法
  22. }

三创建GetController

  1. import com.jincou.model.ServerSettings;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5.  
  6. @RestController
  7. public class GetController {
  8.  
  9. //需要注入
  10. @Autowired
  11. private ServerSettings serverSettings;
  12.  
  13. @GetMapping("/v1/test_properties")
  14. public Object testPeroperties(){
  15.  
  16. return serverSettings;
  17. }
  18. }

页面效果

其实上面还可以做个优化:

创建ServerSettings实体

  1. import org.springframework.boot.context.properties.ConfigurationProperties;
  2. import org.springframework.context.annotation.PropertySource;
  3. import org.springframework.stereotype.Component;
  4.  
  5. //服务器配置
  6.  
  7. @Component
  8. @PropertySource({"classpath:application.properties"})
  9. @ConfigurationProperties(prefix="test")
  10. //这里加了个test前缀
  11. public class ServerSettings {
  12.  
  13. //这是不需要写vlaue标签,只要text.name去掉前缀test后的name和这里name相同,就会自动赋值
  14. private String name;
  15.  
  16. //域名地址
  17. private String domain;
  18.  
  19. //提供set和get方法
  20. }

想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。上尉【6】

springBoot(4)---热部署,配置文件使用的更多相关文章

  1. Springboot静态文件不更新的解决办法,以及Springboot实现热部署

    Springboot静态文件不更新的解决办法,以及Springboot实现热部署 原文链接:https://www.cnblogs.com/blog5277/p/9271882.html 原文作者:博 ...

  2. springBoot开启热部署

    springBoot开启热部署 这里使用devtools工具开启热部署 〇.搭建springbboot基础环境 一.添加依赖 <dependency> <groupId>org ...

  3. SpringBoot SpringCloud 热部署 热加载 热调试

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] Crazy-Sp ...

  4. idea+spring-boot+devtools热部署

    idea+spring-boot+devtools热部署 标签: spring-boot 2017-03-20 14:45 2635人阅读 评论(1) 收藏 举报  分类: spring-boot m ...

  5. SpringBoot工程+热部署进行远程调试

    本文转载自:https://blog.csdn.net/qq_31868349/article/details/78553901 SpringBoot工程+热部署进行远程调试 本地端添加配置 在pom ...

  6. spring-boot项目热部署以及spring-devtools导致同类不能转换

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

  7. SpringBoot工程热部署

    SpringBoot工程热部署 1.在pom文件中添加热部署依赖 <!-- 热部署配置 --> <dependency> <groupId>org.springfr ...

  8. 从零开始学习springboot之热部署的配置

    各位看官大家好,博主之前因为毕业设计以及毕业旅游耽搁了好长一段时间没有更新博客了,从今天起又会慢慢开始学习啦. 今天主要是来学习springboot热部署的配置. 一. 热部署 我们通常在修改某些文件 ...

  9. springboot 配置热部署 及 热部署后依旧是404的坑

    springboot配置热部署的教程网上一大堆: 个人喜欢这种方式: https://www.cnblogs.com/winner-0715/p/6666579.html 本文主要强调的是,大家如果配 ...

随机推荐

  1. SHELL脚本学习-练习写一个脚本3

    #通过ping命令测试192.168.1段的所有主机是否在线,如果在线就显示is up并显示蓝色,如果不在线就显示is down. #!/bin/bash #Program Description: ...

  2. <taglib>报错

    问题:web.xml中<taglib>报错 2.3版本可以直接卸载<web-app>中 2.4及之后放在<jsp-config>中 <jsp-config&g ...

  3. appium sendkeys 输入数字丢失问题

    参考:https://blog.csdn.net/rainshine1190/article/details/82814503

  4. php7 三元运算 精简

    $abc = isset($_GET['name'])?$_GET['name']:'abc'; // 5.+ $abcd = $_GET[

  5. redis_列表对象

    <Redis设计与实现>中说:redis列表对象有两种底层编码格式:ziplist.linkedlist,其中ziplist用压缩列表实现.linkedlist用双向链表实现 但我在实践中 ...

  6. win10更新永久关闭

    最烦开发的时候windows来个更新 http://www.ghost580.com/win10/2016-10-21/17295.html

  7. Python3--Numpy

    数组的形状是它有多少行和列,上面的数组有5行和5列,所以它的形状是(5,5). itemsize属性是每个项占用的字节数.这个数组的数据类型是int 64,一个int 64中有64位,一个字节中有8位 ...

  8. 【Spring】入门HelloWorld

    参考:https://www.yiibai.com/spring/spring-tutorial-for-beginners.html 一.创建项目 1.利用IntelliJ创建Maven项目 2.配 ...

  9. Django积木块六——验证用户是否登录

    验证用户是否登录 # 开始在用户登录的时候验证结束后login登录 # request.user.is_authenticated() {% if request.user.is_authentica ...

  10. python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode

    解决办法1. FILE_OBJECT= open('order.log','r', encoding='UTF-8') 解决办法2. FILE_OBJECT= open('order.log','rb ...