storyset自定义插画网站,线上怎么做推广和宣传,百度推广助手手机版,lnmp利用wordpressSpringboot学习笔记——3 一、热部署1.1、手动启动热部署1.2、自动启动热部署1.3、热部署范围配置1.4、关闭热部署 二、配置高级2.1、第三方bean属性绑定2.2、松散绑定2.3、常用计量单位应用2.4、bean属性校验2.5、进制数据转换规则 三、测试3.1、加载测试专用属性3.2、加载测试… Springboot学习笔记——3 一、热部署1.1、手动启动热部署1.2、自动启动热部署1.3、热部署范围配置1.4、关闭热部署 二、配置高级2.1、第三方bean属性绑定2.2、松散绑定2.3、常用计量单位应用2.4、bean属性校验2.5、进制数据转换规则 三、测试3.1、加载测试专用属性3.2、加载测试类专用配置3.3、测试类中启动web环境3.4、发送虚拟请求3.5、匹配响应执行状态3.6、匹配响应体3.7、匹配响应头3.8、业务层测试事务回滚3.9、测试用例设置随机数据 四、数据层解决方案4.1、SQL4.1.1、内置数据源4.1.2、jdbcTemplate4.1.3、H2数据库 4.2、NoSQL4.2.1、redis下载安装与基本使用4.2.2、springboot整合redis4.2.3、Springboot读写Redis的客户端4.2.4、springboot操作Redis客户端实现技术切换jedis4.2.5、Mongodb4.2.6、Mongodb下载与安装 一、热部署
1.1、手动启动热部署
开启开发者工具
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdoptionaltrue/optional
/dependency激活热部署Ctrl F9 关于热部署 重启Restart)自定义开发代码包含类、页面、配置文件等加载位置restart类加载器重载ReLoad)jar包加载位置base类加载器
1.2、自动启动热部署
设置自动构建项目 IDEA失去焦点5秒以后启动热部署
1.3、热部署范围配置 默认不触发重启的目录列表 /META-INF/maven/META-INF/resources/resources/static/public/templates 自定义不参与重启排除项
devtools:restart:exclude: public/**,static/**1.4、关闭热部署
设置高优先级属性禁用热部署
SpringBootApplication
public class SsmpApplication {public static void main(String[] args) {System.setProperty(spring.devtools.restart.enabled,false);SpringApplication.run(SsmpApplication.class);}
}二、配置高级
2.1、第三方bean属性绑定
使用ConfigurationProperties为第三方bean绑定属性
Bean
ConfigurationProperties(prefix datasources)
public DruidDataSource dataSource(){DruidDataSource dataSource new DruidDataSource();return dataSource;
}datasources:driverClassName: com.mysql.cj.jdbc.DriverEnableConfigurationProperties注解可以将使用ConfigurationProperties注解对应的类加入Spring容器
SpringBootApplication
EnableConfigurationProperties(serverConfig.class)
public class Springboot0701Application {BeanConfigurationProperties(prefix datasources)public DruidDataSource dataSource(){DruidDataSource dataSource new DruidDataSource();return dataSource;}public static void main(String[] args) {ConfigurableApplicationContext run SpringApplication.run(Springboot0701Application.class, args);DruidDataSource dataSource run.getBean(DruidDataSource.class);System.out.println(dataSource.getDriverClassName());serverConfig serverConfig run.getBean(serverConfig.class);System.out.println(serverConfig.toString());}
}//Component
Data
ConfigurationProperties(prefix servers)
public class serverConfig {private String ipAddress;private int port;private long timeout;
}注意事项 EnableConfigurationProperties和Component不能同时使用 解除使用ConfigurationProperties注释警告
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactId
/dependency2.2、松散绑定
ConfigurationProperties绑定属性支持属性名宽松绑定
public class serverConfig {private String ipAddress;private int port;private long timeout;
}以下格式都支持
ip-Address: 189.176.0.1
ip_Address: 189.176.0.1
ipaddress: 189.176.0.1
IPADDRESS: 189.176.0.1 # 常量模式
ip-address: 189.176.0.1 # 烤肉串模式注意事项 宽松绑定不支持注解Value引用单个属性的方式 2.3、常用计量单位应用
Springboot支持JDK8提供的时间与空间计量单位
Component
Data
ConfigurationProperties(prefix servers)
public class serverConfig {private String ipAddress;private int port;private long timeout;DurationUnit(ChronoUnit.HOURS)private Duration serverTimeout;DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize;
}2.4、bean属性校验
开启数据校验有助于系统安全性J2EE规范中JSR303规范定义了一组有关数据校验相关的API
添加3SR303规范坐标与Hibernate校验框架对应坐标
dependencygroupIdjavax.validation/groupIdartifactIdvalidation-api/artifactId
/dependencydependencygroupIdorg.hibernate.validator/groupIdartifactIdhibernate-validator/artifactId
/dependency对Bean开启校验功能
Component
Data
ConfigurationProperties(prefix servers)
//2. 开启对当前bean的属性注入校验
Validated
public class serverConfig {
}设置校验规则
Component
Data
ConfigurationProperties(prefix servers)
//2. 开启对当前bean的属性注入校验
Validated
public class serverConfig {private String ipAddress;//3.设置具体的规则Max(value 8888,message 最大值不能超过8888)Min(value 202,message 最小值不能小于202)private int port;private long timeout;DurationUnit(ChronoUnit.HOURS)private Duration serverTimeout;DataSizeUnit(DataUnit.MEGABYTES)private DataSize dataSize;
}2.5、进制数据转换规则
字面值表达式导致出现问题
int: 0123 # 会判断为八进制的123导致转换出现问题注意yaml文件中对于数字的定义支持进制书写格式如需使用字符串请使用引号明确标注
string: 0123三、测试
3.1、加载测试专用属性
启动测试环境时可以通过properties参数设置测试环境专用的属性
//properties属性可以为当前测试用例添加临时的属性配置
SpringBootTest(properties {test.proptestValue2})
public class propertiesAndArgsTest {Value(${test.prop})private String msg;Testvoid testProperties(){System.out.println(msg);}
}优势比多环境开发中的测试环境影响范围更小仅对当前测试类有效
在启动测试环境时可以通过args参数设置测试环境专用的传入参数
//args属性可以为当前测试用例添加临时的命令行参数
SpringBootTest(args {--test.proptestValue3})
public class propertiesAndArgsTest {Value(${test.prop})private String msg;Testvoid testProperties(){System.out.println(msg);}
}3.2、加载测试类专用配置
使用Import注解加载当前测试类专用的配置
SpringBootTest
Import({MsgConfig.class})
public class ConfigTest {Autowiredprivate String msg;Testvoid test1(){System.out.println(msg);}
}可以加载测试范围配置应用于小范围测试环境
3.3、测试类中启动web环境
模拟端口
package com.smulll;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.DEFINED_PORT)
class Springboot0801ApplicationTests {Testvoid contextLoads() {}
}3.4、发送虚拟请求
虚拟请求测试
SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.DEFINED_PORT)
//开启虚拟MVC调用
AutoConfigureMockMvc
class Springboot0801ApplicationTests {Testvoid testWeb(Autowired MockMvc mvc) throws Exception {//创建虚拟请求当前访问/booksMockHttpServletRequestBuilder builder MockMvcRequestBuilders.get(/books);//执行请求ResultActions perform mvc.perform(builder);}
}3.5、匹配响应执行状态
虚拟请求状态匹配
Test
void testStatus(Autowired MockMvc mvc) throws Exception {//创建虚拟请求当前访问/booksMockHttpServletRequestBuilder builder MockMvcRequestBuilders.get(/books);//执行请求ResultActions perform mvc.perform(builder);//设置预期值与真实值进行比较测试成功通过失败测试停止//定义本次调用的预期值StatusResultMatchers status MockMvcResultMatchers.status();//预计本次调用的成功值状态200ResultMatcher ok status.isOk();//添加预计值到本次调用过程中进行匹配perform.andExpect(ok);
}3.6、匹配响应体
虚拟请求体匹配
Test
void testBody(Autowired MockMvc mvc) throws Exception {//创建虚拟请求当前访问/booksMockHttpServletRequestBuilder builder MockMvcRequestBuilders.get(/books);//执行请求ResultActions perform mvc.perform(builder);//设置预期值与真实值进行比较测试成功通过失败测试停止//定义本次调用的预期值ContentResultMatchers content MockMvcResultMatchers.content();//预计本次调用执行结果ResultMatcher result content.string(springboot);//添加预计值到本次调用过程中进行匹配perform.andExpect(result);
}虚拟请求体json匹配
Test
void testJSON(Autowired MockMvc mvc) throws Exception {//创建虚拟请求当前访问/booksMockHttpServletRequestBuilder builder MockMvcRequestBuilders.get(/books);//执行请求ResultActions perform mvc.perform(builder);//设置预期值与真实值进行比较测试成功通过失败测试停止//定义本次调用的预期值ContentResultMatchers content MockMvcResultMatchers.content();//预计本次调用执行结果ResultMatcher result content.json({\n \id\: 1,\n \type\: \springboot\,\n \name\: \springboot\,\n \description\: \springboot\\n });//添加预计值到本次调用过程中进行匹配perform.andExpect(result);
}3.7、匹配响应头
虚拟请求头匹配
Test
void testContentType(Autowired MockMvc mvc) throws Exception {//创建虚拟请求当前访问/booksMockHttpServletRequestBuilder builder MockMvcRequestBuilders.get(/books);//执行请求ResultActions perform mvc.perform(builder);//设置预期值与真实值进行比较测试成功通过失败测试停止//定义本次调用的预期值HeaderResultMatchers Header MockMvcResultMatchers.header();//预计本次调用执行结果ResultMatcher string Header.string(Content-Type, application/json);//添加预计值到本次调用过程中进行匹配perform.andExpect(string);
}3.8、业务层测试事务回滚
为测试用例添加事务SpringBoot会对测试用例对应的事务提交操作进行回滚
SpringBootTest
Transactional
public class TestSave {Autowiredprivate bookServer bookServer;
}如果想在测试用例中提交事务可以通过Rollback注解设置
SpringBootTest
Transactional
Rollback(false)
public class TestSave {
}3.9、测试用例设置随机数据
测试用例数据通常采用随机值进行测试使用SpringBoot提供的随机数为其赋值
testcase:book:id: ${random.int}name: ${random.value} #随机字符串MDS字符串32位type: ${random.int(10,100)}uuid: ${random.uuid} #随机uuidpublishTime: ${random.long}${random.int}表示随机整数${random.int(10)}表示10以内的随机数${random.int(10,20)}表示10到20的随机数其中()可以是任意字符例如[]!!均可
四、数据层解决方案
4.1、SQL
4.1.1、内置数据源
现有数据层解决方案技术选型
Druid MyBatis-Plus MySQL数据源DruidDataSource持久化技术MyBatis-PlusMyBatis数据库MySQL
SpringBoot提供了3种内嵌的数据源对象供开发者选择 HikariCP默认内置数据源对象Tomcat提供DataSourceHikariCP不可用的情况下且在web环境中将使用tomcat服务器配置的数据源对象Commons DBCPHikari不可用tomcat数据源也不可用将使用dbcp数据源
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springbootbase?serverTimezoneUTCusername: rootpassword: 123456通用配置无法设置具体的数据源配置信息仅提供基本的连接相关配置如需配置在下一级配置中设置具体设定
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springbootbase?serverTimezoneUTCusername: rootpassword: 123456hikari:maximum-pool-size: 504.1.2、jdbcTemplate
内置持久化解决方案——JdbcTemplate
SpringBootTest
class Springboot0901ApplicationTests {Testvoid testJdbc(){String sql select * from tb_book where id1;ListBook list jdbcTemplate.query(sql, new RowMapperBook() {Overridepublic Book mapRow(ResultSet rs, int rowNum) throws SQLException {Book book new Book();book.setId(rs.getInt(id));book.setName(rs.getString(name));book.setType(rs.getString(type));book.setDescription(rs.getString(description));return book;}});System.out.println(list);}
}dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId
/dependencyspring:
jdbc:template:query-timeout: -1 #查询超时时间max-rows: 500 #最大行数fetch-size: -1 #缓存行数4.1.3、H2数据库 springBoot提供了3种内嵌数据库供开发者选择提高开发测试效率 H2HSQLDerby 导入H2相关坐标
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId
/dependency
dependencygroupIdcom.h2database/groupIdartifactIdh2/artifactIdscoperuntime/scope
/dependency设置当前项目为web工程并配置H2管理控制台参数
server: port: 80
spring:h2:console: path: /h2enabled: true访问用户名sa默认密码123456 设置访问的数据源
server:port: 80
spring:h2:console:path: /h2enabled: truedatasource:driver-class-name: org.h2.Driverurl: jdbc:h2:~/testusername: sapassword: 123456H2数据库控制台仅用于开发阶段线上项目请务必关闭控制台功能
server:port: 80
spring:h2:console:path: /h2enabled: false4.2、NoSQL
4.2.1、redis下载安装与基本使用 Redis是一款key-value存储结构的内存级NoSQL数据库 支持多种数据存储格式支持持久化支持集群 redis下载 redis下载Windows 安装启动 Windows解压安装或一键式安装服务端启动命令 redis-server.exe redis.windows.conf客户端启动命令 redis-cli.exe4.2.2、springboot整合redis
导入SpringBoot整合Redis坐标
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency配置Redis采用默认配置
spring:data:redis:host: localhostport: 6379主机localhost默认端口6379默认
RedisTemplate提供操作各种数据存储类型的接口API
客户端RedisTemplate
SpringBootTest
class Springboot10RedisApplicationTests {Autowiredprivate RedisTemplate redisTemplate;Testvoid set() {ValueOperations valueOperations redisTemplate.opsForValue();valueOperations.set(age,19);}Testvoid get(){ValueOperations valueOperations redisTemplate.opsForValue();Object o valueOperations.get(age);System.out.println(o);}
}4.2.3、Springboot读写Redis的客户端
StringRedisTemplate以字符串作为key和value与Redis客户端操作等效
SpringBootTest
public class RedisTest {Autowiredprivate StringRedisTemplate stringRedisTemplate;Testvoid Demo1(){ValueOperationsString, String ops stringRedisTemplate.opsForValue();System.out.println(ops.get(name));}
}4.2.4、springboot操作Redis客户端实现技术切换jedis
配置客户端
spring:data:redis:host: localhostport: 6379client-type: jedis配置客户端专用属性
spring:data:redis:host: localhostport: 6379client-type: jedislettuce:pool:max-active: 16jedis:pool:max-active: 16lettcus与jedis区别 jedis连接Redis服务器是直连模式当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用这样整体性能就大受影响。lettcus基于Netty框架进行与Redis服务器连接底层设计中采用StatefulRedisConnection。StatefulRedisConnection自身是线程安全的可以保障并发访问安全问题所以一个连接可以被多线程复用。当然lettcus也支持多连接实例一起工作。
4.2.5、Mongodb
MongoDB是一个开源、高性能、无模式的文档型数据库。NoSQL数据库产品中的一种是最像关系型数据库的非关系型数据库淘宝用户数据 存储位置:数据库特征:永久性存储修改频度极低 游戏装备数据、游戏道具数据 存储位置:数据库、Mongodb特征:永久性存储与临时存储相结合、修改频度较高 直播数据、打赏数据、粉丝数据 存储位置:数据库、Mongodb特征:永久性存储与临时存储相结合修改频度极高 物联网数据 存储位置:Mongodb特征:临时存储修改频度飞速
4.2.6、Mongodb下载与安装
Windows版Mongo下载 下载地址 Windows版Mongo安装 解压后设置数据目录 Windows版Mongo启动 服务端启动 mongod --dbpath..\data\db客户端启动 mongo --host127.0.8.1 --port27017 文章转载自: http://www.morning.tfpbm.cn.gov.cn.tfpbm.cn http://www.morning.wrlcy.cn.gov.cn.wrlcy.cn http://www.morning.qllcm.cn.gov.cn.qllcm.cn http://www.morning.hlxxl.cn.gov.cn.hlxxl.cn http://www.morning.slqgl.cn.gov.cn.slqgl.cn http://www.morning.dqpd.cn.gov.cn.dqpd.cn http://www.morning.dmchips.com.gov.cn.dmchips.com http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.dpwcl.cn.gov.cn.dpwcl.cn http://www.morning.uqrphxm.cn.gov.cn.uqrphxm.cn http://www.morning.rfgkf.cn.gov.cn.rfgkf.cn http://www.morning.rshkh.cn.gov.cn.rshkh.cn http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn http://www.morning.gqjwz.cn.gov.cn.gqjwz.cn http://www.morning.nwrzf.cn.gov.cn.nwrzf.cn http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn http://www.morning.jqhrk.cn.gov.cn.jqhrk.cn http://www.morning.gtkyr.cn.gov.cn.gtkyr.cn http://www.morning.mrbzq.cn.gov.cn.mrbzq.cn http://www.morning.bryyb.cn.gov.cn.bryyb.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.xqcgb.cn.gov.cn.xqcgb.cn http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.fzlk.cn.gov.cn.fzlk.cn http://www.morning.bxyzr.cn.gov.cn.bxyzr.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn http://www.morning.jtmql.cn.gov.cn.jtmql.cn http://www.morning.kngqd.cn.gov.cn.kngqd.cn http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn http://www.morning.dgxrz.cn.gov.cn.dgxrz.cn http://www.morning.tnqk.cn.gov.cn.tnqk.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.jlgjn.cn.gov.cn.jlgjn.cn http://www.morning.cwyfs.cn.gov.cn.cwyfs.cn http://www.morning.zxfdq.cn.gov.cn.zxfdq.cn http://www.morning.fmrd.cn.gov.cn.fmrd.cn http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn http://www.morning.jfmjq.cn.gov.cn.jfmjq.cn http://www.morning.jzfrl.cn.gov.cn.jzfrl.cn http://www.morning.rqfnl.cn.gov.cn.rqfnl.cn http://www.morning.xjqkh.cn.gov.cn.xjqkh.cn http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn http://www.morning.wwgpy.cn.gov.cn.wwgpy.cn http://www.morning.bftqc.cn.gov.cn.bftqc.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.hblkq.cn.gov.cn.hblkq.cn http://www.morning.yjfzk.cn.gov.cn.yjfzk.cn http://www.morning.mzkn.cn.gov.cn.mzkn.cn http://www.morning.geledi.com.gov.cn.geledi.com http://www.morning.tbcfj.cn.gov.cn.tbcfj.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.jqkjr.cn.gov.cn.jqkjr.cn http://www.morning.sbrpz.cn.gov.cn.sbrpz.cn http://www.morning.rxnl.cn.gov.cn.rxnl.cn http://www.morning.bfrsr.cn.gov.cn.bfrsr.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.kpbn.cn.gov.cn.kpbn.cn http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn http://www.morning.gxtbn.cn.gov.cn.gxtbn.cn http://www.morning.xkyfq.cn.gov.cn.xkyfq.cn http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn http://www.morning.wgtnz.cn.gov.cn.wgtnz.cn http://www.morning.sjjq.cn.gov.cn.sjjq.cn http://www.morning.trrd.cn.gov.cn.trrd.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.fglyb.cn.gov.cn.fglyb.cn http://www.morning.dqwykj.com.gov.cn.dqwykj.com http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.gqwpl.cn.gov.cn.gqwpl.cn http://www.morning.tpmnq.cn.gov.cn.tpmnq.cn http://www.morning.msbct.cn.gov.cn.msbct.cn http://www.morning.kbqbx.cn.gov.cn.kbqbx.cn http://www.morning.ykrck.cn.gov.cn.ykrck.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn