在java方面,一切正常但是当我查看V $ SESSION特殊的oracle表,并在我的日志表中记录任何登录或注销操作时,这是一个灾难...每个查询都进行登录/注销操作。所以这是我的问题:有没有办法将Spring配置为与数据库建立唯一连接,或者我连接的方式有什么问题? 在这里,我的数据源bean配置:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@nanssunorad:1523:nanorad3</value>
</property>
<property name="username">
<value>foo</value>
</property>
<property name="password">
<value>bar</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>hibernateESign.cfg.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="IXalVaParametresDAO" class="fr.asterion.archivage.hibernate.XalVaParametresDAO">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
在我的应用程序中,为了获取数据库参数的DAO,我做了
IXalVaParametresDAO parametreDAO = (IXalVaParametresDAO) ConfigApplication
.getApplicationContext(this.log).getBean("IXalVaParametresDAO");
最后,在我的DAO课程中,我做了这样的事情:
public class XalVaParametresDAO implements IXalVaParametresDAO
{
private HibernateTemplate hibernateTemplate;
public void setSessionFactory(SessionFactory sessionFactory)
{
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public List<XalVaParametres> findAll()
{
log.debug("finding all XalVaParametres instances");
try
{
String queryString = "from XalVaParametres";
List lst = this.hibernateTemplate.find(queryString);
在我的应用程序中,每次调用“find”方法时,都会进行数据库登录/注销。我猜这个问题在另一个DB上是一样的。我做对了吗?我猜不会。我希望HibernateTemplate能够一劳永逸地创建和保持会话。那可能吗 ? 谢谢你的想法
Manux
答案 0 :(得分:5)
使用合并DataSource
,例如Apache Commons / DBCP的BasicDataSource
参考:
答案 1 :(得分:3)
建议不要在生产中使用DriverManagerDataSource
,因为它不会执行连接池。
您需要使用连接池,例如c3p0或Apache DBCP。
答案 2 :(得分:1)
最好使用应用程序服务器的连接池并在spring xml文件中指定jndi:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/DSTest"/>
</bean>
答案 3 :(得分:0)
您可以将本机oracle数据源与连接缓存一起使用,如:
<bean id="myDataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="connectionCachingEnabled" value="true"/>
<property name="URL">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="connectionCacheProperties">
<value>
MinLimit:1
MaxLimit:1
InitialLimit:1
ConnectionWaitTimeout:120
InactivityTimeout:180
ValidateConnection:true
MaxStatementsLimit:0
</value>
</property>
</bean>