我基于Spring Boot 1.3.1的应用程序依赖于Oracle 11.2数据库,我想调整SELECT语句结果的获取。
JdbcTemplate可以public void setFetchSize(int fetchSize)调整获取大小,对于10驱动程序,Oracle对Oracle预先设置了获取大小:
JdbcTemplate
public void setFetchSize(int fetchSize)
10
设置此JdbcTemplate的获取大小。这对于处理大型结果集很重要:将其设置为高于默认值将提高处理速度,但会消耗内存。将此值设置得较低可以避免传输应用程序永远不会读取的行数据。默认值为-1,表示使用JDBC驱动程序的默认值(即,不通过驱动程序上的特定获取大小设置)。
Oracle JDBC驱动程序(我使用ojdbc7.jar是因为它向下兼容)提供了一个defaultRowPrefetch参数来增加完整数据库连接的获取大小。
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:
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.datasource.url=jdbc:...
是否有更多的“ Spring Boot样式”方法,还是我需要手动配置每个模板?
A BeanPostProcessor将以处理所有bean ApplicationContext,这样,您可以添加其他配置,或者根据需要完全替换它。
BeanPostProcessor
ApplicationContext
您可以创建一个BeanPostProcessor将属性添加到已配置的DataSource。commons- dbcp如果您相应地使用其他DataSource修改,则下面的示例假定使用1或2 。
DataSource
commons- dbcp
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; }
这应该可以完成配置数据源的技巧。