首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Tomcat类路径加载器邮件与spring-boot-starter- javax.mail.Session冲突

Tomcat类路径加载器邮件与spring-boot-starter-javax.mail.Session冲突是因为Tomcat的类路径加载器会加载应用程序中的所有类,而spring-boot-starter-javax.mail.Session是一个用于发送邮件的依赖包,它包含了javax.mail.Session类。当Tomcat加载应用程序时,如果应用程序中已经存在了javax.mail.Session类,就会发生冲突。

为了解决这个冲突,可以采取以下几种方法:

  1. 排除冲突依赖:在应用程序的pom.xml文件中,排除spring-boot-starter-javax.mail.Session依赖,然后手动引入一个与Tomcat版本兼容的javax.mail.Session依赖。具体操作可以参考以下示例代码:
代码语言:txt
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-javax.mail</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.2</version>
</dependency>
  1. 修改Tomcat的类加载顺序:可以通过修改Tomcat的配置文件,调整类加载器的顺序,使Tomcat先加载应用程序的类,再加载自身的类。具体操作可以参考以下步骤:
    • 打开Tomcat的配置文件conf/context.xml
    • <Context>标签内添加以下内容:
    • <Context>标签内添加以下内容:
    • 保存并重启Tomcat。
  • 使用独立的邮件发送组件:将邮件发送功能独立出来,使用独立的邮件发送组件,而不是依赖于Tomcat的类路径加载器。这样可以避免与Tomcat的类路径加载器产生冲突。常见的独立邮件发送组件有Apache Commons Email、JavaMail等。

以上是解决Tomcat类路径加载器邮件与spring-boot-starter-javax.mail.Session冲突的几种方法。根据具体情况选择适合的解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Tomcat-9.JNDI资源

1.介绍 Tomcat为每个在其上运行的web应用提供了一个JNDI的** InitialContext**实现实例,它与Java EE应用服务提供的对应完全兼容。..." readonly="false" /> 属性pathname可以采用绝对路径或者相对路径,相对路径是相对于$CATALINA_BASE。...6.3 JavaMail会话 6.3.0 简介 Tomcat 多包涵的标准资源工厂可以创建javax.mail.Session会话实例,并且已经配置好连接SMTP服务上,从而使应用电子邮件配置环境隔离... 注意,资源名(这里是mail/Session)必须web应用部署描述文件中的值相匹配。对于mail.smtp.host参数,可以用为你提供SMTP服务的服务来自定义。...实际发送邮件的servlet源代位于/WEB-INFO/classes/SendMailServlet.java中。 默认配置在localhost的端口25上的SMTP服务

1.1K30

登录之找回密码

tomcat中配置javamail;        在META-INFO下新建context.xml,目的是为了让tomcat帮我们管理Session,Session是发送邮件的上下文环境,内容如下:...将上面的两个jar包放到tomcat/lib下,这两个jar包tomcat启动时就需要使用,因为我们把Session对象交给tomcat去创建;        4....创建属性文件,属性文件里记录了发送邮件邮件服务,用户名,密码信息,提到属性文件里是为了修改方便; mail.host=smtp.sina.com mail.username=×××××××××××...mail.password=×××××××××××        我没有自己的邮件服务,这里写的是新浪的。        ..."), props.getProperty("mail.password"));// 连接邮件服务 transport.sendMessage(msg, InternetAddress.parse

3.5K00

SpringBoot之旅-启动原理及自定义starter

primarySources)); //确定web应用类型 this.webApplicationType = WebApplicationType.deduceFromClasspath(); //从路径下找到...第九步:刷新容器,ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat),这个就是扫描,创建,加载所有组件的地方,(配置,组件,自动配置)。...:让xxxProperties生效加入到容器中 按照这些注解写好自动配置后,我们还需要进行自动配置的加载加载方式是将需要启动就加载的自动配置,配置在META-INF/spring.factories...,启动的大致原理是如此,而启动的实际设计是有一定模式的,就是启动模块是一个空 JAR 文件,仅提供辅助性依赖管理,而自动配置模块应该再重新设计一个,然后启动再去引用这个自动配置模块。...Springboot就是如此设计的: 另外还有一个命名规则: 官方命名空间 – 前缀:“spring-boot-starter-” – 模式:spring-boot-starter-模块名 – 举例:

22640

5-Springboot进阶1

spring-boot-dependencies则详细的声明了我们日常可能使用到的各种依赖的版本号,即该文件为我们进行了依赖管理 这里需要注意另一个问题,我们使用父项目进行依赖管理的过程中不可避免的涉及到项目需要使用的依赖版本父项目内部定义的版本号冲突...Springboot提供各种各样开箱即用的场景启动,这些启动的命名一般都按照spring-boot-starter-*, (*就表示各种场景) 而相应的,一些第三方也会为我们提供各种启动,这类启动一般以...Springboot内置了tomcat服务并为我们进行了配置。...当我们使用了web启动后,在其内部就可以看到其为我们引入了tomcat启动 org.springframework.boot...SpringBootApplication(scanBasePackages="com.google") 可以看到Springboot拥有非常复杂的配置项,但并不是我们在启动项目时,这些配置项都会生效,Springboot会按需加载所有的配置项

