基于Karaf+Hibernate+C3P0,如何禁用MySQL 8.0.11的SSL连接?
解决Karaf连接MySQL 8时的SSL警告问题
我之前在使用类似技术栈对接MySQL 8的时候,也碰到过这个烦人的SSL警告。结合你的环境(Karaf 4.0.7 + Hibernate 4.3.7 + C3P0 0.9.5 + MySQL驱动5.1.46),给你几个靠谱的解决方案:
方法1:修改JDBC URL添加SSL禁用参数
最简单直接的方式就是在你的JDBC连接URL末尾加上useSSL=false参数,强制禁用SSL连接。比如:
原来的URL:
jdbc:mysql://localhost:3306/your_database_name
修改后:
jdbc:mysql://localhost:3306/your_database_name?useSSL=false
如果后续仍有相关警告,也可以一并加上requireSSL=false确保彻底禁用:
jdbc:mysql://localhost:3306/your_database_name?useSSL=false&requireSSL=false
这个参数会直接传递给MySQL JDBC驱动,告诉它不要建立SSL连接,从而消除警告。
方法2:通过Hibernate配置传递SSL属性
如果不想修改URL,也可以在Hibernate的配置文件(比如hibernate.cfg.xml或者persistence.xml)中添加专门的连接属性:
在hibernate.cfg.xml中添加:
<property name="hibernate.connection.useSSL">false</property> <property name="hibernate.connection.requireSSL">false</property>
或者在persistence.xml的persistence-unit里:
<properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/your_database_name"/> <property name="hibernate.connection.useSSL" value="false"/> </properties>
Hibernate会把这些属性传递给底层的JDBC驱动,同样能达到禁用SSL的效果。
方法3:配置C3P0连接池的连接属性
因为你用了C3P0作为连接池,也可以直接在C3P0的配置中添加SSL相关属性,确保连接池创建的连接都禁用SSL。比如代码配置方式:
ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/your_database_name"); dataSource.setUser("your_user"); dataSource.setPassword("your_pass"); // 添加SSL属性 dataSource.addProperty("useSSL", "false"); dataSource.addProperty("requireSSL", "false");
如果是通过Karaf的.cfg配置文件管理C3P0,也可以添加对应的属性:
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/your_database_name c3p0.user=your_user c3p0.password=your_pass c3p0.properties.useSSL=false c3p0.properties.requireSSL=false
额外注意事项
- 修改配置后,记得重启对应的bundle或者Karaf实例,避免配置未生效;
- 如果你使用Karaf的Pax JDBC数据源,需要在数据源配置文件中通过
connectionProperties参数传递SSL设置,比如:url=jdbc:mysql://localhost:3306/your_database_name connectionProperties=useSSL=false
内容的提问来源于stack exchange,提问作者Nzall
相关产品推荐
相关产品推荐

