San Jaisy
San Jaisy

Reputation: 17048

Bean definition [javax.sql.DataSource] could not be loaded: Error instantiating bean of type [javax.sql.DataSource] Test resources with Micronaut

I am using Eclipse Store with Postgres as a storage.

I have the below dependencies

plugins {
    id("com.github.johnrengelman.shadow") version "8.1.1"
    id("io.micronaut.application") version "4.4.4"
    id("io.micronaut.aot") version "4.4.4"
    id("io.micronaut.test-resources") version "4.4.4"
}


dependencies {
    annotationProcessor("io.micronaut:micronaut-http-validation")
    annotationProcessor("io.micronaut.eclipsestore:micronaut-eclipsestore-annotations")
    annotationProcessor("io.micronaut.serde:micronaut-serde-processor")

    implementation("io.micronaut.eclipsestore:micronaut-eclipsestore")
    implementation("io.micronaut.eclipsestore:micronaut-eclipsestore-annotations")
    implementation("io.micronaut.serde:micronaut-serde-jackson")

    compileOnly("io.micronaut:micronaut-http-client")

    runtimeOnly("ch.qos.logback:logback-classic")
    runtimeOnly("io.micronaut.sql:micronaut-jdbc-hikari")
    runtimeOnly("org.postgresql:postgresql")
    runtimeOnly("org.eclipse.store:afs-sql")

    testImplementation("io.micronaut:micronaut-http-client")
    testRuntimeOnly("org.postgresql:postgresql")
}

Trying to use TestPropertyProvider

abstract class BaseFixture extends TestContainerConfig {
    @Inject
    @Client("/")
    HttpClient httpClient;

    @TempDir
    static File tempDir;

    protected final TestDataGenerator testDataGenerator = new TestDataGenerator();
}

public class TestContainerConfig implements TestPropertyProvider {
    @Override
    public @NonNull Map<String, String> getProperties() {
        return Map.of(
                "datasources.default.dialect", "POSTGRES",
                "datasources.default.db-type", "postgres",
                "datasources.default.driver-class-name", "org.postgresql.Driver",
                "eclipsestore.postgres.storage.default.table-name", "Tag",
                "eclipsestore.postgres.storage.default.root-class", "schoolstaff.Root"
        );
    }
}

@MicronautTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class TagRepositoryGetTest extends BaseFixture{

    @Inject
    private IEclipseStoreRepository<TagResponse,TagRequest, FilterSortRequest> iEclipseStoreRepository;


    @Test
    @DisplayName("Should return tag for the specified id")
    void shouldReturnTagForTheSpecifiedId() {

        // Give
        TagRequest requestModel = testDataGenerator.generateRecord(TagRequest.class);
        var result = this.iEclipseStoreRepository.create(requestModel);
        assertNotNull(result.value.id());

        // When
        var getResult = this.iEclipseStoreRepository.get(result.value.id());
        //Then
        assertNotNull(getResult.value.id());
        assertTrue(getResult.value.id().equals(result.value.id()));
    }
}

In the application.properties file, I have commented the datasources

eclipsestore.rest.enabled=true
eclipsestore.postgres.storage.default.table-name=Tag
eclipsestore.postgres.storage.default.root-class=schoolstaff.Root

#datasources.default.url=jdbc:postgresql://localhost:5432/school_staff_job
#datasources.default.username=school_staff
#datasources.default.password=password
#datasources.default.driverClassName=org.postgresql.Driver

When using Test resources I think datasources connection are auto created

Error

Bean definition [javax.sql.DataSource] could not be loaded: Error instantiating bean of type  [javax.sql.DataSource]

Message: Error configuring data source 'default'. No URL specified
Path Taken: DatasourceFactory.dataSource(DatasourceConfiguration datasourceConfiguration) --> DatasourceFactory.dataSource([DatasourceConfiguration datasourceConfiguration])
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [javax.sql.DataSource] could not be loaded: Error instantiating bean of type  [javax.sql.DataSource]

Message: Error configuring data source 'default'. No URL specified
Path Taken: DatasourceFactory.dataSource(DatasourceConfiguration datasourceConfiguration) --> DatasourceFactory.dataSource([DatasourceConfiguration datasourceConfiguration])
    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:2000)
    at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:314)
    at io.micronaut.context.DefaultBeanContext.configureAndStartContext(DefaultBeanContext.java:3318)
    at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:345)
    at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:216)
    at io.micronaut.test.extensions.AbstractMicronautExtension.startApplicationContext(AbstractMicronautExtension.java:507)
    at io.micronaut.test.extensions.AbstractMicronautExtension.beforeClass(AbstractMicronautExtension.java:346)
    at io.micronaut.test.extensions.junit5.MicronautJunit5Extension.beforeAll(MicronautJunit5Extension.java:84)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [javax.sql.DataSource]

Message: Error configuring data source 'default'. No URL specified

Upvotes: 0

Views: 43

Answers (0)

Related Questions