Spring 在本地看不到数据源,但部署在 Horaku 上工作正常

我正在做 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. 我做错了什么?


跃然一笑
浏览 115回答 1
1回答

哔哔one

使用教程中的@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 &nbsp;>> .env
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java