我有一个带有石英调度程序的Spring应用程序,用于批处理。最近4年以来一切正常。每1分钟运行一次批处理。但是从最近几天突然开始,当该批次试图获取一些数据时,我们得到了org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Could not open connection
该批次全天运行,但有时会出现此异常,而所有其他批次均无法连接到MySQL。因此,我们正在重新启动该应用程序,它运行正常。
数据源配置
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url">
<value>${DATABASE_URL}</value>
</property>
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="username">
<value>${DATABASE_USER}</value>
</property>
<property name="password">
<value>${DATABASE_PASSWORD}</value>
</property>
</bean>
会话工厂连接池配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
<!-- Configurations specific to c3p0 connection pooling -->
<prop key="hibernate.c3p0.acquire_increment">5</prop>
<prop key="hibernate.c3p0.idle_test_period">1800</prop>
<prop key="hibernate.c3p0.max_size">600</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
</props>
</property>
<property name="annotatedClasses">
<list> .... </list>
</property>
</bean>
答案 0 :(得分:1)
可能是运行您的db-server的mysql的问题。
更改数据库服务器中的mysql配置
在[mysqld]部分的mysql.cnf中添加绑定地址
bind-address=your_spring_application_ip
还更改mysql用户的访问主机。 在mysql中运行以下查询
update mysql.user set host='%' where user='your_username';
flush privileges;
然后重新启动mysql服务
sudo systemctl restart mysql
答案 1 :(得分:0)
最近,我们遇到了同样的问题。我们的应用程序无法连接到AWS Aurora实例。我们最终将sql驱动程序更改为mariadb。希望这会有所帮助。