Hibernate5下配置Druid连接池
来源:互联网 发布:php rsa加密 编辑:程序博客网 时间:2024/06/06 08:35
先上配置文件:
<!--数据源信息 for Druid--> <property name="driverClassName">com.mysql.jdbc.Driver</property> <property name="url">jdbc:mysql:///hibernate?useSSL=false</property> <property name="username">root</property> <property name="password">root</property> <property name="filter">stat,log4j</property> <property name="initialSize">5</property> <property name="maxActive">100</property> <property name="maxWait">60000</property> <property name="timeBetweenEvictionRunsMillis">60000</property> <property name="minEvictableIdleTimeMillis">300000</property> <property name="validationQuery">SELECT 1</property> <property name="testWhileIdle">true</property> <property name="testOnBorrow">false</property> <property name="testOnReturn">false</property> <property name="poolPreparedStatements">false</property> <property name="maxPoolPreparedStatementPerConnectionSize">200</property> <!--end--> <property name="dialect"> org.hibernate.dialect.MySQL57Dialect </property> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- #hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider --> <property name="hibernate.connection.provider_class"> <!--org.hibernate.connection.C3P0ConnectionProvider--> com.alibaba.druid.support.hibernate.DruidConnectionProvider </property> <property name="hibernate.current_session_context_class">thread</property>
以下是记录折腾的过程:
今天用Hibernate5配置Druid连接池,直接从网上复制粘贴别人的配置,发现报错:
网上的配置信息:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- 数据源信息 for hibernate --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///bookstore?useSSL=false</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- #hibernate.connection.provider_class --> <property name="hibernate.connection.provider_class"> com.alibaba.druid.support.hibernate.DruidConnectionProvider </property> <property name="hibernate.current_session_context_class">thread</property> <mapping resource="com/fly/domain/books.hbm.xml" /> </session-factory></hibernate-configuration>
错误信息:
java.lang.NullPointerException at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:311) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:581) at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:807) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1197) at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1193) at com.alibaba.druid.support.hibernate.DruidConnectionProvider.getConnection(DruidConnectionProvider.java:52) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:180) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68)
开启debug:
发现DataSource中的参数全部为空!!!看来,Hibernate中的配置信息并未能配置进DataSource中!!!
下断点,跟到这个对象AbstractServiceRegistryImpl 中有这三句
//注入依赖(搞不懂干啥用的)serviceBinding.getLifecycleOwner().injectDependencies(serviceBinding);//配置(关键,DataSource的参数是在这里是配置,跟进)serviceBinding.getLifecycleOwner().configureService(serviceBinding);//启动serviceBinding.getLifecycleOwner().startService(serviceBinding);
跟进configureService(serviceBinding);后,看到了这个对象:
DruidConnectionProvider(com.alibaba.druid.support.hibernate),这下应该找对地方了,他执行了:
DruidDataSourceFactory.config(this.dataSource, configurationValues);
其中,configurationValues是一个Map,存放着Hibernate.cfg.xml中的“属性名—属性值”信息,dataSource就是我们喜闻乐见的DruidDataSource了。
继续跟进去,不出所料,全是赋值过程:
value = (String)properties.get("driverClassName"); if (value != null) { dataSource.setDriverClassName(value); } value = (String)properties.get("maxActive"); if (value != null) { dataSource.setMaxActive(Integer.parseInt(value)); } value = (String)properties.get("maxIdle"); if (value != null) { dataSource.setMaxIdle(Integer.parseInt(value)); } …………
问题来了,这里的key似乎和我们配置的key不一致!
于是修改Hibernate配置:
<!--数据源信息 for Druid--><property name="driverClassName">com.mysql.jdbc.Driver</property><property name="url">jdbc:mysql:///bookstore?useSSL=false</property><property name="username">root</property><property name="password">root</property><property name="filter">stat</property><property name="initialSize">5</property><property name="maxActive">100</property><property name="maxWait">60000</property><property name="timeBetweenEvictionRunsMillis">60000</property><property name="minEvictableIdleTimeMillis">300000</property><property name="validationQuery">SELECT 1</property><property name="testWhileIdle">true</property><property name="testOnBorrow">false</property><property name="testOnReturn">false</property><property name="poolPreparedStatements">false</property><property name="maxPoolPreparedStatementPerConnectionSize">200</property><!--end-->
顺利运行!
阅读全文
0 0
- Hibernate5下配置Druid连接池
- druid连接池配置Druid
- druid连接池配置
- druid连接池配置
- druid连接池配置
- druid连接池配置
- druid连接池配置
- druid 连接池配置
- druid连接池配置
- druid连接池配置
- druid连接池配置
- Druid连接池配置
- Druid连接池配置
- Druid连接池配置
- Druid连接池配置
- druid连接池配置
- Spring Boot下Druid连接池的使用配置分析
- Druid连接池以及在springboot下配置
- C6748_I2C
- linux 创建用户useradd与adduser 删除用户userdel 创建删除用户组命令
- 高通骁龙835首秀,和麒麟960、联发科X30、三星Exynos 8895相比如何?| 解析
- nginx单点故障怎么破?
- 类,超类和子类
- Hibernate5下配置Druid连接池
- 数组模拟实现二叉堆——(为以后的链表实现二叉堆打基础) _清风明月
- 腾讯成特斯拉第五大股东,暂不会主动介入运营事务
- IBM如何在云计算上追赶AWS、Google和微软?
- 深度 | 微信小程序现在在想什么?
- 滴滴正式公告将于四月前停止对非京牌车派单
- Qt 为创建的Window程序(exe)添加属性信息
- [JZOJ5429]【NOIP2017提高A组集训10.27】排列
- printk