当前位置: 首页 > news >正文

建设网站有哪些目的是什么意思网页设计师简历

建设网站有哪些目的是什么意思,网页设计师简历,深圳网站优化技巧,网站下载视频软件一.基础数据回显说明 微服务项目中由于从服务独立的角度考虑,对数据库做了分库的处理。对于基础数据表来说,各个服务都是需要的。项目中在使用基础数据时,往往是在sql中写连接然后获取基础数据的名称。例: select wi.name,bc.ci…

一.基础数据回显说明

微服务项目中由于从服务独立的角度考虑,对数据库做了分库的处理。对于基础数据表来说,各个服务都是需要的。项目中在使用基础数据时,往往是在sql中写连接然后获取基础数据的名称。例:

select wi.name,bc.city_namefrom wms_info wileft join bas_city bc on wi.city_code = bc.city_codewhere wi.id=#{id}

由于做了分库处理,要保证各个业务库中都存一份基础数据表并且保证基础数据一致是很难做到的。这里我们用另外一种方式替换sql中的连接处理,实现基础数据回显功能。

实现思路:将基础数据缓存到redis中,数据发送给第三方或者web前端页面时,在做序列化的时间节点将基础数据代码替换为基础数名称。

二.序列化和反序列化

当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。而 java 是面向对象的开发方式,一切都是 java 对象,想要实现 java 对象的网络传输,就可以使用序列化和反序列化来实现。发送方将需要发送的 Java 对象序列化转换为字节序列,然后在网络上传送;接收方接收到字符序列后,使用反序列化从字节序列中恢复出 Java 对象。在网络中数据的传输必须是序列化形式来进行的。

序列化执行时间节点。

响应处理(Response Handling):当一个Spring Boot应用的控制器方法处理完请求后,返回的对象会被自动序列化为JSON(如果使用了Spring MVC的默认配置)。
使用RestTemplate或WebClient:在使用这些Spring提供的REST客户端发送请求时,对象会在发送前被序列化为JSON或其他格式。

三.代码实现

1.基础数据回显类型枚举

package infosky.dmsp.util.redisBas;import lombok.AllArgsConstructor;
import lombok.Getter;/*** 基础数据回显类型枚举*/
@Getter
@AllArgsConstructor
public enum RedisBasTypeEnum {/*** 承运人*/DMSP_BAS_CARRIER("dmsp_bas_carrier"),/*** 城市*/DMSP_BAS_CITY("dmsp_bas_city");private final String key;
}

2.自定义基础数据回显注解

package infosky.dmsp.util.redisBas;import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 基础数据回显注解* -将基础数据保存到redis中,业务数据中存基础数据主键,通过本注解将主键转换为表示值*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = RedisBasSerializer.class)
public @interface RedisBas {//缓存的数据类型RedisBasTypeEnum type();
}

3.自定义序列化 用于将基础数据key转换成显示值

package infosky.dmsp.util.redisBas;import java.io.IOException;
import java.util.Objects;
import org.springframework.data.redis.core.RedisTemplate;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import infosky.dmsp.util.SpringContextUtils;/*** 自定义序列化 用于将基础数据key转换成显示值* ※springboot默认使用JsonSerializer作为序列化处理器*  StdSerializer继承自JsonSerializer*/
public class RedisBasSerializer extends StdSerializer<Object> implements ContextualSerializer {private static final long serialVersionUID = 1L;private RedisBasTypeEnum type;public RedisBasSerializer() {super(Object.class);}public RedisBasSerializer(RedisBasTypeEnum type) {super(Object.class);this.type = type;}@Overridepublic void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException {if(Objects.isNull(value)) {jg.writeObject(value);return;}RedisTemplate rt = (RedisTemplate)SpringContextUtils.getBean("redisTemplate");Object bas = rt.boundHashOps(type.getKey()).get(value);if(bas != null) {jg.writeObject(bas);}else {jg.writeObject(value);}}/*** 获取属性上的注解属性*/@Overridepublic JsonSerializer<?> createContextual(SerializerProvider sp, BeanProperty bp) throws JsonMappingException {if (bp != null) {if (Objects.equals(bp.getType().getRawClass(), String.class)) {RedisBas de = bp.getAnnotation(RedisBas.class);if (de == null) {de = bp.getContextAnnotation(RedisBas.class);}if (de != null) {return new RedisBasSerializer(de.type());}}return sp.findValueSerializer(bp.getType(), bp);}return sp.findNullValueSerializer(null);}
}

