Я пытаюсь выполнить пакетную вставку, но при запуске в Tomcat приложение зависает, и новые строки не вставляются. Ниже мой код:
public class MatchDAOImpl implements MatchDAO {
private JdbcTemplate jdbcTemplate;
public MatchDAOImpl(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void batchInsert(final List<Match> matches){
String sql = "INSERT INTO matches (id, status, home_team_id, away_team_id, home_goals, away_goals) VALUES (?, ?, ?, ?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Match match = matches.get(i);
System.out.println("Inserting values for #" + match.getId());
ps.setInt(1, match.getId());
ps.setString(2, match.getStatus());
ps.setInt(3, match.getHomeTeam().getId());
ps.setInt(4, match.getAwayTeam().getId());
ps.setInt(5, match.getHomeGoals());
ps.setInt(6, match.getAwayGoals());
}
@Override
public int getBatchSize() {
return matches.size();
}
});
}
Вот пример того, как это называется:
matchesDAO.batchInsert(matches);
Кроме того, вы увидите, что у меня есть команда println, поэтому я знаю, что по крайней мере этот метод используется. Ниже приведен пример вывода из этого:
Inserting values for #233398
Inserting values for #233399
Inserting values for #233400
Inserting values for #233401
Inserting values for #233402
...
Однако, когда я проверяю базу данных на наличие новых строк, их нет (пустая таблица). Я не получаю никаких исключений, чтобы указать, в чем проблема. Мой метод выглядит хорошо?
UPDATE
MvcConfig.java
@Configuration
@ComponentScan(basePackages="com.example.budget")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{
//...
@Bean
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setDriverClassName( OracleDriver.class.getName() );
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("budget_admin");
dataSource.setPassword("budg3t");
return dataSource;
}
@Bean
public MatchDAO getMatchDAO() {
return new MatchDAOImpl(getDataSource());
}
Вот где сейчас вызывается batchInsert:
@Controller
public class MatchesController {
@Autowired
private FootballData footballData;
@Autowired
private MatchDAO matchDAOImpl;
@RequestMapping(value = "/api/matches")
public ModelAndView matches(ModelAndView model) {
List<Match> matches = footballData.requestMatches();
// write to db
matchDAOImpl.batchInsert(matches);
model.addObject("matches", matches);
model.setViewName("matches");
return model;
}