Unable to instantiate H2 - spring-boot

I am trying to setup H2 as in-memory database. I have configured it as :
spring:
profiles: qa
datasource:
#url: jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS "public"
jdbc-url: jdbc:mysql://localhost:3306/lisdashboard
username: '#lisdashboard.db.username#'
password: '#lisdashboard.db.password#'
h2:
console:
path: /admin/h2-console
However I am getting this error when I try to run it
- Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Driver org.h2.Driver claims to not accept jdbcUrl, jdbc:mysql://localhost:3306/lisdashboard
-
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
- Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]:
Invocation of init method failed; nested exception is java.lang.RuntimeException: Driver org.h2.Driver claims to not accept jdbcUrl, jdbc:mysql://localhost:3306/lisdashboard
I am not sure why it doesn't accept the jdbc url, Is there any issue in the format of my confg?

You are using a MySQL jdbc url to try to connect to an H2 instance.
You need to replace your configuration to use the url jdbc:h2:mem: instead of the one you are using now jdbc:mysql://localhost:3306/lisdashboard.
If you want to use a different type of H2 instance, check the documentation to see the alternatives (such a file instance).

If you want to use H2 your config should look like:
spring:
profiles: qa
datasource:
url: jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS "public"
username: '#lisdashboard.db.username#'
password: '#lisdashboard.db.password#'
h2:
console:
path: /admin/h2-console
You had a # infront of the URL and # is a comment in YAML

Related

Driver claims to not accept jdbcUrl, ${JDBC_DATABASE_URL} when setting externalized config

I'm using the instructions in this Heroku article to attempt to externalize database strings for a hosted Postgres DB. When I use the literal string, I can connect with no issues. However, when I attempt to use the externalized variable ${JDBC_DATABASE_URL}, I'm getting the error message:
2022-06-17 17:30:17.063 WARN 7712 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Driver org.postgresql.Driver claims to not accept jdbcUrl, ${JDBC_DATABASE_URL}
It looks like it's interpreting the externalized variable itself as a literal string, but I have no idea why. I haven't included any other config files because it is currently working with the database string, but I can attach them if need be. Any ideas?

org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]

Here is the error message.
2020-06-15 13:10:23.623 ERROR 37317 --- [nio-8887-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]
### The error may exist in tech/bootcamp/community/mapper/UserMapper.java (best guess)
### The error may involve tech.bootcamp.community.mapper.UserMapper.insert
### The error occurred while executing an update
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]] with root cause
org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]
at tech.bootcamp.community.controller.AuthorizeController.callback(AuthorizeController.java:52) ~[classes/:na]
#Autowired
private UserMapper userMapper;
it says this line causes the error.
userMapper.insert(user);
So what's the user name and password actually are?
You can set on application.properties:
spring.datasource.username=dbuser
spring.datasource.password=dbpass
If not set explicitly, default values are used, "sa" and "".
The following worked for me as well.
spring.datasource.username=sa
spring.datasource.password=
After running spring go to http://localhost:8080/h2-console/
Use same config JDBC URL: jdbc:h2:mem:testdb from your application properties
connect with empty user namer and password if you not set like answer above from DEWA Kazuyuki - 出羽和之.
User Name:
Password:
if we do not want to use default username(sa) and password("") than we need to define username and password in application.properties file example :-
spring.datasource.username=mydb
spring.datasource.password=mypass
you can use any username and any password if you want to use username other than sa , if you are using sa as a username then you need to define passwordf as a blank

Springboot Application startup failed due to OutOfMemoryError: Java heap space (Unable to create entityManagerFactory Bean)

