Featured image of post 个人已上线项目 JavaEE电子产品商城(高并发 云存储)

个人已上线项目 JavaEE电子产品商城(高并发 云存储)

🎯 这篇文章用于介绍我在学习SSM和SpringBoot的时候做的一个增删改查项目:JavaEE手机商城(秒杀) 此项目完成于2022年12月 我是从2022暑假开始系统学习java后端技术的 这是我的第2个个人项目 先根据教程敲学 然后学着开发自己的特色化功能 【✨项目亮点】1️⃣ 模拟实现秒杀商品的功能 使用RabbitMQ消息队列作为支持 2️⃣ 使用云存储 将项目的所有图片存储在腾讯云存储桶

🎄项目访问链接

🌏已经部署到Linux服务器 访问链接如下 20240206 -> 安装SSL证书 -> 访问安全

https://bigbigmeng.online/XMall/index.html

🌏因为目前服务器不满3个月 所以无法备案 访问会提示不安全 是正常的 如果访问域名长时间无响应 可以直接用IP地址访问 响应比较快

http://140.143.165.120:90/XMall/index.html

🤵用户登录 账号 15611111111 密码 15611111111

(也可以自行注册登录)

🎄项目技术选型和亮点实现

1️⃣实现高并发秒杀商品的功能

2️⃣使用云存储存储项目图片

  • Java8
  • SpringBoot
  • Spring
  • SpringMVC
  • MyBatis-Plus
  • MySQL
  • Redis(缓存 商品秒杀)
  • RabbitMQ(消息队列 商品秒杀)

🎄主要功能和内容呈现(本地开发环境演示)

🌴项目主页

可以进行简单搜索、点击注册、点击登录、进入个人中心、查看我的收藏(主页有分页)

🌴登录

🌴查看普通商品、购买普通商品、收藏普通商品

🌴查看秒杀商品输入验证码抢购

🌴个人中心

🌴个人收藏

🎄项目部署

🌴导入数据库信息

创建数据库

CREATE DATABASE bigxmeng_mall DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

导入数据

🌴本地修改项目配置信息

application.properties配置文件

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://101.42.24.90:3306/bigxmeng_mall?&characterEncoding=utf8&useSSL=false

application.yml文件

spring:
  cloud:
    alicloud:
      oss: # 配置oss 阿里云云存储
        bucket: bigxmeng-bucket-10000 # 从网页复制
        endpoint: oss-cn-qingdao.aiyncs.com
      access-key: LTAI5t7fWi6VKKPkfD # 安全起见 我这里删除了一部分
      secret-key: qTXZPzgX3kmr6zcKuan5z  # 安全起见 我这里删除了一部分
  redis: # 配置Redis的访问
    host: 101.42.24.90
    port: 6379
    database: 0 #默认数据库
    timeout: 1800000
    lettuce:
      pool:
        max-active: 8 #最大连接数:默认是 8
        max-wait: 10000ms #最大连接阻塞等待时间,默认是-1
        max-idle: 200 #最大空闲连接,默认是 8
        min-idle: 5 #最小空闲连接,默认是 0
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html # 模板文件名后缀
    encoding: UTF-8
    content-type: text/html
    mode: HTML
  servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 500MB

  # 20230908 rabbitmq 配置
  rabbitmq:
    host: 101.42.24.90
    username: admin # 默认的guest用户不支持远程访问 使用新建的admin用户
    password: admin
    #虚拟主机
    virtual-host: /
    #端口
    port: 5672
    listener:
      simple:
        #消费者最小数量 P-QUEUE-C
        concurrency: 10
        #消费者最大数量
        max-concurrency: 10
        #限制消费者,每次只能处理一条消息,处理完才能继续下一条消息
        prefetch: 1
        #启动时是否默认启动容器,默认为 true
        auto-startup: true
        #被拒绝时重新进入队列的(提高消息处理的可靠性)
        default-requeue-rejected: true
    template:
      retry:
        #启用消息重试机制,默认为 false 重试机制是指如果消息处理失败 要不要重新再试一次
        enabled: true
        #初始重试间隔时间
        initial-interval: 1000ms
        #重试最大次数,默认为 3 次
        max-attempts: 3
        #重试最大时间间隔 默认 10000ms
        max-interval: 10000ms
        #重试的间隔乘数
        #配置 2 的话,第一次等 1s,第二次等 2s,第三次等 4s
        multiplier: 1 # 如果倍数设置为 1 则重试时间永远为 1000ms

mybatis-plus:
  mapper-locations: classpath:mappers/*.xml
  type-aliases-package: com.xmall.bean

server:
  port: 8080 # Tomcat端口 -> 部署在Tomcat目录下
  servlet:
    context-path: /XMall

springboot内部集成了tomcat,将内置tomcat排除掉,不然打包依旧出错(maven类型错误,也就是内置的tomcat对应的jar和外置tomcat对应的jar冲突导致)

将内置tomcat排除掉 参考链接

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 排除嵌入式的tomcat -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <!--打包的时候可以不用包进去 别的设施会提供。事实上该依赖理论上可以参与编译 测试 运行等周期 
        相当于compile,但是打包阶段做了exclude操作-->
    <scope>provided</scope>
</dependency>

修改主启动类extends SpringBootServletInitializer重写configure方法

@SpringBootApplication
public class XMallApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(XMallApplication.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(XMallApplication.class);
    }
}

🌴maven编译打包项目war

🌴上传war包到Tomcat的app目录下

🎄部署后访问存在的问题和解决

🌴重启Tomcat部署报错信息

❗❗报错信息1

09-Sep-2023 11:52:42.275 SEVERE [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.core.StandardContext.listenerStop Exception sending context destroyed event to listener instance of class [ch.qos.logback.classic.servlet.LogbackServletContextListener] java.lang.IllegalStateException: java.io.FileNotFoundException: /export/server/apache-tomcat-8.5.59/webapps/XMall/WEB-INF/lib/unbescape-1.1.6.RELEASE.jar (No such file or directory)

❗❗报错信息2

09-Sep-2023 11:56:27.550 WARNING [localhost-startStop-3] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/error] to the cache for web application [/XMall] because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache

解决方式:

在tomcat下的conf 文件夹中content.xml 修改里面的内容:大小默认是10240,单位是KB  

❗❗报错信息3

org.apache.catalina.deploy.NamingResourcesImpl.initInternal Failed to create MBean for naming resource [null]

❗❗报错信息4

这个是因为我忘记开启防火墙的90端口

❗❗报错信息5

502 Bad Gateway

这是因为 我开启了第二个Tomcat来部署第二个项目 但是没有修改第二个Tomcat这里的端口:

❗❗ 404错误信息

修改前端代码:

重新部署访问:

查看请求连接是否正确: