首先我们快速搭建一个SpringBoot项目出来,因此这个项目的重心在后端逻辑,因此前端页面简单搭建:
CREATE TABLE `item` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL COMMENT '商品名', `code` varchar(255) DEFAULT NULL COMMENT '商品编号', `stock` bigint(20) DEFAULT NULL COMMENT '库存', `purchase_time` date DEFAULT NULL COMMENT '采购时间', `is_active` int(11) DEFAULT '1' COMMENT '是否有效(1=是;0=否)', `create_time` datetime DEFAULT NULL, `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表'
item_kill待秒杀商品表,存放待秒杀的商品信息
CREATE TABLE `item_kill` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', `item_id` int(11) DEFAULT NULL COMMENT '商品id', `total` int(11) DEFAULT NULL COMMENT '可被秒杀的总数', `start_time` datetime DEFAULT NULL COMMENT '秒杀开始时间', `end_time` datetime DEFAULT NULL COMMENT '秒杀结束时间', `is_active` tinyint(11) DEFAULT '1' COMMENT '是否有效(1=是;0=否)', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建的时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='待秒杀商品表'
item_kill_success秒杀成功订单表,存放秒杀成功的订单
CREATE TABLE `item_kill_success` ( `code` varchar(50) NOT NULL COMMENT '秒杀成功生成的订单编号', `item_id` int(11) DEFAULT NULL COMMENT '商品id', `kill_id` int(11) DEFAULT NULL COMMENT '秒杀id', `user_id` varchar(20) DEFAULT NULL COMMENT '用户id', `status` tinyint(4) DEFAULT '-1' COMMENT '秒杀结果: -1无效 0成功(未付款) 1已付款 2已取消', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀成功订单表'
user用户表,存放用户信息的表
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(100) CHARACTER SET utf8mb4 NOT NULL COMMENT '用户名', `password` varchar(200) CHARACTER SET utf8mb4 NOT NULL COMMENT '密码', `phone` varchar(50) NOT NULL COMMENT '手机号', `email` varchar(100) CHARACTER SET utf8mb4 NOT NULL COMMENT '邮箱', `is_active` tinyint(11) DEFAULT '1' COMMENT '是否有效(1=是;0=否)', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_user_name` (`user_name`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表'
2.项目框架的搭建
新建一个springboot项目,命名为SecondKill,项目结构如下所示:
接下来引入依赖,为了让大家免受maven无法引入的痛苦,我在项目中加入了阿里的镜像,现在引入依赖应该不会受到网络的影响。由于受字数限制,关于pom.xml文件可以通过以下两个地址获取到:
https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2FOliverLiy%2FSecondKill%2Ftree%2Fversion1.0
3.让项目跑起来
package com.sdxb.secondkill; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ImportResource(value = {"classpath:spring/spring-jdbc.xml"}) public class MainApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(MainApplication.class); } public static void main(String[] args) { SpringApplication.run(MainApplication.class,args); } }
在application.properties中配置数据库的连接信息和mybatis的配置信息:(换成自己的数据库信息)
#数据源配置 datasource.url=jdbc:mysql://127.0.0.1:3306/db_second_kill?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull datasource.username=root datasource.password=123456
在application.properties中配置数据库的连接信息和mybatis的配置信息:(换成自己的数据库信息)
#数据源配置 datasource.url=jdbc:mysql://127.0.0.1:3306/db_second_kill?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull datasource.username=root datasource.password=123456
在spring-jdbc.xml中配置数据源信息
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd " > <!--主数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close" primary="true" > <!-- 基本属性 url、user、password --> <property name="url" value="${datasource.url}" /> <property name="username" value="${datasource.username}" /> <property name="password" value="${datasource.password}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="10" /> <property name="minIdle" value="10" /> <property name="maxActive" value="20" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="60000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT 1 " /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --> <property name="filters" value="stat" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> </beans>
在mybatis-config.xml中配置mybatis,主要是开启缓存,设置默认数据库超时时间以及开启驼峰命名规则,可以把数据库中类似user_id的字段解析为userId。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- Globally enables or disables any caches configured in any mapper under this configuration --> <setting name="cacheEnabled" value="true"/> <!-- Sets the number of seconds the driver will wait for a response from the database --> <setting name="defaultStatementTimeout" value="3000"/> <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- Allows JDBC support for generated keys. A compatible driver is required. This setting forces generated keys to be used if set to true, as some drivers deny compatibility but still work --> <setting name="useGeneratedKeys" value="true"/> <!-- 设置控制台打印sql --> <!--<setting name="logImpl" value="stdout_logging" />--> </settings> </configuration>
以上都是基础配置,接下来创建一个测试Controller和测试页面测试项目是否启动成功,在controller包下新建一个testController
package com.sdxb.secondkill.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class testController { @RequestMapping(value = "/test",method = RequestMethod.GET) public String index(){ return "test"; } }
在templates中新建一个test.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> test </body> </html>
运行项目,访问地址https://link.juejin.cn/?target=http%3A%2F%2Flocalhost%3A8080%2Ftest,页面上显示test,表示项目构建成功。
到现在为止的代码放在github上,https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2FOliverLiy%2FSecondKill%2Ftree%2Fversion1.0
我搭建了一个微信公众号《Java鱼仔》,如果你对本项目有任何疑问,欢迎在公众号中联系我,我会尽自己所能为大家解答。