首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring在本地没有看到数据源,但是部署在Horaku上很好。

Spring在本地没有看到数据源,但是部署在Horaku上很好。
EN

Stack Overflow用户
提问于 2019-06-01 18:14:03
回答 1查看 175关注 0票数 1

我正在做Heroku教程https://devcenter.heroku.com/articles/getting-started-with-gradle-on-heroku,一切都很好,直到我无法在本地实例中运行数据库。

我用intelij和控制台(构建梯度后的$heroku本地web )尝试了它。我尝试将db从Heroku复制到本地postgresDb,但也失败了。

代码语言:javascript
运行
复制
    @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

代码语言:javascript
运行
复制
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.,我做错了什么?

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-02 15:54:19

使用教程中的@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
  • 利润:)

窗口的快捷脚本:

echo|set /p="JDBC_DATABASE_URL=" | heroku run echo $JDBC_DATABASE_URL >> .env

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56409273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档