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。

监控

  • 监控服务状态是否宕机
  • 日志
  • 各种服务运行指标,如内存,虚拟机,线程,请求
  • 管理服务,下线上线等
相关推荐
程序员清风9 分钟前
贝壳一面:年轻代回收频率太高,如何定位?
java·后端·面试
落羽的落羽15 分钟前
【C++】简单介绍lambda表达式
c++·学习
考虑考虑20 分钟前
Java实现字节转bcd编码
java·后端·java ee
charlie11451419129 分钟前
前端三件套简单学习:HTML篇1
开发语言·前端·学习·html
我命由我1234538 分钟前
Photoshop - Photoshop 创建图层蒙版
运维·学习·ui·课程设计·设计·ps·美工
我登哥MVP1 小时前
Java 网络编程学习笔记
java·网络·学习
AAA修煤气灶刘哥1 小时前
ES 聚合爽到飞起!从分桶到 Java 实操,再也不用翻烂文档
后端·elasticsearch·面试
爱读源码的大都督1 小时前
Java已死?别慌,看我如何用Java手写一个Qwen Code Agent,拯救Java
java·人工智能·后端
LiuYaoheng1 小时前
【Android】View 的基础知识
android·java·笔记·学习
勇往直前plus1 小时前
Sentinel微服务保护
java·spring boot·微服务·sentinel