ssm项目部署到服务器的问题
1.1、部署之前:记得把数据库连接的密码统一
后面还有报错:
Connections could not be acquired from the underlying database!
连接不上数据库
我这里主要的原因就是数据库密码,因为我本地数据库的密码和服务器数据库的密码不一致
解决方式
如下图:
服务器端:
ssm框架:
这里只是做演示,密码还是设置得复杂点。。。
1.2、数据库连接断开的问题
mysql数据库存在最大连接时限,一般是8小时,超出时限时会出现数据库连接不上的问题
mysql5之前的版本,可以在jdbc连接的url中加入:autoReconnect = true
mysql5之后:
这个问题也可以通过修改mysql最大连接时限来解决,但似乎不是最佳的解决方式,因为一旦超出连接时限,服务器数据库的连接依然会断开。
目前我搜到的最优解:
使用c3p0数据库连接池,它有一个属性:
c3p0可以设置每隔一段时间检测连接是否有效
不知道其他连接池是不是也有一样的属性。。。
<!--设置每隔60s检测数据库连接是否有效-->
<property name="idleConnectionTestPeriod" value="60"/>
c3p0数据库连接池的使用:
- 导入c3p0依赖
<!-- 数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
- 在spring的xml文件配置数据源
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- c3p0连接池的私有属性 -->
<!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->
<!--最大连接数 -->
<property name="maxPoolSize" value="30"/>
<!--连接池的最小连接数 -->
<property name="minPoolSize" value="10"/>
<!-- 初始化连接池中的连接数,取值应在最小连接数与最大连接数之间,默认为3-->
<property name="initialPoolSize" value="2"/>
<!-- 连接超时时间 -->
<property name="checkoutTimeout" value="10000"/>
<!--每隔60s检测数据库连接是否有效,这个值要小于MySQL的wait_timeout(默认为8小时)时间,默 认0-->
<property name="idleConnectionTestPeriod" value="60"/>
<!--当池中的连接耗尽的时候,一次性增加的连接数量,默认为3 -->
<property name="acquireIncrement" value="2"/>
<!--statements缓存大小 -->
<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。
默认值: 0 -->
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。
但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value="400"/>
<property name="maxStatementsPerConnection" value="100"/>
<!-- 关闭连接后不自动commit -->
<property name="autoCommitOnClose" value="false"/>
<!-- 当获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
<!--重新尝试的时间间隔,默认为:1000毫秒-->
<property name="acquireRetryDelay" value="1000"/>
</bean>
参考链接:
()
()