【发布时间】:2018-09-02 21:12:36
【问题描述】:
我正在使用我的 Spring Boot 应用程序定期(通过调度程序)执行查询
application.properties
src_mssqlserver_url=jdbc:sqlserver://192.168.0.1;databaseName=Test;
src_mssqlserver_username=tester
src_mssqlserver_password=tester1
src_mssqlserver_driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
数据源和 JdbcTemplate Bean
@Primary
@Bean(name = "src_mssqlserver")
@ConfigurationProperties(prefix = "spring.ds_mssqlserver")
public DataSource srcDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("src_mssqlserver_driverClassName"));
dataSource.setUrl(env.getProperty("src_mssqlserver_url"));
dataSource.setUsername(env.getProperty("src_mssqlserver_username"));
dataSource.setPassword(env.getProperty("src_mssqlserver_password"));
return dataSource;
}
@Bean(name = "srcJdbcTemplate")
public JdbcTemplate srcJdbcTemplate(@Qualifier("src_mssqlserver") DataSource dsSrcSqlServer) {
return new JdbcTemplate(dsSrcSqlServer);
}
用法:从调度程序调用此方法,其中包含要处理的项目列表(通常为 1000 条记录),此过程在一个小时内运行一次。
@Autowired
@Qualifier("srcJdbcTemplate")
private JdbcTemplate srcJdbcTemplate;
public void batchInsertUsers(final List<User> users) {
String queryInsert = "INSERT INTO [User] ([Name]"
+ " , [Created_Date]"
+ " , [Notes])"
+ " VALUES (?, SYSDATETIMEOFFSET(), ?)";
srcJdbcTemplate.batchUpdate(queryInsert, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
User user = users.get(i);
ps.setString(1, user.getName());
ps.setString(2, user.getNotes());
}
@Override
public int getBatchSize() {
return sites.size();
}
});
我收到来自数据库管理员的警告,说我的代码打开了太多连接。请分享一些标准且可行的方法来处理这种情况。
谢谢。
【问题讨论】:
标签: sql-server spring spring-boot spring-jdbc