从永远到永远-SpringBoot(五)-自用别看

1.给后台管理系统的其他页面加左边栏,并抽取共用部分
2.完成产品列表功能
3.商品上下架

4.商品新增和修改功能,注意页面下拉框的展示及一些前台不会传输状态的处理了。
5.注意该部分没有使用文件服务器,算是功能缺失!!!!

6.類目完成。

7.登陸
1)分佈式session
2)sessionid token
3)ip hash
4)單獨一個服務,redis集群主從複製

1》增加卖家信息表,完成dao service 及相关测试
2》完成微信开放平台授权,类似于微信公众平台。
3》实现登陆登出操作。(这里的redis有什么用,又没有用作缓存)
1》》提供的redis没有密码
2》》引入redis依赖,配置redis连接信息
3》》token常量配置,cookie工具类,回头再看看
4》》注意跳转,再研究一下吧!!!
5》》最后再看看有没有办法模拟测试一下吧

5)微信开放平台 微信扫码登陆又他妈不行了!
可以定制化的将微信二维码嵌入自己的页面中。

6)12-8aop实现 登陆验证
定义切面类,查询不到token抛出异常

8.消息
1)微信模板消息
微信公众平台,可以使用测试账号测试
service
List data= Arrays.asList()

注意消息推送的异常没有让其抛而是直接try了,是因为订单操作是有事务注解的,如果不try,有可能影响订单的状态更新等操作。消息推送最好不要影响主业务!
2)websocket(和其他的通信有啥业务场景区别????)
客户端和服务端的通信

客户端放在order/list页面中,使用的html5原生websocket,监听,有后端信息推送来,就做相应操作

<script>
        var websocket=null;
        if('WebSocket' in window){/*判断下浏览器是否支持*/
            /*存在于window对象中说明支持,创建websocket对象*/
            websocket= new websocket('ws://稍后完善');
        } else{
            alert('该浏览器不支持websocket!');
        }
        websocket.onopen=function(event){
            console.log('建立连接');
        }
        websocket.onclose=function (event) {
            console.log('连接关闭');
        }
        /*收到消息时的事件*/
        websocket.onmessage=function (event) {
            console.log('收到信息:'+event.data);
            //弹窗,播放音乐等!
        }
        /*发生错误时事件*/
        websocket.onerror=function (event) {
            alert('websocket通信发生错误!');
        }
        /*窗口关闭前关闭socket*/
        window.onbeforeunload=function () {
            websocket.close();
        }

    </script>

后端:
引入依赖

<!--websocket依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
package com.scbg.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

/**
 * @program: sell
 * @description: websocket配置类
 * @author: 三层饼干儿
 * @create: 2019-08-22 13:48
 **/
@Component
public class WebSocketConfig {
	@Bean
	public ServerEndpointExporter serverEndpointExporter(){
		return new ServerEndpointExporter();
	}
}

后端对应前台事件的处理!

package com.scbg.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.jws.WebService;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * @program: sell
 * @description: websocket处理类
 * @author: 三层饼干儿
 * @create: 2019-08-22 15:27
 **/
@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket {
	private Session session;

	private static CopyOnWriteArraySet<WebSocket> webSocketSet=new CopyOnWriteArraySet<>();

	/**
	 * 对应前端websocket连接事件
	 * @param session
	 */
	@OnOpen
	public void onOpen(Session session){
		this.session=session;
		webSocketSet.add(this);
		log.info("【websocket消息】有新的连接,总数:{}",webSocketSet.size());
	}

	@OnClose
	public void onClose(){
		webSocketSet.remove(this);
		log.info("【websocket消息】断开连接,总数:{}",webSocketSet.size());
	}
	@OnMessage
	public void onMessage(String message){
		log.info("【websocket消息】收到客户端发来的消息:{}",message);
	}

	public void sendMessage(String message){
		for (WebSocket webSocket:webSocketSet){
			log.info("【websocket消息】广播消息,message={}",message);
			try {
				webSocket.session.getBasicRemote().sendText(message);
			}catch (Exception e){
				e.printStackTrace();
			}
		}
	}

}

测试项目报错:

Description:

Configuration property name 'projectUrl' is not valid:

    Invalid characters: 'U'
    Bean: projectUrlConfig
    Reason: Canonical names should be kebab-case ('-' separated), lowercase alpha-numeric characters and must start with a letter

Action:

Modify 'projectUrl' so that it conforms to the canonical names requirements.

解决,命名不规范,原因写得很明确了。。。

在这里插入图片描述

测试不成功,加了登陆校验,草!!!!回头看下怎么处理

在创建新订单业务中,加入发送websocket信息!

完善页面,加入音乐等。。。还是没法测,感觉会有问题,api都不像对的样子

9.异常捕获 补充,学习但是没写
1)handler增加捕获下单异常
2)如果出现异常对面不想收到200,可以使用注解。

10mybatis,跟项目无关,就是介绍一下而已。
关于JPA,Hibernat 中的JPA,及Spring-Data-JPA
JPA是规范,Hib对其进行了实现,spring-data对其进行了封装

11.分布式锁
sychronize
1)能解决
2)但是无法细粒度控制
3)只能单点
redis分布式锁
1)细粒度
2)支持分布式
3)多机器上多进程对同一个操作的互斥
实际测试的确比关键字那个快,但是成交量减少太多了呀,难道分布式锁就是为了让不能处理的及时回复一个不能买到?????同一段代码只能一个访问????

12.redis缓存,跟以前差不多,不过都使用注解了!
1)命中
2)失效
3)更新

13.项目部署
1)tomcat
2)java-jar

终于结束了!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值