关于 SSM 学习

创建 maven 项目的步骤不够熟练,有些疑问

  • 首先,对于初始化本地仓库存在问题,由于观看的课程中他是直接在已有项目中对 maven 进行编译,而我没有项目。因此,在配置好 maven 坐标以及阿里镜像等系列操作以后,我先使用 IDEA 提供的 maven 项目骨架 quickstart 创建了一个项目
  • 然后,可能由于本地仓库是空的,所以它就一直在加载东西,可是最后它报错了:No archetype found in remote catalog. Defaulting to internal catalog
  • 后来,我将向项目关闭重启后,控制台没有再报上面的错误,然而,在配置项目 pom.xml 的 spring 依赖的时候报错:Dependency 'org.springframework:spring-context:5.0.5.RELEASE' not found
  • 我打开本地仓库,发现本地仓库中并没有 springframework ,因此我认为因该是加载时少了部分 jar 包。于是我将本地仓库的所有文件删去,直接在命令行中对项目进行 maven compile ,然而出现了以下的报错。。。

后续

  • 重新创建了一个 Java 项目,在其中新建了 maven-webapp 模块。我直接将黑马程序员提供的 maven 仓库复制到了我的本地仓库,没有自己去加载。
  • 对于以上的第二点问题,实际上跟本地仓库可能没什么关系,解决:https://www.cnblogs.com/conefirst/p/13651746.html
  • 对于以上的第三点问题,解决:https://blog.csdn.net/qq_43485652/article/details/110289212
    (PS:黑马程序员提供的仓库里的 springframework 版本是4.1.2.RELEASE)
  • 创建配置文件 ApplicationContext.xml 时,我的 resources 右击新建中并没有 创建 XML 文件的选项,当然也就没有创建 Spring Config 的选项。解决:手动创建 XML 文件:https://blog.csdn.net/weixin_46625455/article/details/106817869
  • 解决 IDEA 控制台显示中文乱码的问题:https://zhuanlan.zhihu.com/p/351406847
    (PS:类似于文章中的第一种方法,在导航栏中,运行->编译配置->(选择当前应用程序)->虚拟机选项,输入 -Dfile.encoding=UTF-8
  • 问题:

    https://blog.csdn.net/qq_42183409/article/details/89422142
  • 问题:test 目录下的 main 方法无法执行,报错无法找到或加载主类,浪费了大半天的时间搜索如何解决无法找到主类的问题硬是没有,最后还好换了方向去搜索上级的报错Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project,终于是找到了一模一样的问题
    https://blog.csdn.net/weixin_36979214/article/details/107282951?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&utm_relevant_index=1
  • IDEA 运行模块的 main 方法时,maven 会 build 整个项目的解决办法:https://blog.csdn.net/xiaobo5264063/article/details/104900973?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1.pc_relevant_default&utm_relevant_index=1
  • 问题:使用 com.sql.cj.jdbc.Driver 在关闭 Tomcat 时,发生报错,Tomcat停止时为了防止内存泄漏,JDBC驱动程序被强制取消注册(Tomcat启动久关闭报错问题)
    解决:https://blog.csdn.net/qq_44758515/article/details/106935615
  • 上一条的解决就仅仅解决了上一条的问题,在关闭 Tomcat 时仍会报错:Web应用程序[spring_test_war_exploded]似乎启动了一个名为[Timer-0]的线程,但未能停止它。这很可能会造成内存泄漏。

    27-Feb-2022 19:42:33.685 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序 [spring_test_war_exploded]似乎启动了一个名为[Timer-0]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
    java.lang.Object.wait(Native Method)
    java.util.TimerThread.mainLoop(Timer.java:552)
    java.util.TimerThread.run(Timer.java:505)]
    27-Feb-2022 19:42:33.686 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[spring_test_war_exploded]似乎启动了一个名为[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)]
    27-Feb-2022 19:42:33.686 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[spring_test_war_exploded]似乎启动了一个名为[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)]
    27-Feb-2022 19:42:33.687 警告 [localhost-startStop-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[spring_test_war_exploded]似乎启动了一个名为[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
    java.lang.Object.wait(Native Method)
    com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)]

    未解决:https://blog.csdn.net/qq_43319748/article/details/115713585
    这条帖子与上条的解决其实可以说是几乎一样的,可以对比看一下,最主要的有两点区别:
    • 在取消注册驱动器时,上一种方法是整合成一条语句进行的
    • 上一种关闭线程时使用的是 AbandonedConnectionCleanupThread.checkedShutdown() ,而本解决中使用的则是 AbandonedConnectionCleanupThread.uncheckedShutdown()
      原因:若不访问数据库,关闭服务器则不会出现报错,但是一旦访问了数据库,不管是查询还是添加记录、删除记录都会引起报错
  • 注意 SpringMVC 的执行流程,如果没有配置 DispatcherServlet 前端控制器,会报 404
  • 导入文件夹已在项目根目录下的 maven 模块,ProjectStructure -> add -> Import Module 选择文件夹 -> Import module from external model -> apply
  • 执行 test 的测试方法时报错无法创建对象
  • 问题:项目在每次重新部署后访问都会出现以下报错:
16:31:24.006 [C3P0PooledConnectionPoolManager[identityToken->jz6rlao1w14z6tf6hge5|18292379]-HelperThread-#0] DEBUG c.m.v.resourcepool.BasicResourcePool - An exception occurred while acquiring a poolable resource. Will retry.
java.sql.SQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
	at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
	at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
	at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
	at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
	at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
	at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
	at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
- 原因:未查明,可能是因为数据库连接不能及时释放,也可能是跟前面的那个线程无法正常关闭有关
- 解决:未解决
posted @ 2022-01-19 11:26  CodingFly  阅读(107)  评论(0编辑  收藏  举报