We are using spring boot version 2.1.3 with sprintboot jpa started.
Application is failing at startup with logs:
Injecting ScanOptions
[org.hibernate.boot.archive.scan.internal.StandardScanOptions#78d49939]
into BootstrapContext; was
[org.hibernate.boot.archive.scan.internal.StandardScanOptions#21f27bb5]
Exception encountered during context initialization - cancelling
refresh attempt:
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'entityManagerFactory' defined in class path
resource
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]:
Invocation of init method failed; nested exception is
java.lang.OutOfMemoryError: Java heap space
Heap memory: 512 MB.
Hibernate properties :
spring.jpa:
database: ORACLE
show-sql: true
generate-ddl: false
hibernate:
ddl-auto: none
properties:
hibernate:
dialect: org.hibernate.dialect.Oracle10gDialect
id:
new_generator_mappings: true
show_sql: false
connection:
autocommit: true
release_mode: after_transaction
Using ojdbc7.
We are getting this issue intermittently.
This error is purely related to heap memory. After increasing heap memory at startup, It worked well.

Vulas startup failed with an exception in the backend

I am trying to run the Vulas docker setup on one of our VMs. I followed this guide. When I perform the Run stage of the documentation, the backend service fails to start. I have the following exception which explains me nothing.
#docker logs d04ea50241f7
2018-12-18 10:28:50.841 ERROR 9 --- [ost-startStop-1] o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.
org.postgresql.util.PSQLException: FATAL: role "root" does not exist
at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:712) ~[postgresql-9.4.1208.jre7.jar!/:9.4.1208.jre7]
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213) ~[postgresql-9.4.1208.jre7.jar!/:9.4.1208.jre7]
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) ~[postgresql-9.4.1208.jre7.jar!/:9.4.1208.jre7]
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:215) ~[postgresql-9.4.1208.jre7.jar!/:9.4.1208.jre7]
at org.postgresql.Driver.makeConnection(Driver.java:406) ~[postgresql-9.4.1208.jre7.jar!/:9.4.1208.jre7]
at org.postgresql.Driver.connect(Driver.java:274) ~[postgresql-9.4.1208.jre7.jar!/:9.4.1208.jre7]
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319) ~[tomcat-jdbc-8.5.32.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181]
2018-12-18 10:28:50.846 ERROR 9 --- [ost-startStop-1] o.s.b.c.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'dispatcherServletRegistration' defined in class path resource [org/springframework/boot/autoconfigure/web/DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration.class]: Unsatisfied dependency expressed through method 'dispatcherServletRegistration' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hubIntegrationController' defined in URL [jar:file:/vulas/rest-backend.jar!/BOOT-INF/classes!/com/sap/psr/vulas/backend/rest/HubIntegrationController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationRepositoryImpl': Unsatisfied dependency expressed through field 'appRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'applicationRepository': Cannot create inner bean '(inner bean)#5368a637' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#5368a637': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.exception.FlywaySqlException:
Unable to obtain database connection
------------------------------------
SQL State : 28000
Error Code : 0
Message : FATAL: role "root" does not exist
The docker containers that are up are
~/vulas/vulnerability-assessment-tool# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05a90996f80d docker_haproxy "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 0.0.0.0:8034->7070/tcp, 0.0.0.0:8033->8080/tcp vulas-os-haproxy
2877eeb8db76 docker_patch-lib-analyzer "/vulas/run.sh" 7 minutes ago Up 7 minutes 8080/tcp vulas-os-patch-lib-analyzer
7d05307d9149 docker_frontend-bugs "catalina.sh run" 7 minutes ago Up 7 minutes 8080/tcp vulas-os-frontend-bugs
84311f182d98 docker_rest-lib-utils "/bin/sh -c 'java -D…" 7 minutes ago Up 7 minutes 8092/tcp vulas-os-rest-lib-utils
a55cc03b8ee8 docker_frontend-apps "catalina.sh run" 7 minutes ago Up 7 minutes 8080/tcp vulas-os-frontend-apps
45a7210170e7 docker_postgresql "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 0.0.0.0:8032->5432/tcp vulas-os-postgresql
since the above comment resolves the issue I will post an answer to give more visibility to this question.
The issue you faced was caused by a missing or changed user in the .env file used by Vulas. At this line we can see that Postgres, before creating the database, checks if both POSTGRES_USER and POSTGRES_PASSWORD are set. I can see that in your output the Postgres container started, so at some point in time in the .env file there were those environment variables set. Probably you changed or deleted the POSTGRES_USER. By doing so Vulas tried to connect to Postgres with a different user with respect to the one that created the database, thus failing to initialize the connection.
It is mandatory to modify the .env file before running Vulas for the first time. If you need to change the connection's parameters to the database you need to create a new one. In order to drop the current DB and create a new one give the command docker-compose down -v while in the docker folder of Vulas' repository. This will erase each volume.

