使用IDEA,MAVEN,搭载分布式系统架构网站--日常问题

  • 首先,这放假几天一直没事,想学学大数据,但是基础不行,有一个大神给我说过一句话" 基础将决定你将来回走的多远,多深 "所以基础很重要
  • 在网上找一个项目。但是环境一点都一样,我也不能直接copy源码吧!而且我还要把学的SSM框架好好回顾一下,也是对原来的基础的一个总结
  • 就算是跟着老师一起做,问题还是一大顿。写这个也是为了这个,方便我以后看看。

一,耦合度,一个简单的例子。

  • 传统架构一个项目,各个功能会糅杂在一起,系统内部的功能模块耦合度很高,那什么是耦合度高,举个例子吧:这还是我在一本书上看的;

     以卖衣服为例吧,衣服有男女之分,并且要统一的进行折扣管理

//卖衣服的接口
public interface Scloths{
    //获取衣服名
    public String getName();
    //获取/衣服的类别
    public String getType();
    //获取衣服的价格
    public int getValue();
}

 那是不是有卖男衣服的类和卖女装的类

public class ManCloths implements Ccloths{
    //鞋子名
    private String name;
    //鞋子类型
    private String type;
    //鞋子价格
    private int value;
    //省略get,set方法以及构造器
}
public class GirlCloths implements Ccloths{
    //鞋子名
    private String name;
    //鞋子类型
    private String type;
    //鞋子价格
    private int value;
    //省略get,set方法以及构造器
}

 没有实现接口啊,,在仔细看看!

 那么问题来了, 我要统一对衣服进行降价的处理,假如我们有这么多的可能

  • 男装原价大于200元的打八折,原价大于100打九折
  • 女装原价大于200打七折,原价大于100的打八折

那么应该怎么处理这个折扣处理呢?

  • 第一种,直接在接口Ccloths中直接添加GetPriceDown()的方法方法。

想一想这个方法行不行?我当时就以为这个就可以啊 ,程序可以运行啊。当然对于小程序可以跑,但是对于一个大的项目来说,这样就是不可以的,我为了这个功能要修改一个接口,这还不算,还要修改他的实现类,假如这个接口中还有一些其他的其他的方法,就和买衣服没什么关系,那我的实现类是不是还要实现他的方法。我不需要还要实现,是不是有点难受,那这里是不是就体现出耦合度了,修改一处就必须要修改其他的地方,如此循环是不会进入死循环,那你的项目还怎么写,怎么进行项目功能的增加,扩展,是不是不好维护,这就好比是传统的架构,牵一发而动全身,内部每个功能模块的牵扯(耦合)太多了。

  • 第二种方法,简单说下,在男女服装类中添加折扣方法GetPriceDown(),

是不是相对简单一些,无需在进行其他的修改。但不是最好的,

  • 第三种方法,那就是在原有的基础上增加两个类并继承男女服装类,专门用于折扣处理,在里面覆盖父类的getValue()方法

那这种方法修改的代码量最少,想要什么功能增加继承类就可以,覆盖父类的方法,思维扩散下,对于一个大型项目,这个思想,他的扩展性就很好,内部代码的关联就少了很多,进行升级的时候仅需要修改少量的代码。

 这上面的列子仅仅是一种设计模式,但这个列子已经很好的说明了耦合度这个问题, 分布式系统远远不止这些。

传统架构存在的问题:

  1. 开发、维护代码比较困难,无法针对每个模块的特性做优化,系统内部的功能模块之间的耦合度太高了,这在上面已经说明了
  2. 无法做服务器的水平扩展

