SpringBoot开发实用篇

热部署

热部署,就是发现问题,修改代码后立即生效,不需要自己再手动重启服务器

		
			org.springframework.boot
			spring-boot-devtools
			2.2.6.RELEASE
		

添加该依赖,重启项目后,点击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

		
			javax.validation
			validation-api
			2.0.1.Final
		
		
			org.hibernate.validator
			hibernate-validator
			6.0.18.Final
		
@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);
    }
}

你可能感兴趣的:(spring,boot)