当我通过jdbctemplate.queryforlist从java中的oracle数据库检索数据列表时,速度太慢了。在数据库上执行查询需要1.5秒。在java中检索它需要20秒。
我的应用程序是Java8SpringBoot2.0.1,我使用jdbctemplate。
代码如下:
application.properties(数据库属性连接)
toto.url=jdbc:oracle:thin:toto
toto.username=toto
toto.password=toto
driver-class-name=oracle.jdbc.OracleDriver
数据源配置
package com.bnp.paribas.ism.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
import javax.sql.DataSource;
@Configuration
public class DatabaseConfig {
@Autowired
private Environment environment;
@Autowired
private DataSourceProperties dataSourceProperties;
@Bean(name = "toto")
public DataSource getDataSource() {
SingleConnectionDataSource singleConnectionDataSource = new SingleConnectionDataSource();
singleConnectionDataSource.setDriverClassName(environment.getProperty("driver-class-name"));
singleConnectionDataSource.setUrl(environment.getProperty("toto.url"));
singleConnectionDataSource.setUsername(environment.getProperty("toto.username"));
singleConnectionDataSource.setPassword(environment.getProperty("toto.password"));
return singleConnectionDataSource;
}
@Bean(name = "totoJdbcTemplate")
@Autowired
public JdbcTemplate getJdbcTemplate(@Qualifier("toto") DataSource toto) {
return new JdbcTemplate(toto);
}
}
刀
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import javax.sql.DataSource;
import java.util.List;
@Repository
public class TotoDAO {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<String> getPckSpecificationContent(String schema, String namePck){
StringBuilder requete = new StringBuilder();
requete.append("SELECT TEXT ")
.append("FROM ALL_SOURCE ")
.append("WHERE OWNER='").append(schema).append("' ")
.append("AND TYPE='PACKAGE' ")
.append("AND NAME='").append(namePck).append("'");
return jdbcTemplate.queryForList(requete.toString(), String.class);
}
public List<String> getPckBodyContent(String schema, String namePck){
StringBuilder requete = new StringBuilder();
requete.append("SELECT TEXT ")
.append("FROM ALL_SOURCE ")
.append("WHERE OWNER=?" )
.append("AND TYPE=? " )
.append("AND NAME=?");
return jdbcTemplate.queryForList(requete.toString(), String.class, schema, "PACKAGE BODY", namePck);
}
public List<String> getListPckName(String schema){
StringBuilder requete = new StringBuilder();
requete.append("SELECT DISTINCT NAME ")
.append("FROM ALL_SOURCE ")
.append("WHERE OWNER='").append(schema).append("' ")
.append("AND TYPE='PACKAGE' ")
.append("ORDER BY NAME ASC");
return jdbcTemplate.queryForList(requete.toString(), String.class);
}
}
代码测试
@Test
public void test4(){
long debut = System.nanoTime();
totoDAO.getPckBodyContent(Constant.SCHEMA_NAME, PCK_NAME);
logger.info("temps écoulé : {} ", Double.valueOf(TimeUnit.NANOSECONDS.toMillis(System.nanoTime()
- debut))/1000.0);
}
完成此查询需要20秒。我应该使用querylist以外的东西吗?除了jdbctemplate之外的东西?
暂无答案!
目前还没有任何答案,快来回答吧!