4.项目启动后将基础数据缓存到redis中

package infosky.dmsp.init;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import infosky.dmsp.common.CommonConstants;
import infosky.dmsp.dao.BasCarrierMapper;
import infosky.dmsp.entity.BasCarrier;
import infosky.dmsp.entity.BasCarrierExample;/*** 初始化时将基础数据保存到redis中* ※实现ApplicationRunner接口,项目启动后就会直接这些run方法*/
@Component
public class InitBas implements ApplicationRunner{private Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate BasCarrierMapper basCarrierMapper;/*** 加载权限数据*/@Overridepublic void run(ApplicationArguments args) throws Exception {//■1.删除redis中旧全部航司基础数据  ※dmsp_bas_carrierredisTemplate.delete("dmsp_bas_carrier");//■2.加载全部航司基础数据到redissaveAllBasCarrier2Redis();}/*** 加载全部航司基础数据到redis*/private void saveAllBasCarrier2Redis(){//获取全部航司基础数据//构造查询条件BasCarrierExample bce = new BasCarrierExample();BasCarrierExample.Criteria ca = bce.createCriteria();List<BasCarrier> lstBc = basCarrierMapper.selectByExample(bce);//构造redis中需要航司基础数据的map  ※"CA":"Air China:中国国际航空公司"Map<String,String> basCarrierMap = new HashMap<>();for(BasCarrier bc : lstBc){basCarrierMap.put(bc.getCarrierId(), bc.getCarrierNameCn());}redisTemplate.boundHashOps("dmsp_bas_carrier").putAll(basCarrierMap);}
}

==以下为测试代码=========================================================

5.测试实体

package infosky.dmsp.util.redisBas;import lombok.Data;
import lombok.ToString;/*** 测试实体*/
@Data
@ToString
public class ExampleRedisBasEntity {//基础数据缓存注解,这个type值要和缓存key对应上@RedisBas(type=RedisBasTypeEnum.DMSP_BAS_CARRIER)private String carrier;private String msg;
}

6.测试controller类

package infosky.dmsp.util.redisBas;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 测试接口* -基础数据表示值从缓存中读出* -在前端页面 or postman中可确认脱敏数据*/
@RestController
@RequestMapping("/redisBas")
public class ExampleRedisBasController {@RequestMapping("/example")public ExampleRedisBasEntity example() {ExampleRedisBasEntity ee = new ExampleRedisBasEntity();ee.setCarrier("CA");ee.setMsg("测试从缓存中读取基础数据");System.out.println(ee);return ee;}
}

四.测试结果

1.后端日志

2.页面传输结果

http://www.yayakq.cn/news/316473/

相关文章:

  • 济宁网站建设兼职江西省城乡住房建设厅培训网站
  • 网站建设公司广告wordpress怎么自定义音乐
  • 会计招聘谷歌seo新规则
  • 西青seo360优化大师下载
  • 赣州专业企业网站建设本科学计算机是做网站吗
  • 江西网站开发网站建设 发布
  • 网站自适应手机网站与微信对接
  • 有没有做家纺类的网站关键词与网站标题
  • 可以做网站的软件上传歌曲如何免费注册网站域名
  • 网站建设文件夹结构网站模板侵权如何处理
  • 怀来网站seo推广app平台
  • 建设静态网站建设地方性宠物网站
  • 不同类型企业网站的对比分析如何去做电商平台
  • 北京电子商务app网站建设大兴山东化工人才网临淄招聘信息
  • 建设网站的申请信用卡下一页p30
  • 淘宝是行业门户网站的盈利模式是什么阅读分享网站模板
  • 深圳网站建设去哪里wordpress 收费下载资源
  • 建设网站客户资源从渠道来wordpress 插件路由
  • 厦门网站建设xm37hao123网址下载到桌面
  • 兰州做公司网站制作网站建设规划书的结构为
  • 做网站网页的成本wordpress多页面在一个页面
  • 个人做网站公司求职网站开发多少钱
  • 网站建设属于哪个行业分类网站 电信已备案 联通
  • h5网站制作thinkphp5网站开发
  • 电子商务网站建设的规划书帮别人做网站哪里可以接单
  • 晋城市建设局 网站辽阳seo
  • 网站开发 方案概要做网站怎么赚钱 注册
  • 织梦手机网站有广告位网上商城推广13种方法
  • 珠海网站建设技术托管怎么建设微信网站
  • 营口网站开发公司兴平网站建设