I tried googling around, but the solution to almost all this kind of questions was to add ;DB_CLOSE_DELAY=-1
, however it does not solve anything for me.
Here is my test class
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Main.class})
public class Testas {
@Autowired
@Qualifier("managerImplementation")
private ClassifierManager manager;
@Test
public void testManager(){
ClassifierGroupEntity cge = new ClassifierGroupEntity();
manager.saveClassifierGroup(cge);
}
}
Manager class
@Service("managerImplementation")
public class ClassifierManagerImpl implements ClassifierManager{
@Autowired
private ClassifierGroupEntityRepository groupEntityRepository;
@Autowired
private ClassifierEntityRepository entityRepository;
@Autowired
private ClassifierValueEntityRepository valueEntityRepository;
@Override
public ClassifierGroupEntity getClassifierGroup(long id) {
return groupEntityRepository.findOne(id);
}
@Override
public ClassifierGroupEntity getClassifierGroup(String code) {
return groupEntityRepository.findByCode(code);
}
@Override
public ClassifierGroupEntity saveClassifierGroup(ClassifierGroupEntity entity) {
return groupEntityRepository.save(entity);
}
@Override
public void deleteClassifierGroup(long id) {
groupEntityRepository.delete(id);
}
@Override
public ClassifierEntity getClassifier(long id) {
return entityRepository.findOne(id);
}
@Override
public ClassifierEntity getClassifier(String code) {
return entityRepository.findByCode(code);
}
@Override
public ClassifierEntity saveClassifier(ClassifierEntity entity) {
return entityRepository.save(entity);
}
@Override
public void deleteClassifier(long id) {
entityRepository.delete(id);
}
@Override
public ClassifierValueEntity getClassifierValue(long id) {
return valueEntityRepository.findOne(id);
}
@Override
public ClassifierValue getClassifierValue(String classifiedCode, String valueCode) {
return null;
}
@Override
public ClassifierValueEntity saveClassifierValue(ClassifierValueEntity entity) {
return valueEntityRepository.save(entity);
}
@Override
public void deleteClassifierValue(long id) {
valueEntityRepository.delete(id);
}
}
And finally properties file
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.user=sa
spring.datasource.password=
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
Launching the test throws me
org.h2.jdbc.JdbcSQLException: Table "CLASSIFIER_GROUP_ENTITY" not found; SQL statement:
insert into classifier_group_entity (id, code, modified_details, modified_time, modified_user_id, order, revision, valid_details, valid_from, valid_till, parent_id) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [42102-191]
I don't know if I should provide anything else, please tell me if I do. I appreciate your help in advance.
To access an in-memory database from another process or from another computer, you need to start a TCP server in the same process as the in-memory database was created. The other processes then need to access the database over TCP/IP or TLS, using a database URL such as: jdbc:h2:tcp://localhost/mem:db1 .
H2 is an open-source lightweight Java database. It can be embedded in Java applications or run in the client-server mode. H2 database can be configured to run as in-memory database, which means that data will not persist on the disk.
Connect to the embedded H2 database using the H2 console The easiest way to access the console is to double click the H2 database jar file at <installation-directory>\confluence\WEB-INF\lib\h2-x.x.x.jar .
I always use the below configuration for H2 Database, Flyway, Spring Boot JPA before writing integration tests - https://gist.github.com/vslala/d412156e5840fafa1b9f61aae5b20951
Put below configuration in your src/test/resources/application.properties
file.
# Datasource configuration for jdbc h2
# this is for file based persistent storage
# spring.datasource.url=jdbc:h2:file:/data/demo
# For in-memory storage
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=vslala
spring.datasource.password=simplepass
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# This has to be over-ridden because
# it's not kept create rather kept none or validate after the first ddl creation.
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
# This is for FlyWay configuration
spring.flyway.url=jdbc:h2:mem:testdb
spring.flyway.schemas=testdb
spring.flyway.user=vslala
spring.flyway.password=simplepass
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With