我正在使用基于Spring Boot and Batch annotation
的方法。我正在根据需要使用JdbcCursorItemReader
读取表数据并将其写入CSV/XML/other
表等中。
作为春季批处理的最佳实践,只是想了解我在JdbcCursorItemReader
方法内创建SQL查询的方式的视图。是否有任何方法可以避免串联并遵循最佳方法,就像我们在基于XML的方法中所做的那样?
请让我知道以下编写SQL查询的方法是否是最佳方法?
基于注释的方法。
@Bean(destroyMethod="")
public JdbcCursorItemReader<Orders> employeesReader(){
JdbcCursorItemReader<Orders> itemReader = new JdbcCursorItemReader<>();
itemReader.setDataSource(dataSource);
itemReader.setSql("SELECT orderNumber, productName, msrp, priceEach "
+ "FROM products p "
+ "INNER JOIN orderdetails o "
+ "ON p.productcode = o.productcode "
+ "AND p.msrp > o.priceEach "
+ "WHERE p.productcode = ? ");
itemReader.setRowMapper(new OrdersRowMapper());
itemReader.setIgnoreWarnings(true);
return itemReader;
}
可以使用无需连接运算符的基于XML的方法来完成相同的XML
<bean id="ordersItemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step" >
<property name="dataSource" ref="dataSource" />
<property name="sql">
<value>
SELECT orderNumber, productName, msrp, priceEach
FROM products p INNER JOIN orderdetails o ON p.productcode = o.productcode
AND p.msrp > o.priceEach
WHERE p.productcode = '#{stepExecutionContext[productcode]}';
</value>
</property>
<property name="rowMapper">
<bean class="com.XXXX.mapper.OrdersRowMapper" scope="step" />
</property>
</bean>
在我的项目中,我们使用的是基于注释的方法,因此需要相关指导。
答案 0 :(得分:1)
如何使用XML properties file?我也喜欢干净的查询,将它们放在一个地方特别好。
只需使用名为entry
的{{1}}并将查询作为orderQuery
来创建XML。
然后,您可以使用普通的key
加载XML属性,并使用@PropertySource
或@Configuration @Bean
将其注入到@Value("${orderQuery}
中。
希望有帮助!
答案 1 :(得分:0)
我个人认为一致性是要遵循的原则。如果在项目中使用批注,请使用基于批注的方法。否则,对于新手来说,要理解为什么要混合使用xml和注释是很棘手的(可能对此有些神圣的含义)。从可读性的角度来看,我看不出太大差别。
P.S。顺便说一句,我更喜欢在方法上放置@StepScope注释,而不是(destroyMethod =“”)