【问题标题】:Spring boot: Database connection not closing properlySpring boot:数据库连接未正确关闭
【发布时间】: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


    【解决方案1】:

    DriverManagerDataSource 不用于生产,它会在每次需要连接时打开和关闭连接。

    使用像 c3p0DataSource 这样的连接池。

    【讨论】:

      猜你喜欢
      • 2019-09-20
      • 1970-01-01
      • 2022-10-02
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2011-12-29
      相关资源
      最近更新 更多