Spring 产生SessionFactory,使用c3p0配置数据源相关配置
程序员文章站
2022-05-24 14:37:21
...
1、首先要引入c3p0包和支持包,在hibernate的lib有个optional目录,里面有需要的包。
2、配置driverClass等相关属性,注意:property里面的name值不可乱写,必须是下图配置的那样,否则会报property 不受信赖异常。
3、使用mysql8.0.1版本数据库,配置jdbcUrl时要加时区等后缀,下面的配置可行,但还有其他配置方法,我不太理解为什么。
<!--dataSource Configuration -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssh?serverTimezone=GMT%2B8&useSSL=FALSE"></property>
<property name="user" value="weishao"></property>
<property name="password" value="123456"></property>
</bean>
4、重点:接下来是配置sessionFactory,引入配好的数据源,引入hibernate.cfg.xml(有些配置写在这文件,比如show_sql=true,映射文件等等,当然也可以都写在spring的配置文件),至此,是网上比较主流的一些配置, 都是基于成功的基础上。但是我就失败了,原因就是说连接不到数据库,在初始化c3p0连接池的时候停顿了好久,原因是Spring管理SessionFactory配置数据库连接的时候,默认找hibernateProperty里面的连接信息,所以要在sessionfactory bean里加入一个hibernateProperty属性,配置hibernate的连接数据库信息。
<!-- create sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<value>
hibernate.connection.driver_class com.mysql.cj.jdbc.Driver
hibernate.connection.username weishao
hibernate.connection.password 123456
hibernate.connection.url jdbc:mysql://localhost:3306/ssh?serverTimezone=GMT%2B8&useSSL=FALSE
</value>
</property>
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
下面是未覆盖hibernateProperty连接配置的异常:
信息: Initializing c3p0 pool... [email protected][ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, allUsers -> [], autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 3db5e9f1, description -> null, driverClass -> com.mysql.cj.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 3c098cfd, idleConnectionTestPeriod -> -1, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/ssh?serverTimezone=GMT%2B8&useSSL=FALSE, maxIdleTime -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ]
七月 24, 2018 5:46:32 下午 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run
警告: [email protected]b1 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: Access denied for user 'sa'@'localhost' (using password: NO)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:107)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:113)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:728)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1258)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:368)
七月 24, 2018 5:46:32 下午 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run
警告: [email protected]a -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
上一篇: Linux下时间日期设置
下一篇: php实现倒计时效果_php技巧
推荐阅读
-
JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
-
Spring配置C3P0、Druid数据源和JdbcTemplate模板类
-
spring整合c3p0整合mybatis。spring使用java配置类来整合配置c3p0数据源和mybatis。
-
Spring学习------配置数据源(c3p0数据源)、注解开发
-
Spring 产生SessionFactory,使用c3p0配置数据源相关配置
-
配置数据源(C3P0)------SPRING传统方法
-
使用dbcp、c3p0以及阿里druid数据源连接池配置参数详解
-
Spring多数据源的配置和使用(2)
-
C3P0 配置spring数据源
-
总结spring下配置dbcp,c3p0,proxool数据源链接池