比如一些项目打包都是放在Tomcat中,而这些Tomcat是放在linux服务器上的 ,当然服务器架构不会这么简单。这个和我访问网站存储会话有关,假如我们在京东网页版买东西,在我们登陆后,这个会话是不是记住了我的信息,当你要进行付款的时候,肯定会确认是哪一个人吧,那这个登录和付款是两个(模块)功能,通过session联系,但是要进行服务器的扩展,就是多部署几个Tomcat在服务器上,Tomcat和Tomcat之间又不能进行session联系,那么就会出错,在登录的时候你的信息还是你,那么你在付款的时候可能就是另一个人的信息  (ps: 解释仅是参照一些资料,大概是个这个意思。)

   3.无法存储海量数据  都不能水平扩展怎么进行海量存储,硬盘也就那么大。

 那么分布式架构的优势就很明显。但是有些新的问题,我不太懂就不写了,我怕把自己绕进去。

二,主要还是我遇到的问题

  1. 使用IDEA,maven创建一个分布式的项目步骤。我在这搞了一天多,TMD!还是自己不行 ,对家伙什都玩不6

直接来一条连接吧,不重复造轮子!有人总结就拿来用,按照这位大神的步骤就可以了:

转载:https://blog.csdn.net/sinat_34344123/article/details/79080601

   2,创建好了,就应该导入依赖 ,装天到Tomcat,网上的资料还是有点杂我自己吧便后的target删除后又重新编译装载了一遍下面是过程图,可能与你不一样,但是有些经验还是有用的,毕竟是我查资料,再自己发挥。

这个主要知道一个项目的目录结构,注意这里面没有target文件,我已经删除了且删除了Tomcat8的配置

第一张

 这个图没什么说的 进入Project Structure

 

 这个紧接着上面的弹出来的,前面几个步骤主要是向Tomcat中添加war(自动压缩的)

 

            装载好war,就可以点击运行 ,最好先update(养成一个习惯,无论做完什么操作都先update,再run   Tomcat)

一般情况,不论前面多买努力,到这一步,多少会出点错,不然对不起你呀!!!

我遇到错先自己看看,能看懂就先自己改一改,不行再去百度,谷歌。我建议啊,不要一遇到错误就去论坛找大神,还有在上面

很花时间,除非你是在没有办法。有时候按照那些大神的操作,不但没有好,反而错误越来越多,有时候直接系统蹦了,这个我深有感悟,尤其是在学linux时(现在暂时打算学了),linux不像Java啊,那都是命令行,而且linux没有回收站,删了就删了,结果不对,反而系统崩了,我找谁啊 ,MD!!!!!!。如果写一块代码十分钟,去bug花一个小时或者更长,我建议你重新换个角度去写,不值当。网上大神是多,但是符合你的错误的是在很少,基本错误都差不多。自己那么奇葩的错误可能都没有,回头还得自己来

所以自己多看看,多分析。

 上面的错大概是说类没有加载到吧,那肯定是相关的包没有导入啊,我又想了一下,这肯定是在装载war的时候没有加上去,一般不会是你的依赖没有导入,用maven管理,parent里面都是写好的啊,本地仓库肯定是有的,没有也都下载完整了。我自己都怕jar导入多了重复了,自然不会想没有导入jar,在Tomcat上运行,要把项目的war装载上去,war上没有相关的文件,自然会报错。操作具体如下,就会在class文件就会多相关依赖的文件,这都是环环相扣的,web-->service --->mapper-->pajo,这些肯定都要导入,

 先update 在运行,就会有目标文件target,里面的classes就编译后的文件。但是是不是还是少一个文件文件名就是你war包的名字,也就时说你的jsp页面等的资源没有加载到target中,那么以后部署的时候就会有问题,但是没有那个文件程序依然可以在Tomcat上跑 ,我就是这种情况,为了以后不麻烦,这是应为esclipse会自动将静态文件加到class中,但是idea不行啊,所以要填加一块代码,如果你是按照上面那个链接的操作,或许会和我一样,你的parent的pom.xml没有相关的插件,那就添加下面的代码

 

 <build>
    <finalName>${project.artifactId}</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

 

 

这以上是我自己根据日志进行的一些排查,可以略过

这只是个人经验,希望有帮助。 如果以上有写的不对,欠缺的地方,望指出,一起学习,共勉!!!!!!!!!。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值