在代码中添加了一个 aop 拦截器,对一些方法进行拦截。
@Component
@Aspect
@Slf4j
public class MyAop {
//具体拦截逻辑
}
在代码中添加了一个 aop 拦截器,对一些方法进行拦截。
@Component
@Aspect
@Slf4j
public class MyAop {
//具体拦截逻辑
}
手写了一个插件,以前好好地,后来加了些功能,就无法启动了
[ERROR] Failed to execute goal com.github.houbb:idoc-core:0.0.3-SNAPSHOT:idoc (default-cli) on project idoc-test: Execution default-cli of goal com.github.houbb:idoc-core:0.0.3-SNAPSHOT:idoc failed: An API incompatibility was encountered while executing com.github.houbb:idoc-core:0.0.3-SNAPSHOT:idoc: java.lang.ExceptionInInitializerError: null
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>com.github.houbb:idoc-core:0.0.3-SNAPSHOT
.....
.....
.....
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
[ERROR]
[ERROR] -----------------------------------------------------
[ERROR] : NullPointerException
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException
maven-shade-plugin
是 Maven 构建工具的一个插件,它的主要作用是将所有依赖项和项目的类文件打包到一个可执行的 JAR 文件中。
通常,当你的项目有很多依赖项时,你可能会得到一个包含了所有依赖的 JAR 文件。
这对于创建可独立运行的、包含所有必要依赖项的可执行 JAR 文件非常有用。
以下是 maven-shade-plugin
的主要作用:
依赖项合并: maven-shade-plugin
可以将项目的所有依赖项合并到一个 JAR 文件中,消除了在运行时需要多个 JAR 文件的问题。这样可以简化项目的部署和分发过程,用户只需要一个 JAR 文件即可运行应用程序。
类重命名: 该插件还提供了类重命名的功能,可以避免因为不同依赖项中存在相同类名而引起的冲突。它可以为这些类添加前缀、后缀或者进行其他自定义的重命名操作,确保在合并后的 JAR 文件中不会发生类名冲突。
资源合并: 除了类文件,maven-shade-plugin
还可以合并项目中的资源文件,比如配置文件、属性文件等。这样,所有项目相关的资源都会被包含在生成的 JAR 文件中。
要知道如何处理,首先要知道 java 的中断机制。
如果对 Java 中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。
中断机制是如何工作的?捕获或检测到中断后,是抛出 InterruptedException 还是重设中断状态以及在方法中吞掉中断状态会有什么后果?
Thread.stop 与中断相比又有哪些异同?
什么情况下需要使用中断?
线程池中的异常如何处理?
中断处理的最佳实践?
SpringBoot在运行的时候会出现NoClassDefFoundError: org/apache/juli/logging/LogFactory的错误,
具体错误内容如下:
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
大家好,我是老马。
平时一直在使用 springboot,却总感觉对于其理解不深入,于是有两个这个系列的整理。
主要是为了系统的学习一下 springboot,残缺补漏一下。主要翻译自官方文档,结合自己的实际使用。
web 开发中连接数据库基本是必须的,阿里的 druid 是一款非常优秀的开源数据库连接池工具。
本文将介绍一下如何使用 springboot 整合 druid 数据源。
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
4.0.0
spring-boot-druid
hello world
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-jpa
com.alibaba
druid-spring-boot-starter
1.1.17
mysql
mysql-connector-java
5.1.47
org.springframework.boot
spring-boot-maven-plugin
通过spring initializr,我们可以快速构建一个springboot应用,如果你选择的是Maven来管理项目,在默认的pom文件中有这么一个section:
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。
Thymeleaf是一个Java库。它是一个XML / XHTML / HTML5模板引擎,能够对模板文件应用一组转换,以显示应用程序生成的数据和/或文本。
它更适合在Web应用程序中提供XHTML / HTML5服务,但是它可以处理任何XML文件,无论是在Web中还是在独立应用程序中。
Thymeleaf的主要目标是提供一种优雅且格式正确的模板创建方法。为了实现这一点,它基于XML标签和属性,这些属性定义了DOM(文档对象模型)上预定义逻辑的执行,而不是将该逻辑作为模板中的代码显式编写。
在实际开发过程中,每次修改代码就得将项目重启,重新部署,对于一些大型应用来说,重启时间需要花费大量的时间成本。
对于一个后端开发者来说,重启过程确实很难受啊。
在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。
下面就看看对于简单的类修改的热部署怎么实现。
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。