这就是我想出的,随时建议改进
public String getState() throws SQLException { String state = null; Connection conn = DataSourceUtils.getConnection(template.getDataSource()); try { conn.setAutoCommit(false); String[] colNames = { "id", "state_url", "in_use" }; String query = "select " + Stream.of(colNames).collect(Collectors.joining(", ")) + " from state_scrape_queue where in_use = false ORDER BY scrape_timestamp NULLS FIRST LIMIT 1 FOR UPDATE"; System.out.println(query); try (Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(query)) { while (rs.next()) { // Get the current values, if you need them. state = rs.getString(colNames[1]); rs.updateBoolean(colNames[2], true); rs.updateRow(); conn.commit(); } } } catch (SQLException e) { conn.setAutoCommit(true); e.printStackTrace(); } finally { conn.setAutoCommit(true); } return state;}


