sql >> データベース >  >> RDS >> PostgreSQL

SpringBootからHerokuPostgresに接続する

    Heroku&Postgresを使用したSpringBoot2.xの最もクリーンな方法

    すべての回答を読みましたが、Jonikが探していたものが見つかりませんでした:

    JPA/Hibernateを使用してSpringBootアプリでHerokuPostgresに接続する最も簡単でクリーンな方法を探しています

    ほとんどの人がSpringBoot&Herokuで使用したい開発プロセスには、テストと高速開発サイクルのためのローカルH2インメモリデータベースと、Herokuでのステージングと本番用のHerokuPostgresデータベースが含まれます。

    • まず、Springプロファイルを使用する必要はありません!
    • 2番目:コードを記述/変更する必要はありません!

    ステップバイステップで何をしなければならないかを見てみましょう。 Postgresの完全に機能するHerokuのデプロイと構成を提供するサンプルプロジェクトがあります。完全を期すために、自分でテストする場合に限ります:github.com/jonashackt/spring-boot-vuejs。

    pom.xml

    次の依存関係が必要です:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    
        <!-- In-Memory database used for local development & testing -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
    
        <!-- Switch back from Spring Boot 2.x standard HikariCP to Tomcat JDBC,
        configured later in Heroku (see https://stackoverflow.com/a/49970142/4964553) -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
        </dependency>
    
        <!-- PostgreSQL used in Staging and Production environment, e.g. on Heroku -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.2</version>
        </dependency>
    

    ここで注意が必要なのは、 tomcat-jdbcの使用法です。 、しかしそれについてはすぐに説明します。

    Herokuで環境変数を構成する

    Heroku環境では、変数の名前は Config Varsです。 。 正しく聞こえました。私たちがしなければならないのは、環境変数を構成することだけです! 正しいものが必要です。したがって、https://data.heroku.com/にアクセスしてください(デフォルトの動作である、Herokuアプリ用に構成されたPostgresデータベースがすでに存在すると思います)。

    次に、アプリケーションの対応する Datastoreをクリックします。 設定に切り替えます タブ。次に、 View Credentials ...をクリックします 、次のようになります:

    次に、新しいブラウザタブを開き、Herokuアプリケーションの設定に移動します。 タブも。 Reveal Config Varsをクリックします 次の環境変数を作成します:

    • SPRING_DATASOURCE_URL = jdbc :postgres ql :// YourPostgresHerokuHostNameHere :5432 / YourPostgresHerokuDatabaseNameHere (先頭の jdbc:に注意してください およびql postgresに加えて !)
    • SPRING_DATASOURCE_USERNAME =YourPostgresHerokuUserNameHere
    • SPRING_DATASOURCE_PASSWORD =YourPostgresHerokuPasswordHere
    • SPRING_DATASOURCE_DRIVER-CLASS-NAME = org.postgresql.Driver (Spring BootはほとんどのデータベースのURLから推測できるため、これは必ずしも必要ではありません。ここで完全を期すためです)
    • SPRING_JPA_DATABASE-PLATFORM = org.hibernate.dialect.PostgreSQLDialect
    • SPRING_DATASOURCE_TYPE = org.apache.tomcat.jdbc.pool.DataSource
    • SPRING_JPA_HIBERNATE_DDL-AUTO =更新 (これにより、JPAエンティティに従ってテーブルが自動的に作成されます。これは非常に優れています。 CREATEでハードルを設定する必要がないためです。 SQLステートメントまたはDDLファイル)

    Herokuでは、これは次のようになります。

    これで、あなたがしなければならないのはそれだけです! 構成変数を変更するたびにHerokuアプリが再起動されるため、アプリはローカルでH2を実行し、HerokuにデプロイするとPostgreSQLに接続できるようになります。

    質問している場合:Hikariの代わりにTomcatJDBCを構成する理由

    お気づきかもしれませんが、 tomcat-jdbcを追加しました pom.xmlへの依存関係と構成済みのSPRING_DATASOURCE_TYPE=org.apache.tomcat.jdbc.pool.DataSource 環境変数として。このことわざについてのドキュメントにはほんのわずかなヒントがあります

    そのアルゴリズムを完全にバイパスし、spring.datasource.typeプロパティを設定することで、使用する接続プールを指定できます。これは、Tomcatコンテナでアプリケーションを実行する場合に特に重要です...

    Spring Boot 2.x標準のHikariCPを使用する代わりに、Tomcatプーリングデータソースに切り替えた理由はいくつかあります。ここですでに説明したように、 spring.datasource.urlを指定しない場合 、Springは、PostgreSQLデータベースの代わりに組み込みのim-memoryH2データベースを自動配線しようとします。また、Hikariの問題は、 spring.datasource.jdbc-urlのみをサポートしていることです。 。

    次に、Hikariで示されているようにHeroku構成を使用しようとすると( SPRING_DATASOURCE_TYPE を省略します) SPRING_DATASOURCE_URLを変更します SPRING_DATASOURCE_JDBC-URLへ )次の例外が発生しました:

    Caused by: java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    

    そのため、Spring Boot 2.xをHikariCPを使用してHerokuとPostgresで動作させることはできませんでしたが、Tomcat JDBCを使用しました。また、事前に説明したローカルH2データベースを含む開発プロセスにブレーキをかけたくありません。注意: JPA /Hibernateを使用してSpringBootアプリでHerokuPostgresに接続する最も簡単でクリーンな方法を探していました!



    1. PL / SQLでファイルを解凍するにはどうすればよいですか?

    2. プリペアドステートメントから自動インクリメントIDを取得する方法はありますか

    3. LIKE'string' vs ='string'を使用した場合のOracleのパフォーマンスへの影響はありますか?

    4. データモデリングにおけるセキュリティアプローチ。パート4