小编典典

通过使用Spring Boots application.properties优化JDBC的获取大小

spring-boot

我基于Spring Boot 1.3.1的应用程序依赖于Oracle 11.2数据库,我想调整SELECT语句结果的获取。

JdbcTemplate可以public void setFetchSize(int fetchSize)调整获取大小,对于10驱动程序,Oracle对Oracle预先设置了获取大小:

设置此JdbcTemplate的获取大小。这对于处理大型结果集很重要:将其设置为高于默认值将提高处理速度,但会消耗内存。将此值设置得较低可以避免传输应用程序永远不会读取的行数据。默认值为-1,表示使用JDBC驱动程序的默认值(即,不通过驱动程序上的特定获取大小设置)。

Oracle
JDBC驱动程序(我使用ojdbc7.jar是因为它向下兼容)提供了一个defaultRowPrefetch参数来增加完整数据库连接的获取大小。

根据文档,可以通过以下方式设置此参数:

java.util.Properties info = new java.util.Properties();
info.put ("user", "scott");
info.put ("password","tiger");
info.put ("defaultRowPrefetch","15");
getConnection ("jdbc:oracle:oci8:@",info);

但是我的应用程序是使用配置的application.yml

datasource:
    url: jdbc:oracle:thin:@xyz:1521:abc
    username: ${name}
    password: ${password}
    driver-class-name: oracle.jdbc.driver.OracleDriver
    ...

即使我想更改该配置以使用spring.datasource.url=jdbc:...它,也无法根据此文章全局设置获取大小。

是否有更多的“ Spring Boot样式”方法,还是我需要手动配置每个模板?


阅读 484

收藏
2020-05-30

共1个答案

小编典典

A BeanPostProcessor将以处理所有bean
ApplicationContext,这样,您可以添加其他配置,或者根据需要完全替换它。

您可以创建一个BeanPostProcessor将属性添加到已配置的DataSourcecommons- dbcp如果您相应地使用其他DataSource修改,则下面的示例假定使用1或2 。

public class DataSourceConfiguringBeanPostProcessor implements BeanPostProcessor {
    private final Map<String,String> properties = new HashMap<>;

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean instance BasicDataSource ) { 
            for (Map.Entry<String, String> prop : properties.entrySet()) {
                ((BasicDataSource) bean).addConnectionProperty(prop.getKey(), prop.getValue());
            }
        }
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    public void setProperties(Map<String, String> properties) {
        this.properties.putAll(properties);
    }
}

现在,您可以将其添加到配置中,它将属性添加到DataSourcebean。

@Bean
public BeanPostProcessor dataSourcePostProcessor() {
    DataSourceConfiguringBeanPostProcessor processor = new DataSourceConfiguringBeanPostProcessor();
    Map<String, String> properties = new HashMap<>();
    properties.put("defaultRowPrefetch", "15");
    properties.put("defaultBatchValue", "25");
    processor.setProperties(properties);
    return processor;
}

这应该可以完成配置数据源的技巧。

2020-05-30