I'm trying to make a connection to a DB/2 on LUW and get a "Connection reset error". I was able to successfully make a connection in DBeaver using the same JDBC driver, URL, username and password. What else should I look at or consider? I don't have any specific code for this. As the stack trace shows, it fails either due to my configuration (more likely), or there's some sort of DB2 issue (not likely because I can connect using DBEaver)
My URL:
jdbc:db2://db2.mycompany.com:30404/mydb?sslConnection=true
Pom Snippet:
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc_license_cisuz</artifactId>
<version>10.5.9</version>
</dependency>
<dependency>
<groupId>com.ibm.db2.jcc</groupId>
<artifactId>db2jcc4</artifactId>
<version>10.5.9</version>
</dependency>
com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][4.19.66] A communication error occurred during operations on the connection's underlying socket, socket input stream,
or socket output stream. Error location: Reply.fill() - socketInputStream.read (-1). Message: Connection reset. ERRORCODE=-4499, SQLSTATE=08001
at com.ibm.db2.jcc.am.kd.a(kd.java:328)
at com.ibm.db2.jcc.t4.a.a(a.java:531)
at com.ibm.db2.jcc.t4.a.a(a.java:515)
at com.ibm.db2.jcc.t4.a.a(a.java:510)
at com.ibm.db2.jcc.t4.a.b(a.java:1606)
at com.ibm.db2.jcc.t4.a.a(a.java:1626)
at com.ibm.db2.jcc.t4.y.b(y.java:261)
at com.ibm.db2.jcc.t4.y.c(y.java:326)
at com.ibm.db2.jcc.t4.y.c(y.java:439)
at com.ibm.db2.jcc.t4.y.v(y.java:1207)
at com.ibm.db2.jcc.t4.z.a(z.java:53)
at com.ibm.db2.jcc.t4.b.c(b.java:1381)
at com.ibm.db2.jcc.t4.b.b(b.java:1253)
at com.ibm.db2.jcc.t4.b.b(b.java:810)
at com.ibm.db2.jcc.t4.b.a(b.java:781)
at com.ibm.db2.jcc.t4.b.a(b.java:424)
at com.ibm.db2.jcc.t4.b.a(b.java:397)
at com.ibm.db2.jcc.t4.b.<init>(b.java:335)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:234)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:200)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:471)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:112)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:56)
at org.flywaydb.core.internal.database.DatabaseFactory.createDatabase(DatabaseFactory.java:72)
at org.flywaydb.core.Flyway.execute(Flyway.java:1670)
at org.flywaydb.core.Flyway.migrate(Flyway.java:1356)
at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:65)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1837)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1774)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:307)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:742)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:389)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
at com.mycompany.cost.rules.CostRulesServiceApplication.main(CostRulesServiceApplication.java:13)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.ibm.db2.jcc.t4.y.b(y.java:215)
... 47 more
CostRulesApplication
import javax.annotation.PostConstruct;
import java.util.TimeZone;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class CostRulesServiceApplication {
public static void main(String[] args) {
SpringApplication.run(CostRulesServiceApplication.class, args);
}
@PostConstruct
public void init(){
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
}
application.properties
cost.rules.schema=COST_RULES
file.generator.schema=FILE_GENERATOR
logging.level.org.flywaydb.core.internal.database=DEBUG
server.port=${SERVER_PORT:8080}
spring.application.name=bluecost-rules-service
spring.batch.job.enabled=false
spring.datasource.driver-class-name=${COST_DATASOURCE_DRIVER}
spring.datasource.password=${COST_DATASOURCE_PASSWORD}
spring.datasource.url=${COST_DATASOURCE_URL}
spring.datasource.username=${COST_DATASOURCE_USERNAME}
spring.flyway.baseline-on-migrate=false
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.flyway.out-of-order=true
spring.flyway.schemas=${cost.rules.schema}
spring.jpa.database-platform=DB2
spring.jpa.properties.hibernate.default_schema=${cost.rules.schema}
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DB2Dialect
spring.profiles.active=sprint-vault-services-available
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=35MB
spring.servlet.multipart.max-request-size=35MB
sprint.vault.services.db.bms=TestBMS
sprint.vault.services.db.db2onc=db2oncLocal
sprint.vault.services.db.file-generator=LocalFileGenerator
sprint.vault.services.error-delay=1000
sprint.vault.services.job123=TestJob123
sprint.vault.services.job4=TestJob4
sprint.vault.services.jwtSecret=
sprint.vault.services.max-error-threshold=3
sprint.vault.services.token=
sprint.vault.services.url=
Wrong URL.
If you want to specify some properties, you must use :
instead of ?
after the database name, and each property setting must be followed by ;
including the last one.
URL format for IBM Data Server Driver for JDBC and SQLJ type 4 connectivity