我之前已经使用spring DI单独为我的两个Web应用程序注入数据源(并使用jdbctemplate进行数据库操作),但后来我认为最好在Tomcat级别使用数据源和连接池。所以,现在我从jndi获取数据源并使用此数据源创建jdbctemplate
public static DataSource getTomcatDataSource() {
DataSource dataSource = null;
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
dataSource = (DataSource) envContext.lookup("jdbc/vendorDB");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
return dataSource;
}
添加更多细节以解释我的场景,我在for循环中将子arraylist更新为db。所以,我认为有连接池可以更快地完成任务
for(int fromIndex = 0, toIndex = (fromIndex + batchSize - 1);
fromIndex < (sheetList.size() - 1) ;
fromIndex = toIndex + 1, toIndex += batchSize){
....
List<GoogleSheetPojo> subSheetList = sheetList.subList(fromIndex, toIndex);
try {
jdbcTemplate = new JdbcTemplate(DatabaseUtility.getTomcatDataSource());
rowsEffected = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement pstmt, int i) throws SQLException {
MyPojo bean = subSheetList.get(i);
....
}
}
}
}
所以,我在这里几乎没有疑问:
1)更新操作会变快吗?
2)我的数据源方法是静态的,所以应用程序会单独连接数据库,还是应该在没有静态的情况下获取数据源才能使用数据库连接池?
2)因为,我使用new运算符创建了jdbctemplate,jdbctemplate和pstmt将被应用程序安全关闭
最后,多线程是否会使更新操作更快?
我希望我的问题陈述是可以理解的