1、META-INF 下的 persistence.xml
<persistence-unit name="esa" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@172.1.1.1:1521:test"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="2be98afc86aa7f2a5a11af92386d8ec9b"/>
<property name="hibernate.connection.provider_class" value="com.regaltec.common.hibernate.NewConnectionProvider"/>
<!-- <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" /> -->
<property name="hibernate.dialect" value="com.regaltec.esa.common.utils.OracleDialect"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
<!-- 最小连接数 -->
<property name="c3p0.min_size" value="1" />
<!-- 最大连接数 -->
<property name="c3p0.max_size" value="30" />
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="c3p0.maxIdleTime" value="60" />
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="c3p0.timeout" value="6000" />
<!-- 最大的PreparedStatement的数量 -->
<property name="c3p0.max_statements" value="50" />
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒 -->
<property name="c3p0.idle_test_period" value="120" />
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="c3p0.acquire_increment" value="1" />
<!-- 是否每次都验证连接是否可用 -->
<property name="c3p0.validate" value="false" />
</properties>
</persistence-unit>
2、新建class NewConnectionProvider.java
package com.regaltec.common.hibernate;
import java.util.Properties;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment;
import org.hibernate.connection.DriverManagerConnectionProvider;
import com.regaltec.esa.common.utils.EncryptUtil;
public class NewConnectionProvider extends DriverManagerConnectionProvider {
public static final Logger log = LogManager.getLogger(NewConnectionProvider.class);
public NewConnectionProvider() {
super();
}
@Override
public void configure(Properties props) throws HibernateException {
//String user = props.getProperty(Environment.USER);
String password = props.getProperty(Environment.PASS);
try {
//props.setProperty(Environment.USER, EncryptUtil.decrypt(user));
//System.out.println("解密前密码为:" + password);
password = EncryptUtil.decrypt(password);
props.setProperty(Environment.PASS, password);
//System.out.println("解密后密码为:" + password);
} catch (Exception e) {
log.error("解密数据库帐号密码异常:" + e.getMessage(), e);
}
super.configure(props);
}
}
其中 EncryptUtil 是加密、解密的工具类,可自行编写