springboot的学习(三):开发相关

简介

一些开发测试时用到的技术。

springboot

热部署

修改了代码,服务器不需要重启可以直接看到新的修改的效果。仅仅加载当前开发者自定义开发的资源,不加载jar资源。

在pom.xml配置文件中添加:

xml 复制代码
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <version>2.3.12.RELEASE</version>
            </dependency>

修改了内容之后,点击build project即可。

设置自动热部署

可以设置成不用点build project,项目自动的进行构建。

设置在项目运行中也可以自动构建,在idea上ctrl+alt+shift+/

热部署作用范围

可以设置一些目录的修改是不会触发热部署的。在yml配置文件中:

yaml 复制代码
devlops:
  restart:
    exclude: 路径
关闭热部署
yaml 复制代码
devlops:
  restart:
    enabled: false

第三方bean绑定属性

使用@ConfigurationProperties(prefix = "yml中的属性")注解为第三方的bean绑定属性。

例子:

给datasource对象设置driverClassName

在配置文件中:

yaml 复制代码
datasource:
  driverClassName: com.mysql.jdbc.Driver

在java类中:

java 复制代码
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource datasource(){
DruidDataSource ds = new DruidDataSource ();
return ds;
}

为bean绑定属性

在配置文件application.xml中:

yaml 复制代码
servers:
  ipAddress: 192.168.0.1
  port:8888
  timeout: -1

在pojo类中

java 复制代码
@Component
@Data
@ConfigurationProperties(prefix="service")
public Class ServletConfig{
private String ipAddress;
private int port;
private long timeout;
}

注意:@ConfigurationProperties是松散绑定的

@EnableConfigurationProperties

可以将使用@ConfigurationProperties注解的类加入到spring容器中,为了方便统一管理,可以更便捷的看到哪些类使用了ConfigurationProperties。这个注解作用在启动类上,使用了这个注解,在实体类上就不能使用@component修饰了。

bean属性校验

在pom.xml文件中导入jsr303规范坐标和hibernate校验框架坐标:

xml 复制代码
            <dependency>
            	<groupId>javax.validation</groupId>
          	    <artifactId>validation-api</artifactId>
            </dependency>
            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
            </dependency>

在bean中,@Validated开启校验,属性上面可以添加各种注解来校验,如果不符合规范,会提示注解中的message信息。

java 复制代码
@Validated
public class User {
    private String name;
	@Max(value= 35,message="最大值不超过4")
    private Integer age;
    }

yaml配置文件数据转换

在配置文件yaml中,数字是支持2进制,8进制,16进制的

yaml 复制代码
datasource:
  driverClassName: com.mysql.jdbc.Driver
  password: 0123

在测试类中使用@value读取

java 复制代码
    @Value("${datasource.datatest}")
    private String datatest;
    @Test
void test01(){
    System.out.println(datatest);
}

springboot是把0123当成了八进制的数字了

可以在yaml中添加上双引号当成字符串接受。

yaml 复制代码
datasource:
  driverClassName: com.mysql.jdbc.Driver
  datatest: "0123"

测试

临时属性

在测试类中,可以给测试类加上只在这个类中生效的属性配置,这个临时配置属性可以覆盖掉yaml中设置的属性。

yaml中有这个配置

yaml 复制代码
datasource:
  driverClassName: com.mysql.jdbc.Driver
  datatest: "0123"

使用@SpringBootTest(properties = {"datasource.datatest=98765"})设置一个临时属性datasource.datatest

java 复制代码
package com.christ.demo.test;

import com.christ.demo.DemoApplication;
import com.christ.demo.demos.service.test;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(properties = {"datasource.datatest=98765"})
class DemoApplicationTests {
    @Value("${datasource.datatest}")
    private String datatest;
    @Test
void test01(){
    System.out.println(datatest);
}
}

运行结果:

也可以使用args属性设置,如果两个都有设置,以args为准

java 复制代码
package com.christ.demo.test;

import com.christ.demo.DemoApplication;
import com.christ.demo.demos.service.test;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(properties = {"datasource.datatest=98765"},args={"--datasource.datatest=7654321"})
class DemoApplicationTests {

    @Value("${datasource.datatest}")
    private String datatest;
    @Test
void test01(){
    System.out.println(datatest);
}
}

加载测试专用配置bean

可以使用@Import(类名.class)给测试类注入bean,就可以在测试类中使用@Autowired注解自动装配使用类了。

java 复制代码
@SpringBootTest
@Import(datasource.class)
class DemoApplicationTests {
    @Autowired
    private datasource datasource;
    @Test
	void test01(){
	datasource.say();}
}

测试controller层

要测试controller,需要有web环境,可以在测试类中的@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)@AutoConfigureMockMvc开启虚拟mvc调用

java 复制代码
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)@Import(datasource.class)
@AutoConfigureMockMvc
//开启虚拟mvc调用
class DemoApplicationTests {
    @Test
void test01(@Autowired MockMvc mvc) throws Exception {
    //创建虚拟请求,
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/users");
        //执行请求
        ResultActions actions = mvc.perform(builder);
        //然后可以定个各种响应的预期值,做断言判断,各个组成部分信息是否匹配
         StatusResultMatchers status = MockMvcResultMatchers.status();
         ResultMatcher ok = status.isOk();
         actions.andExpect(ok);
		
		 HeaderResultMatchers header = MockMvcResultMatchers.header();
         ResultMatcher contentType = header.string("Context-Type", "application/json");
         actions.andExpect(contentType); 

        ContentResultMatchers content = MockMvcResultMatchers.content();
        ResultMatcher json = content.json("{\"name\":\"christ\"}");
        actions.andExpect(json);
    }
}

测试使用事务回滚

不希望测试的时候产生的数据存储到数据库中,即不产生垃圾数据,可以在测试类中使用@Transaction注解。

数据层解决方案

数据源:druiddatasource

持久化技术:mybatis-plus或mybatis

数据库:mysql

如果配置文件中没有指定数据源,springboot默认的数据源是hikari,或者Tomcat中的datasource。

监控

  • 监控服务状态是否宕机
  • 日志
  • 各种服务运行指标,如内存,虚拟机,线程,请求
  • 管理服务,下线上线等
相关推荐
向前看-1 小时前
验证码机制
前端·后端
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭2 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
超爱吃士力架2 小时前
邀请逻辑
java·linux·后端
南宫生2 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__3 小时前
Web APIs学习 (操作DOM BOM)
学习
AskHarries4 小时前
Spring Cloud OpenFeign快速入门demo
spring boot·后端
数据的世界015 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐5 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
isolusion5 小时前
Springboot的创建方式
java·spring boot·后端
Yvemil76 小时前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务