热部署
热部署,就是发现问题,修改代码后立即生效,不需要自己再手动重启服务器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
添加该依赖,重启项目后,点击Build中的Build project即可热部署。或ctrl+f9
重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器重载(ReLoad) : jar包,加载位置base类加载器
而热部署仅仅是重启。
自动build
setting中Build中Compiler中选中Build project automatically
java页面中ctrl+alt+shift+/,点击1.registry,勾选compiler.automake.allow.when.app.running
就能自动热部署了:并且是当Idea工具失去焦点5秒后自动进行热部署。
java类中发生变化会参与热部署,核心配置文件也参与热部署,而页面的改变不会参与热部署
详见springboot基础16
配置高级
可对一个类使用@Component同时@ConfigurationProperties(prefix = "datasource")//yml中的属性名。标记一个用于自动装配的类,将yml对应部分的内容装配到该类属性可宽松绑定,驼峰、中划线、下划线、常量均可,需提供set方法,在别的类中@Autowired该类即可。绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
或在引导类上加 @EnableConfigurationProperties(MPConfig.class),可在配置类上不用@Component。
但若,加载的bean不是自定义的,而是第三方提供的
可在方法上加@Bean,返回对象,然后被接管。
松散绑定
@ConfigurationProperties(prefix = "datasource")//yml中的属性名,标记一个用于自动装配的类,将yml对应部分的内容装配到该类属性可宽松绑定,驼峰、中划线、下划线、常量均可,需提供set方法,在别的类中@Autowired该类即可。绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符
@Value("${userList[0].name}")直接读取yml配置属性,不支持宽松绑定
详见SpringBoot基础认识_阳光明媚UPUP的博客-CSDN博客
的yml定义和读取属性
单位
server:
port: 81
serverTimeOut: 3 #单位不明,可能毫秒
#dataSize: 10 #可不加单位,在自动装配的配置类加上空间单位
dataSize: 10MB #可加单位
@Data
@Component
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
private String port;
@DurationUnit(ChronoUnit.DAYS)
private Duration serverTimeOut;//时间单位
//还有空间单位
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
}
数据校验
开启数据校验有助于系统安全性,J2EE规范中JSR303规范定义了一组有关数据校验相关的API
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.18.Final</version>
</dependency>
@Data
@Component
@ConfigurationProperties(prefix = "servers")
@Validated//开启数据校验
public class ServerConfig {
//@Max(value = 8888,message = "最大不能超过8888")
@Min(value = 202,message = "最小不能低于202")
private String port;
@DurationUnit(ChronoUnit.DAYS)
private Duration serverTimeOut;//时间单位
//还有空间单位
@DataSizeUnit(DataUnit.MEGABYTES)
private DataSize dataSize;
}
server:
port: 9999
启动报提示信息
yml中的密码如果为全数字可能会转义
如密码0127,用@Values得到的就是87,解决方式加一个引号引起来”0127“即可
测试
临时加配置参数
//@SpringBootTest(properties = {"test.prop=testValue1"})//注解参数的临时属性配置能够覆盖yml
//@SpringBootTest(args = {"--test.prop=testValue2"})//外部临时属性命令行
@SpringBootTest(args = {"--test.prop=testValue2"},properties = {"test.prop=testValue1"})//命令行优先级更高
class SpringbootBeginQuickstartApplicationTests {
@Value("${test.prop}")
private String msg;
@Test
void contextLoads() {
System.out.println(msg);
}
}
临时加载其他的bean
我们想要加一些临时配置,比如临时加载其他的bean,辅助我们测试
@SpringBootTest
@Import({MsgConfig.class})
class SpringbootBeginQuickstartApplicationTests {
@Autowired
private String msg;
@Test
void contextLoads() {
System.out.println(msg);
}
}