javaWeb开发遇到的问题踩过的坑(jdk问题,雪花算法并发问题,eclipse项目转idea开发mapper.xml文件不编译问题),今天有点空冷静下来将这些搜了很多资料没解决的问题都解决了。

 

问题(1):clean以后maven编译插件报错找不到jdk

      使用eclipse编译项目,clean以后再编译时遇到maven插件找不到JDk问题,搜了很多看了很多帖子,都是说maven的编译用的是jre而不是jdk,但是我的已经是jdk了。

这个问题吧,我在这个我负责的项目中一直没空或者说拿出来的空中一直没有解决掉这个问题,用eclipse的时候报找不到jdk没关系,它有一个maven > updateProject 这个功能可以用你配好的java环境来自动编译你的java文件,然后你再tomcat:run就可以启动项目。我一直用这个方式来开发,只要你不clean就一直没有这个问题。

但是吧,eclipse我实在是不想用了,现在这个项目也已经接近尾声了马上要进行下一个项目了,我就想下个项目都使用idea来开发,然后我就把这个项目迁移到idea上了,问题又出现了,idea也是报maven找不到jdk,这是致命的因为idea没有类似于maven > updateProject这个功能,它仅有的maven>reimport或者是里边的一些重新生成之类的都没用,所有我必须直面这个问题了,于是乎我又搜了很多资料,国内的国外的都没有我这种情况!

这时候我突然想起来,我之前的公司都是用的jdk8,在这里是jdk7这个包是别人发我的,我拿到解压后直接配了配环境变量就开发了,所以我的java环境不是正式安装的,我就去甲骨文官网下载了jdk7重新在我的电脑上安装了一遍!奇迹来了!!!

问题就这样解决了。

然后我就可以在eclips上和idea上愉快的开发了!!然而还不是,idea又出现问题了。下边问题2介绍。

问题(2):eclipse迁移到idea后,maven默认不编译src/main/java下的xml,properties等配置文件。而eclipse是乖乖的都给你编译的(这个就不要看了,这里我写错了eclipse也不会编译,大家还是放在resourse里吧,可以指定扫描的包不用同包同路径2019-9.3)。

    IDEA我是用过的,但是用的时间不长,而且在上家公司所有的环境都是给配好的,你只管接任务写代码就好了,所有的环境,测试,运维都不用你管,但是现在我要自己来配置,我再eclipse上配置的是可以的,而且用的也很棒,没有出现过问题。

在eclipse上我的结构是这样的,配置文件是这样的,可以正常启动运行:

结构:

配置:

      这样就可以将dao里的*mapper.java文件和mapper里的*mapper.xml文件一一对应起来,这样在系统启动的时候spring就会自动的将这些bean注入到容器中,就可以调用来完成功能了。当然xml文件里命名空间namespace也要对应dao里的具体的类。

但是在idea上这样是不可以的,因为它默认的编译是java文件下的.java的文件和resourse文件夹下的配置文件(.xml.propertise文件),也就是说上边的我这种结构在在用maven编译之后在classes文件夹下是没有mapper文件夹的也就没有里边的xml文件,你的springROC容器里就没有这个mapper的bean也就没dao的实现类无法操作数据库。

我在百度上搜索了很多资料都是这种方法:

 <build>
 <resources>
          <resource>
              <directory>src/main/java</directory><!---设置编译的包-->
              <includes>
                  <include>**/*.xml</include><!---该路径下的.xml类型文件也要编译-->
              </includes>
          </resource>
          <resource>
              <directory>src/main/resource</directory>
              <includes>
                  <include>**/*.properties</include>
                  <include>**/*.xml</include>
              </includes>
              <filtering>false</filtering>
          </resource>

      </resources>

  </build>

   这种方法就是设置在编译的时候也编译你的java夹里的配置文件类型(xml,properties类型),我配置了,但是我的项目跑不起来,报错是ContextLoaderListener已经没有开启或者说是开启了读取了resourse里的一些配置文件后又关闭了,你自己强行配置的编译java文件夹下的mapper.xml文件的bean已经注入不了了,但是别人好像没遇到这个问题。所以失败告终,我的问题总是与大家的不尽相同,只能另找出入,我先不直接run,先installl这样确实把java下的xml编译了,然后我把上边的pom文件里加的东西注释掉,然后启动项目成功,功能正常。但是这样未免也太麻烦了。

我的解决办法:

 idea我是用过的,之前是把mapper.xml文件放到resourse文件夹里与你的dao文件同路径,大家都清楚一旦编译也就不存在什么java文件夹和resourse了,放到同路径下,并且两个文件同名idea离maven的spring就会自动的对应注入容器,当然namespace还是要对应。下边贴结构和结果:

结构:

编译结果:

配置:

这里配置mapperLocations应该就没有什么作用了,因为同路径同名下是自动对应的。这样解决了我的问题。

问题(3):雪花算法在性能好的计算型服务器里高并发多线程会产生重复的id问题,一秒可以产生26万个id的强大算法按理在我这个小项目上应该不会出问题,在本地运行环境中也确实没有出问题,但是到了服务器就出了问题,是自己代码的问题。

这个产生ID的工厂可以new多个但是一般是一张表一个,因为作为主键一张表示不可以重复的,但是2张表示可重复的,所以我们在插入数据的时候一般是一张表new一个idworke,这是单例的,内部方法也做了线程安全问题,所有一般不用担心,我的问题是再往一张表插入数据的时候循环的new每一条数据一个idworker这样很容易出现重复的id,因为可能多个idworke同时nextID()拿到的是一个id。这种问题避免就可以啦。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值