我正在做Heroku教程https://devcenter.heroku.com/articles/getting-started-with-gradle-on-heroku,一切都很好,直到我无法在本地实例中运行数据库。
我用intelij和控制台(构建梯度后的$heroku本地web )尝试了它。我尝试将db从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);
}
}我还试图从Heroku config接收dbUrl。
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.,我做错了什么?
发布于 2019-06-02 15:54:19
使用教程中的@Bean。您必须从heroku复制(或只创建) .env文件,并添加连接字符串,因为它最初并不存储在那里,但是heroku将它当作是。
heroku run echo $JDBC_DATABASE_URLJDBC_DATABASE_URL="your_conecction_string_copied_from_console"heroku local web窗口的快捷脚本:
echo|set /p="JDBC_DATABASE_URL=" | heroku run echo $JDBC_DATABASE_URL >> .env
https://stackoverflow.com/questions/56409273
复制相似问题