我正在做 Heroku 教程https://devcenter.heroku.com/articles/getting-started-with-gradle-on-heroku一切都很好,直到我無法在本地實例中運行數據庫。我在 intelij 中并通過控制臺嘗試了它($heroku local web after build gradlew)。我嘗試將數據庫從 Heroku 復制到本地 postgresDb 但也失敗了。 @Value("${spring.datasource.url}") private String dbUrl; @Autowired private DataSource dataSource; @RequestMapping("/db") String db(Map<String, Object> model) { try (Connection connection = dataSource.getConnection()) { Statement stmt = connection.createStatement(); stmt.executeUpdate("CREATE TABLE IF NOT EXISTS ticks (tick timestamp)"); stmt.executeUpdate("INSERT INTO ticks VALUES (now())"); ResultSet rs = stmt.executeQuery("SELECT tick FROM ticks"); ArrayList<String> output = new ArrayList<String>(); while (rs.next()) { output.add("Read from DB: " + rs.getTimestamp("tick")); } model.put("records", output); return "db"; } catch (Exception e) { model.put("message", e.getMessage()); return "error"; } } @Bean public DataSource dataSource() throws SQLException, URISyntaxException { if (dbUrl == null || dbUrl.isEmpty()) { return new HikariDataSource(); } else { HikariConfig config = new HikariConfig(); config.setJdbcUrl(dbUrl); return new HikariDataSource(config); } }我也嘗試dbUrl從 Heroku 配置接收URI dbUri = new URI(System.getenv("DATABASE_URL")); String username = dbUri.getUserInfo().split(":")[0]; String password = dbUri.getUserInfo().split(":")[1]; String dbUrl = "jdbc:postgresql://" + dbUri.getHost() + ':' + dbUri.getPort() + dbUri.getPath() + "?sslmode=require";在我轉到 /db 頁面后,我收到HikariPool-1 - dataSource or dataSourceClassName or jdbcUrl is required. 我做錯了什么?
1 回答

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
使用教程中的@Bean。您必須從 heroku 復制(或只是創建).env 文件并添加連接字符串,因為它最初并未存儲在那里,但 heroku 像對待它一樣對待它。
在控制臺中通過命令獲取 JDBC_DATABASE_URL(在 Windows 上)
heroku run echo $JDBC_DATABASE_URL
從輸出復制字符串
將此字符串作為變量粘貼到項目中的 .env 文件中
JDBC_DATABASE_URL="your_conecction_string_copied_from_console"
安慰:
heroku local web
利潤 :)
Windows的快捷腳本:
echo|set /p="JDBC_DATABASE_URL=" | heroku run echo $JDBC_DATABASE_URL >> .env
添加回答
舉報
0/150
提交
取消