同一个Tomcat下部署多个web项目,因同时使用druid连接池导致冲突

环境说明

服务器:Tomcat-8.5.31
内置项目:两个Springboot项目,同时引入druid连接池
druid使用方式:druid-spring-boot-starter
druid版本号:1.1.10

启动报错

Tomcat启动报如下错误:

nested exception is javax.management.InstanceAlreadyExistsException: com.alibaba.druid.pool:name=dataSource,type=DruidDataSource

错误原因

通过对报错信息的解读,大致猜测是两个项目的druid连接池注册了相同的bean,导致bean冲突

解决方法

通过在网上搜集资料,找出一下三种解决方法:

1. 在Tomcat启动参数中加入如下参数: (测试无效)

-Ddruid.registerToSysProperty=true
  1. 升级druid版本**(我的版本已经比教程上的要高了,无效)**
  2. 在项目的application.properties中加入jmx名称配置:
# jmx 默认域,用于区分项目
spring.jmx.default-domain=xxxxxx

(测试有效)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在 MyBatis-Plus 中配置了多个数据源,可以通过数据源名称来获取对应的 Druid 连接池。具体步骤如下: 1. 首先需要获取 `SqlSessionFactory` 对象,可以通过 `MybatisSqlSessionFactoryBean` 类来获取该对象,如下所示: ``` @Autowired private MybatisSqlSessionFactoryBean sqlSessionFactory; ``` 2. 获取 `SqlSessionFactory` 对象后,可以通过其 `getConfiguration()` 方法获取 `Configuration` 对象,如下所示: ``` Configuration configuration = sqlSessionFactory.getObject().getConfiguration(); ``` 3. 通过 `Configuration` 对象的 `getEnvironment()` 方法获取当前的 `Environment` 对象,如下所示: ``` Environment environment = configuration.getEnvironment(); ``` 4. 通过 `Environment` 对象获取数据源对象,可以通过数据源对象获取到对应的 Druid 连接池。获取数据源对象有两种方法: 4.1. 根据数据源名称获取数据源对象,如下所示: ``` DataSource dataSource = environment.getDataSource("dataSourceName"); DruidDataSource druidDataSource = (DruidDataSource) dataSource; ``` 其中,"dataSourceName" 是你在配置数据源时指定的数据源名称。 4.2. 获取所有的数据源对象,遍历获取对应的 Druid 连接池,如下所示: ``` Map<String, DataSource> dataSourceMap = environment.getDataSources(); for (Map.Entry<String, DataSource> entry : dataSourceMap.entrySet()) { if (entry.getKey().equals("dataSourceName")) { DruidDataSource druidDataSource = (DruidDataSource) entry.getValue(); // do something break; } } ``` 其中,"dataSourceName" 是你在配置数据源时指定的数据源名称。 以上代码中,`druidDataSource` 就是获取到的 Druid 连接池。需要注意的是,获取到的 `DataSource` 对象可能是一个代理对象,需要强制转换为 `DruidDataSource` 类型才能调用其相关方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值