Different image behavior in Google Container Registry vs locally (packaged Spring Boot app)

We have a Spring Boot application (multiple micro-services), packaged with Google Container Builder and published to the registry. Our cloudbuild.yaml looks like this:
steps:
- name: 'gcr.io/cloud-builders/java/gradle'
id: 'java-build'
args: ['build']
- name: 'gcr.io/cloud-builders/docker'
args: ['build',
'-t', 'gcr.io/$PROJECT_ID/api-auth:$COMMIT_SHA',
'-t', 'gcr.io/$PROJECT_ID/api-auth:latest',
'-f', './api-auth/Dockerfile', './api-auth']
waitFor: ['java-build']
- name: 'gcr.io/cloud-builders/docker'
args: ['build',
'-t', 'gcr.io/$PROJECT_ID/api-user:$COMMIT_SHA',
'-t', 'gcr.io/$PROJECT_ID/api-user:latest',
'-f', './api-user/Dockerfile', './api-user']
waitFor: ['java-build']
images:
- 'gcr.io/$PROJECT_ID/api-auth:$COMMIT_SHA'
- 'gcr.io/$PROJECT_ID/api-auth:latest'
- 'gcr.io/$PROJECT_ID/api-user:$COMMIT_SHA'
- 'gcr.io/$PROJECT_ID/api-user:latest'
which is called by a trigger on push into the repository on GitHub.
If I run this locally:
container-builder-local --dryrun=false .
resulting images run fine, e.g.:
docker run -e "SPRING_PROFILES_ACTIVE=development" -p 9000:9000 gcr.io/.../api-auth:latest
but when the image is built in the cloud with the Container Builder, the application doesn't work and fails with error that never ocurred before.
Even when pulled:
gcloud docker -- pull gcr.io/.../api-auth:latest
and run locally the new error stops the application from loading:
2017-10-11 16:35:27.661 WARN 5 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in class path resource [org/springframework/boot/autoconfigure/security/AuthenticationManagerConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.authentication.AuthenticationManager]: Factory method 'authenticationManager' threw exception; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'OAuth2Config': Unsatisfied dependency expressed through field 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'authenticationManager': Requested bean is currently in creation: Is there an unresolvable circular reference?
2017-10-11 16:35:27.663 INFO 5 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2017-10-11 16:35:27.676 INFO 5 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2017-10-11 16:35:27.718 INFO 5 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-10-11 16:35:27.730 ERROR 5 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
The dependencies of some of the beans in the application context form a cycle:
webSecurityConfig (field private org.springframework.security.authentication.AuthenticationManager com.project.auth.config.WebSecurityConfig.authenticationManager)
┌─────┐
| authenticationManager defined in class path resource [org/springframework/boot/autoconfigure/security/AuthenticationManagerConfiguration.class]
↑ ↓
| OAuth2Config (field private org.springframework.security.authentication.AuthenticationManager com.project.auth.config.OAuth2Config.authenticationManager)
└─────┘
This only happens when the image goes through the Cloud Container Builder - neither the local one, nor with a local gradle build.
Could this possibly be a problem in the cloud, or am I missing something trivial?
I have also filed an issue on GitHub, but since it's a broader problem along with the Spring Boot nature of the application, I thought I'd ask here to see if it rings any bell.

Resources