前提・実現したいこと
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
1【PrimaryDbConfig.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
1【RedshiftDbConfig.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
あなたの回答
tips
プレビュー