25530

03、了解自动配置原理

1、见到很多 spring-boot-starter-* : *就某种场景 2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入 3、SpringBoot所有支持的场景 https:/...引入Tomcat依赖。...:字符编码问题 SpringBoot帮我们配置好了所有web开发的常见场景 默认的包结构 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来 无需以前的包扫描配置 想要改变扫描路径...,如:MultipartProperties 配置文件的值最终会绑定每个上,这个会在容器中创建对象 按需加载所有自动配置项 非常多的starter 引入了哪些场景这个场景的自动配置才会开启...SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面 … 2、容器功能 2.1、组件添加 1、@Configuration 基本使用 Full模式Lite

21910

从Jar包冲突搞到加载机制,就是这么霸气

加载的隔离问题 每个装载都有一个自己的命名空间用来保存已装载的。...双亲委派机制 双亲委派机制的核心有两点:第一,自底向上检查是否已加载;其二,自顶向下尝试加载加载通常有四:启动加载、拓展加载、应用程序加载和自定义加载。...决定Jar包加载顺序通常有以下因素: 第一,Jar包所处的加载路径。也就是加载该Jar包的加载在JVM加载树结构中所处层级。上面讲到的四加载加载的Jar包的路径是有不同的优先级的。...因Tomcat、Resin等容器的ClassLoader获取加载路径下的文件列表时是不排序的,这就依赖于底层文件系统返回的顺序,当不同环境之间的文件系统不一致时,就会出现有的环境没问题,有的环境出现冲突...Tomcat启动时Jar包和加载顺序 最后,梳理一下Tomcat启动时,对Jar包和加载顺序,其中包含上面提到的不同种类的加载默认加载的目录: $java_home/lib 目录下的java

1.2K30

Jar 包依赖冲突很烦人,总结一波排查思路和解决方法

jvm 加载包名和名相同的时,先加载classpath中jar路径放在前面的,包名名都相同,那jvm没法区分了,如果使用ide一般情况下是会提示发生冲突而报错,若不报错,只有第一个包被引入(在classpath...路径下排在前面的包),第二个包会在classloader加载时判断重复而忽略。...,应用也能正常启动,所以本地开发无法复现 =-= ---- 在 uat 环境服务测试 在 WEB-INF/lib 路径下,先将这两个包删掉,尝试有不同的上传顺序,模拟 tomcat 解压 war 包...于是乎,我也不纠结某台服务上的加载顺序,在开发阶段就先将这个包冲突的情况,给提前解决掉~ ---- 总结 冲突提示信息 java.lang.ClassNotFoundException:类型转换错误...2、统一服务版本 在测试阶段,准备好和生产环境一样的服务,提前进行测试,避免依赖冲突的 WAR 包上传到生产环境,例如我们有一台 UAT 服务生产环境一样配置,提前测试,暴露风险和解决问题~

1.9K10

2. SpringMVC入门案例

1.创建 web 工程(Maven 结构) 2.设置 tomcat 服务加载 web 工程(tomcat 插件) 3.导入坐标(SpringMVC+Servlet) 4.定义处理请求的功能(UserController...,导致启动报错 provided 代表的是该包只在编译和测试的时候用,运行的时候无效直接使用 tomcat 中的,就避免冲突 ‍ 4.定义处理请求的功能(UserServlet) 创建配置 @Configuration...名称 @RequestMapping 类型 注解或方法注解 位置 SpringMVC 控制或方法定义上方 作用 设置当前控制方法请求访问路径 相关属性 value(默认),请求访问路径 知识点...入门案例总结 一次性工作 创建工程,设置服务加载工程 导入坐标 创建 web 容器启动加载 SpringMVC 配置,并设置 SpringMVC 请求拦截路径 SpringMVC 核心配置...(设置配置,扫描 controller 包,加载 Controller 控制 bean) 多次工作 定义处理请求的控制 定义处理请求的控制方法,并配置映射路径(@RequestMapping

13810

Jar 包依赖冲突排查思路和解决方法

jvm 加载包名和名相同的时,先加载classpath中jar路径放在前面的,包名名都相同,那jvm没法区分了,如果使用ide一般情况下是会提示发生冲突而报错,若不报错,只有第一个包被引入(在classpath...路径下排在前面的包),第二个包会在classloader加载时判断重复而忽略。...,应用也能正常启动,所以本地开发无法复现 =-= ---- 在 uat 环境服务测试 在 WEB-INF/lib 路径下,先将这两个包删掉,尝试有不同的上传顺序,模拟 tomcat 解压 war 包...于是乎,我也不纠结某台服务上的加载顺序,在开发阶段就先将这个包冲突的情况,给提前解决掉~ ---- 总结 冲突提示信息 java.lang.ClassNotFoundException :类型转换错误...Exclude 2、统一服务版本 在测试阶段,准备好和生产环境一样的服务,提前进行测试,避免依赖冲突的 WAR 包上传到生产环境,例如我们有一台 UAT 服务生产环境一样配置,提前测试,暴露风险和解决问题

1.5K20
领券