我之前一直在为我的两个 Web 应用程序单独使用 spring DI 注入数据源(并使用 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 循环中的 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 将被应用程序安全关闭
最后,多线程会使更新操作更快吗?
我希望我的问题陈述是可以理解的