質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

1577閲覧

Spring Bootから複数のDB(MysqlとRedshift)に接続したい

-kuma-

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Amazon Redshift

Amazon Redshiftは、Amazon社が提供する 高速かつ完全マネージド型でペタバイト規模の クラウドデータウェアハウスサービスです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/12/07 12:08

前提・実現したいこと

Spring Bootから複数のDB(MysqlとRedshift)に接続したいのですが、
以下のようなエラーが出てしまいます。
原因と対応策をご教示いただけると幸いです。
MysqlとRedshift、個別に接続することは成功したので、DB情報に誤りはないと思われます。

発生している問題・エラーメッセージ

### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: [Amazon](500310) Invalid operation: no PostgreSQL user name specified in startup packet; ### The error may exist in file [C:\pleades\workspace\xxx\bin\main\jp\xxx\mapper\redshift\TestMapper.xml] ### The error may involve jp.xxx.mapper.redshift.TestMapper.selectAll ### The error occurred while executing a query ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: [Amazon](500310) Invalid operation: no PostgreSQL user name specified in startup packet;] with root cause com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: no PostgreSQL user name specified in startup packet; at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source) ~[RedshiftJDBC42-no-awssdk-1.2.45.1069.jar:RedshiftJDBC_1.2.45.1069] at com.amazon.redshift.client.InboundDataHandler.read(Unknown Source) ~[RedshiftJDBC42-no-awssdk-1.2.45.1069.jar:RedshiftJDBC_1.2.45.1069] at com.amazon.support.channels.AbstractSocketChannel.readCallback(Unknown Source) ~[RedshiftJDBC42-no-awssdk-1.2.45.1069.jar:RedshiftJDBC_1.2.45.1069] at com.amazon.support.channels.TLSSocketChannel.read(Unknown Source) ~[RedshiftJDBC42-no-awssdk-1.2.45.1069.jar:RedshiftJDBC_1.2.45.1069]

該当のソースコード

properties

1【application.properties】 2#Mysql 3spring.datasource.url=xxx?serverTimezone=JST 4spring.datasource.username=xxx 5spring.datasource.password=xxx 6spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver 7spring.jpa.hibernate.ddl-auto = update 8 9mybatis.mapperLocations=classpath:jp/xxx/mapper/*.xml 10 11#RedShiftDB 12redshift.datasource.url=xxx?serverTimezone=JST 13redshift.datasource.username=xxx 14redshift.datasource.password=xxx 15redshift.datasource.driverClassName=com.amazon.redshift.jdbc42.Driver

java

1PrimaryDbConfig.java】 2//import javax.sql.DataSource;//これを使用すると(1)にてDataSourceのインスタンスが生成できないというコンパイルエラーが発生 3 4import org.apache.ibatis.session.SqlSessionFactory; 5import org.mybatis.spring.SqlSessionFactoryBean; 6import org.mybatis.spring.SqlSessionTemplate; 7import org.mybatis.spring.annotation.MapperScan; 8import org.springframework.beans.factory.annotation.Qualifier; 9import org.springframework.boot.context.properties.ConfigurationProperties; 10import org.springframework.context.annotation.Bean; 11import org.springframework.context.annotation.Configuration; 12import org.springframework.context.annotation.Primary; 13import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 14 15import com.amazon.redshift.jdbc42.DataSource; //redshiftのDataSourceでよいのか? 16 17 18@Configuration 19@MapperScan(basePackages = PrimaryDbConfig.BASE_PACKAGES 20 , sqlSessionTemplateRef = "primarySqlSessionTemplate") 21public class PrimaryDbConfig { 22 public static final String BASE_PACKAGES = "jp.xxx.mapper.primary"; 23 public static final String MAPPER_XML_PATH = "classpath:jp/xxx/mapper/primary/*.xml"; 24 25 @Primary 26 @Bean(name = "primaryDataSource") 27 @ConfigurationProperties(prefix = "spring.datasource") 28 public DataSource dataSource() { 29 return new DataSource(); //(1) 30 } 31 32 @Primary 33 @Bean(name = "primarySqlSessionFactory") 34 public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource) 35 throws Exception { 36 SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 37 bean.setDataSource(primaryDataSource); 38 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_PATH)); 39 return bean.getObject(); 40 } 41 42 @Bean(name = "primarySqlSessionTemplate") 43 public SqlSessionTemplate sqlSessionTemplate( 44 @Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { 45 return new SqlSessionTemplate(sqlSessionFactory); 46 } 47}

java

1RedshiftDbConfig.java】 2import org.apache.ibatis.session.SqlSessionFactory; 3import org.mybatis.spring.SqlSessionFactoryBean; 4import org.mybatis.spring.SqlSessionTemplate; 5import org.mybatis.spring.annotation.MapperScan; 6import org.springframework.beans.factory.annotation.Qualifier; 7import org.springframework.boot.context.properties.ConfigurationProperties; 8import org.springframework.context.annotation.Bean; 9import org.springframework.context.annotation.Configuration; 10import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 11 12import com.amazon.redshift.jdbc42.DataSource; 13 14@Configuration 15@MapperScan(basePackages = RedshiftDbConfig.BASE_PACKAGES 16 , sqlSessionTemplateRef = "redshiftSqlSessionTemplate") 17public class RedshiftDbConfig { 18 public static final String BASE_PACKAGES = "jp.xxx.mapper.redshift"; 19 public static final String MAPPER_XML_PATH = "classpath:jp/xxx/mapper/redshift/*.xml"; 20 21 @Bean(name = "redshiftDataSource") 22 @ConfigurationProperties(prefix = "redshift.datasource") 23 public DataSource dataSource() { 24 return new DataSource(); 25 } 26 27 @Bean(name = "redshiftSqlSessionFactory") 28 public SqlSessionFactory sqlSessionFactory(@Qualifier("redshiftDataSource") DataSource redshiftDataSource) 29 throws Exception { 30 SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 31 bean.setDataSource(redshiftDataSource); 32 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_PATH)); 33 return bean.getObject(); 34 } 35 36 @Bean(name = "redshiftSqlSessionTemplate") 37 public SqlSessionTemplate sqlSessionTemplate( 38 @Qualifier("redshiftSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { 39 return new SqlSessionTemplate(sqlSessionFactory); 40 } 41}

試したこと

エラーに出ているPostgreSQLは使用していないため、
DataSourceのimportに誤りがあるのかと思い、
「tomcat-dbcp-7.0.30.jar」をライブラリのクラスパスに「外部JARの追加」から追加しました。
import org.apache.tomcat.jdbc.pool.DataSource;
⇒Importできない

補足情報(FW/ツールのバージョンなど)

O/RマッピングはMyBatisを使用しています。
参考サイト:https://qiita.com/KevinFQ/items/a8de808e7719315c376c

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問