【转】springBoot(4)---热部署,配置⽂件使⽤
热部署,配置⽂件使⽤
⼀、热加载
spring为开发者提供了⼀个名为spring-boot-devtools的模块来使Spring Boot应⽤⽀持热部署,提⾼开发者的开发效率,⽆需⼿动重启Spring Boot应⽤。
devtools的原理
深层原理是使⽤了两个ClassLoader,⼀个Classloader加载那些不会改变的类(第三⽅Jar包),另⼀个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建⼀个restart ClassLoader,由于需要加载的类相⽐较少,所以实现了较快的重启时间。
官⽅地址:docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools
实现热部署,⾸先要引⼊:spring-boot-devtools.jar包
核⼼依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
添加依赖后,在ide⾥⾯重启应⽤,后续修改后马上可以⽣效
默认不被热部署的⽂件
1、/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates
2、指定⽂件不进⾏热部署lude=static/**,public/**
在开发中,我们会思考⼀个问题?
如果你写⼀个逻辑代码,需要好⼏个⽂件,总不能你每保存⼀次就进⾏⼀次热部署,这⾥有个解决⽅法。
在application.properties添加⼿⼯触发重启
#指定某些⽂件不进⾏监听,即不会进⾏热加载
#lude=application.properties
#通过触发器,去控制什么时候进⾏热加载部署新的⽂件
然后在src\main\resources⽬录下,添加⽂件
version=1
这样你每次改好代码,不会每次保存就热部署,⽽是改好代码后,改version=2就会进⾏热部署。
注意点:⽣产环境不要开启这个功能,如果⽤java -jar启动,springBoot是不会进⾏热部署的
⼆、SpringBoot注解把配置⽂件⾃动映射到属性和实体类实战
⽅式⼀、Controller上⾯配置
简介:讲解使⽤@value注解配置⽂件⾃动映射到属性和实体类
1、配置⽂件加载
⽅式⼀
spring ioc注解
1、Controller上⾯配置
@PropertySource({"classpath:resource.properties"})
2、增加属性
@Value("${test.name}")
private String name;
举例
上篇的⽂件上传的地址我是写死的。
这样显然不科学,这⾥改成写在1.application.properties配置⽂件⾥。
#⽂件上传路径配置
web.file.path=C:/Users/chenww/Desktop/springbootstudy/springbootstudy/src/main/resources/static/images/
2在FileController 类中
@Controller
@PropertySource({"classpath:application.properties"})
public class FileController {
//⽂件放在项⽬的images下
//    private  String filePath =  "C:\\Users\\chenww\\Desktop\\springbootstudy\\springbootstudy\\src\\main\\resources\\static\\images\\"; @Value("${web.file.path}")
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
#测试配置⽂件路径
test.domain=www.jincou
test.name=springboot
2.创建ServerSettings实体
import org.springframework.beans.factory.annotation.Value;
import org.t.properties.ConfigurationProperties;
import t.annotation.PropertySource;
import org.springframework.stereotype.Component;
//服务器配置
@Component
@PropertySource({"classpath:application.properties"})
@ConfigurationProperties
public class ServerSettings {
//名称test.domain是key值
@Value("${test.domain}")
private String name;
//域名地址
@Value("${test.name}")
private String domain;
//提供set和get⽅法
}
三创建GetController
import del.ServerSettings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GetController {
//需要注⼊
@Autowired
private ServerSettings serverSettings;
@GetMapping("/v1/test_properties")
public Object testPeroperties(){
return serverSettings;
}
}
页⾯效果
其实上⾯还可以做个优化:
创建ServerSettings实体
import org.t.properties.ConfigurationProperties;
import t.annotation.PropertySource;
import org.springframework.stereotype.Component;
//服务器配置
@Component
@PropertySource({"classpath:application.properties"})
@ConfigurationProperties(prefix="test")
//这⾥加了个test前缀
public class ServerSettings {
//这是不需要写vlaue标签,只要text.name去掉前缀test后的name和这⾥name相同,就会⾃动赋值
private String name;
//域名地址
private String domain;
//提供set和get⽅法
}
想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。上尉【6】

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。