SSM项目之电商项目easymall(一)
一 环境准备
软件环境:
1 jdk1.8
JAVA_HOME:是给软件用的,各种启动的软件都会寻找JAVA_HOME的环境变量;
Path:给windows用的;
2 eclipse marS2/neon
解压的无中文路径,无空格的文件夹中;防止读取相对路径时出现乱码
如果当前系统的JAVA_HOME对应版本是支持neon的启动的,那么就可以直接启动eclipse
设置workspace,无中文路径,无空格
3 maven3.5
解压到无中文路径,无空格的文件夹即可(后续会介绍,配置,和使用等)
4 tomcat 9
tomcat7 没有自动处理乱码,tomcat8以上的版本,无需管理乱码(servlet没有验证)
5 mysql5.5
如果是5.5无需变动,如果不是,需要删除重新安装;5.0无法导入5.5备份的数据;
删除:只装过一次5.0,直接删除服务(控制面板的卸载程序)
安装sqlYog,数据库客户端;
二 分析SSM三大框架
Spring框架:
工厂类创建对象
加在xml的标签创建对象
通过配置文件扫描注解
@Controller 控制层对象
@Service 业务层对象
@Component 普通对象
对象的创建交给Spring
控制反转: 对象我框架包了
java基础复用的方法
方法封装被调用
子继承父类,直接调用
Spring框架节点
Spring管理的所有对象中相互注入使用
@Resource
@Autowired
注入依赖:哪用对象,跟我说,注入就直接用
Springmvc
处理页面和程序的交互(升级了servlet的使用)
前端控制器(springmvc,dispatcherServlet,映射mapping "/")
适配器映射器(handleMapping)(寻找RequestMapping的接收地址)
适配器协调器(handleAdapter):转给handler
处理器(handler): 调用RequestMapping的方法所在类的对象,执行方法,返回
字符串渲染: WEB-INF/views/index.jsp
显式页面想添加数据: Model 模板对象 addAttribute
Springmvc为什么和spring整合?
1 实现代码中的三层结构;controller,service,mapper依赖注入
2 处理持久层困难(spring可以整合mybatis)
Springmvc是怎么整合的?
需要:看到配置文件了
不需要:无缝整合;controller直接注入service使用,形成service调用mapper(前提是spring整合了mybatis),三层项目结构
mybatis:
JDBC
mybatis功能:
自动封装(提交的参数,返回的结果,无需手动jdbc处理resultSet)
sql语句是通过映射文件xml绑定(bind)接口mapper的同名方法;
配置文件
驼峰命名,分页插件
和spring整合
配置文件(spring_mybatis)
datasource:数据库连接中的参数,url,username,password,数据库连接池
sqlSession:datasource
整合一起使用的SSM框架的配置文件
spring:管理spring容器的配置文件
spring-mvc:springmvc配置文件
mybatis:mybatis持久层配置文件
spring-mybatis:整合spring和mybatis的配置文件
三 将easymall项目与SSM框架整合
3.1框架SSM结构
3.2数据库的设计
创建easymalldb数据库
1 商品相关--t_product
○ 展示全部商品的分页信息
○ 某个商品的信息
○ 后台的商品管理增删改查
商品表格
- product_id:商品的id,全局唯一,主键,char,UUID
- product_name: 商品的名称,varchar
- product_price: 商品价格 double
- product_category: 商品类目
- product_imgurl: 商品图片的url连接地址
- product_num: 商品的库存
- product_description: 商品的简介
2 用户相关---t_user
• 登录 (查询单个user)
• 注册 (新增)
• 注册的用户名校验(查询)
用户表格
- user_id: 全局唯一的主键,uuid
- user_name:用户名称
- user_password:密码
- user_nickname: 昵称
- user_email: 用户邮箱
- user_type: 用户类型,于权限有关;
3 购物车相关--t_cart
• 添加购物车
• 查询当前用户的所有购物车商品
• 修改购物车数量
• 删除购物车
购物车表格
- id:购物车id int
- user_id:当前商品属于的用户id
- product_id:当前商品id
- product_image:商品的图片
- product_name:商品名称
- product_price:商品价钱
- num:购物车中商品数量
- user_id
- product_id
- 复合主键;通过2个字段的同时使用,可以唯一的定位
- 到一条购物车商品数据;
4 订单相关--t_order和t_order_item(主从表的关系,order为主,item为从,1对多的关系)
• 我的全部订单
• 新增订单
• 删除订单
主表t_order
- order_id: 主键,也是t_order_item关联的键
- order_money: 订单支付金额
- order_receiverinfo: 收信人信息
- order_paystate: 支付状态
- order_time:创建时间
- user_id: 用户关联的
表格代码 可以直接通过sqlyong导入数据库(想要数据库设计sql代码留言私发,这里不支持上传)
四 maven工具管理项目框架
4.1web项目的管理方式的弊端:
myeclipse生成一个web应用的项目结构,servlet直接开发代码
如果用到三大框架的内容:
1 jar的管理不规范
把jar包先找到,完全是凭借测试和经验完成的;
2 直接整合外界的第三方tomcat进行war包的运行
3 项目管理的结构
src:代码
webroot:web应用相关
ssm框架的配置文件????
src管理配置文件;
4.2 maven介绍
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件是一个软件,并且可以实现各种项目结构的管理功能--工具;
快速搭建项目(java普通工程,web应用工程)
可以通过引入的各种插件完成丰富的外接功能(例如maven的tomcat插件可以直接在项目内部启动插件的tomcat运行web工程)
对工程的管理结构非常严格:
java工程:
src/main/java:编写代码的文件夹
src/main/resouces:配置文件(ssm框架,properties等)
src/test/java:测试代码,在打包时不会进行包装
pom.xml:通过一小段描述来管理项目(管理依赖的jar包,是通过dependency完成)
web应用工程:
和java工程一样:
main的文件夹下,有webapp的管理,web应用所在的路径;
有了maven就可以方便快速的搭建我们想要的各种工程结构,从而通过对pom文件中描述信息的修改(标签),完成项目的各种管理功能;
五 maven的安装和环境配置
https://www.cnblogs.com/nanlinghan/p/9968806.html
六 easymall工程的搭建
1 选择骨架(webapp)
2 web的应用结构
src/main/java:当前easymall的ssm框架的所有运行代码都在这个文件夹
src/main/resources: 存放配置文件的位置
src/test/java:测试内容
3 pom的依赖
maven主要就是管理jar包的依赖,当前SSM框架需要依赖的东西非常多;
spring,springmvc,mybatis,一些工具的依赖;
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jt</groupId>
<artifactId>easymall-ssm</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>easymall-ssm Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<!-- spring的版本号 -->
<spring.version>4.3.7.RELEASE</spring.version>
<!-- mybatis的版本号 -->
<mybatis.version>3.4.5</mybatis.version>
<!-- log日志管理 -->
<slf4j.version>1.7.12</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<pagehelper.version>3.4.2</pagehelper.version>
<jsqlparser.version>0.9.1</jsqlparser.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<!-- spring context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring mvc 辅助包 jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
<!--servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- Spring tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aspectj -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency> <!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 阿里巴巴数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.14</version>
</dependency>
<!-- 阿里巴巴的json工具 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency> <!-- commons fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Apache poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>${jsqlparser.version}</version>
</dependency>
<!-- shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
4 拷贝静态资源
easymall-ssm的静态文件拷贝到当前工程中,从navigator保存
这里要关闭eclipse自带的web前端的各种校验
(需要静态资源留言)
5 准备ssm框架的配置文件
spring本身的配置文件
spring整合mybatis配置文件
springmvc配置文件
mybatis配置文件
5.1 web.xml
tomcat容器启动时会加载当前工程的web.xml文件,会根据web.xml文件中的配置,设置当前加载各种其他资源,listener,初始化参数,配置spring和springmvc配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/spring*.xml;
</param-value>
</context-param> 指定当前tomcat启动时需要加载的配置文件,classpath=target/classes;
成功加载配置文件之后,如果有依赖的jar包,就可以正确启动spring springmvc容器了; <servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring_mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
创建springmvc中的dispatcherServlet,实现读取springmvc的配置文件,当前的servlet就会提供给springmvc的逻辑使用;
当前dispatcherServlet接收所有的请求地址 "/"
web.xml是通知tomcat在启动时加载所有的需要配置的文件;SSM框架
5.2 spring.xml
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- 允许JVM参数覆盖 -->
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<!-- 忽略没有找到的资源文件 -->
<property name="ignoreResourceNotFound" value="true" />
<!-- 配置资源文件 -->
<property name="locations">
<list>
<value>classpath:mysql.properties</value>
</list>
</property>
</bean>
<!-- 扫描所有com.jt的包-->
<context:component-scan base-package="com.jt"></context:component-scan>
利用加载的spring容器,创建一个PropertyPlaceHolder的对象,读取mysql.properties的数据(key-value键值对),其中的数据就是配置加载的datasource的内容,在配置的指定上进行解耦,可以修改properties变动连接数据库的信息.
扫描包的路径,所有当前工程已com.jt开始的包中只要存在注解都会被spring容器扫描到,像@Component,@Service等就会自动创建对象
5.3 spring_mvc.xml
<!-- 在restful模式下,添加静态资源 如果删除导致页面没有js效果-->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/" mapping="/**"></mvc:resources>
保持当前jsp等页面资源加载成功js,css等内容
<!-- 扫描spring的组件 -->
<context:component-scan base-package="com.jt.easymall.controller"></context:component-scan><!-- 扫描 spring mvc的注解 @RequestMapping @ResponseBody -->
<mvc:annotation-driven></mvc:annotation-driven>
springmvc扫描的spring创建的对象,完成和spring的整合;requestMapping映射就可以加载所有com.jt.easymall.controller的类中;
启动responseBody requestMapping requestParam requestBody
<!-- spring mvc处理响应的jsp -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
页面渲染时拼接的前后缀名称,/WEB-INF/views/保存着所有页面;
<!-- spring mvc 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--能配置多少个property,可以查文档和查询源代码 -->
<!--最大上传文件的大小 -->
<property name="maxUploadSize" value="8388608"></property>
<property name="resolveLazily" value="true"></property>
</bean>
MultipartFile是springmvc的包中的类,处理页面上传的文件;
大小定义,和懒加载,接收的实际上是流对象;
5.4 spring-mybatis整合
<!-- 数据库连接池 commons-dbcp ,c3p0,proxool,阿里巴巴druid -->
<bean id="alibabaDataSource"
class="com.alibaba.druid.pool.DruidDataSource"
init-method="init"
destroy-method="close">
<!-- 数据库连接的4项 -->
<property name="driverClassName">
<value>${jdbc_driverClass}</value>
spring启动时,PropertiesPlaceHolder加载了mysql.properties文件 定义的jdbc_driverClass
</property>
<property name="url">
<value>${jdbc_url}</value>
</property>
<property name="username">
<value>${jdbc_userName}</value>
</property>
<property name="password">
<value>${jdbc_userPassword}</value>
</property>
<!-- 连接池中的最大连接数 -->
<property name="maxActive">
<value>5</value>
</property>
<!-- 初始化的连接数 -->
<property name="initialSize">
<value>2</value>
</property>
<!-- 获取连接的最大等待时间 -->
<property name="maxWait">
<value>6000</value>
</property>
<!-- 连接池的最大空闲 -->
<property name="maxIdle">
<value>2</value>
</property>
<!-- 连接池的最小空闲 -->
<property name="minIdle">
<value>2</value>
</property>
<!-- 自动清除无用的连接 -->
<property name="removeAbandoned">
<value>true</value>
</property>
<!-- 自动清除无用的连接的等待时间 -->
<property name="removeAbandonedTimeout">
<value>180</value>
</property>
<!-- 连接属性 -->
<property name="connectionProperties">
<value>clientEncoding=UTF-8</value>
</property>
</bean> <!-- 实例化MyBatis的SqlSessionFactoryBean对象-->
<!--mybatis配置,读取配置文件(扫描配置文件)-->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="alibabaDataSource" //绑定的数据源
p:mapperLocations="classpath:mapper/*.xml"> //映射文件mapper.xml的位置 src/main/resources
<!-- mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> //指向mybatis的内容配置文件
<!-- 定义当前工程的别名包 -->
<property name="typeAliasesPackage" value="com.jt.easymall.pojo"/> //持久层封装对象时,无需指定类的全路径名称 resultType="Product"
</bean>
spring管理的整合持久层对象sqlSession;没有这个对象动态代理无法完成接口类方法的实现和xml映射文件中sql语句的绑定关系
5.5 mybatis.xml
<settings>
<!-- 开启驼峰自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
<!-- 二级缓存的总开关 redis完成缓存的功能.不使用数据库自身的缓存-->
<setting name="cacheEnabled" value="false" />
</settings>
到此SSM项目框架搭建成功(搭建过程中可能会出现不同的问题,一些常见的问题已经整理好 请查看https://www.cnblogs.com/nanlinghan/p/9973495.html解决)
七 测试工程(easymall首页显示)
逻辑:
首页index.jsp存储在 WEB-INF/views/index.jsp
访问url:localhost:port/直接访问
代码逻辑
编写在一个被spring和springmvc扫描到的controller里
@RequestMapping("/")
public String goIndex(){
return "index";} package com.jt.easymall.controller;
@Controller
public class IndexController { //添加首页的映射地址"/"
@RequestMapping("/")
public String goIndex(){
return "index";//WEB-INF/views/index.jsp
}}
Maven的tomcat插件
maven内部可以引入tomcat的插件,执行当前工程的启动功能,无需外部的tomcat容器来加载当前工程的war包执行了;
pom中通过描述信息,引入maven的tomcat插件
配置启动maven工程的debug模式
完成配置之后,可以点击debug测试当前工程的启动
SSM项目之电商项目easymall(一)的更多相关文章
- SpringBoot微服务电商项目开发实战 --- 模块版本号统一管理及Redis集成实现
上一篇文章总结了基于SpringBoot实现分布式微服务下的统一配置.分环境部署配置.以及服务端模块的分离(每一个提供者就是一个独立的微服务).微服务落地.Dubbo整合及提供者.消费者的配置实现.本 ...
- Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...
- 从头开始 启动开源电商项目jShop
1. 引言 干了三年C#, 有了转Java 的念想,所以尝试学习一下java web,java语法本身和C#没有太多的差别,所以打算看看开源的java项目,开源的Java项目还是非常非常多的,曾经看了 ...
- 用SpringBoot搭建简单电商项目 01
前几节呢,我们已经简单介绍了SpringBoot框架的使用,从这一节开始,我们尝试着使用SpringBoot框架来一步一步搭建一个简单电商项目.当然了,这不是真正的电商项目,你可以看成是一个CRUD案 ...
- Python Django(WEB电商项目构建)
(坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...
- Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客
Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...
- C#大型电商项目优化(二)——嫌弃EF与抛弃EF
上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...
- C# 大型电商项目性能优化(一)
经过几个月的忙碌,我厂最近的电商平台项目终于上线,期间遇到的问题以及解决方案,也可以拿来和大家多做交流了. 我厂的项目大多采用C#.net,使用逐渐发展并流行起来的EF(Entity Framewor ...
- Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...
随机推荐
- js实现字体和容器宽高随窗口改变
用于字体大小和容器的宽高字体和宽高设为rem就可以了 var html = document.documentElement; function fonts(){ var hW = html.offs ...
- 排序算法Nb三人组-快速排序
核心思想: 将列表中第一个元素拿出来,放到一边,左右两个循环,左面的大于拿出来的数,就把他挪到右面, 右面的小于拿出来的数就把他放在左面,这是列表被第一个元素''分''为两个列表,在对两个列表进行同样 ...
- Django 中间件实现用户认证与IP频率限制
1.URL访问过滤 通过装饰器进行用户认证非常方便,但是在添加部分需要认证的功能时,就需要再次添加装饰器,如果通过中间件来实现,就不需要再进行添加的操作. import re LOGIN_URL = ...
- git-中的命令与理解
改变到要操作仓库的目录创建文件夹(mkdir 文件夹名) git init初始化一个git仓库 git add .git add --all两个命令一样作用,添加目录里面所有文件到本地工作区 git ...
- git push报错--私钥问题
输入git push -u origin master时提示 Permission denied (publickey). fatal: Could not read from remote repo ...
- 003客户端负载均衡Ribbon & 短路器Hystrix
1.POM配置 和普通Spring Boot工程相比,仅仅添加了Eureka.Ribbon.Hystrix依赖和Spring Cloud依赖管理 <dependencies> <!- ...
- Oracle数据库中设置表字段为自动序列
--创建序列 increment ; --创建触发器 create or replace trigger zonecode_trigger before insert on org_HospitalZ ...
- Spring3实战第二章第二小节 IOC依赖注入 list和map集合
Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式. 1.Set注入 2.构造器注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new ...
- java面试题之----jdbc中使用的设计模式(桥接模式)
1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...
- tempdb过大事故记录-sqlserver
今天收到预警消息,提示磁盘空间已经满了,感觉很奇怪.刚装的新机器怎么可能会磁盘空间不足.登陆看了看 可以看的到tempdb已经65G的了,而且显示是百分百可用.这个就很奇怪了,为什么会出现这种情况呢. ...