-
Notifications
You must be signed in to change notification settings - Fork 49
Datasource factory issue reproducer #1643
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 6.2.x
Are you sure you want to change the base?
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package io.micronaut.configuration.jdbc.hikari.custom | ||
|
||
import io.micronaut.configuration.jdbc.hikari.DatasourceConfiguration | ||
import io.micronaut.context.ApplicationContext | ||
import io.micronaut.context.DefaultApplicationContext | ||
import io.micronaut.context.env.MapPropertySource | ||
import io.micronaut.jdbc.DataSourceResolver | ||
import spock.lang.Specification | ||
|
||
import javax.sql.DataSource | ||
|
||
class CustomDatasourceConfigurationSpec extends Specification { | ||
|
||
void "test default configuration and password change"() { | ||
given: | ||
ApplicationContext applicationContext = new DefaultApplicationContext("test") | ||
System.setProperty("ds-default-password", "") | ||
applicationContext.environment.addPropertySource(MapPropertySource.of( | ||
'test', | ||
['datasources.default.password' : '${ds-default-password}', | ||
'datasources.default.dialect' : 'H2', | ||
'datasources.default.url' : 'jdbc:h2:mem:default;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE', | ||
'datasources.default.username' : 'sa', | ||
'datasources.default.driver-class-name' : 'org.h2.Driver', | ||
'datasources.default.connection-test-query': 'SELECT 1', | ||
'use-custom-factory' : 'true'] | ||
)) | ||
applicationContext.start() | ||
DataSourceResolver dataSourceResolver = applicationContext.findBean(DataSourceResolver).orElse(DataSourceResolver.DEFAULT) | ||
|
||
expect: | ||
applicationContext.containsBean(DataSource) | ||
applicationContext.containsBean(DatasourceConfiguration) | ||
|
||
when: | ||
def dataSource = dataSourceResolver.resolve(applicationContext.getBean(DataSource)) | ||
|
||
then: | ||
dataSource instanceof CustomDataSource | ||
|
||
cleanup: | ||
applicationContext.close() | ||
} | ||
|
||
|
||
|
||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package io.micronaut.configuration.jdbc.hikari.custom; | ||
|
||
import com.zaxxer.hikari.HikariConfig; | ||
import io.micronaut.configuration.jdbc.hikari.HikariUrlDataSource; | ||
|
||
|
||
public class CustomDataSource extends HikariUrlDataSource { | ||
|
||
public CustomDataSource(HikariConfig configuration) { | ||
super(configuration); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package io.micronaut.configuration.jdbc.hikari.custom; | ||
|
||
import io.micronaut.configuration.jdbc.hikari.DatasourceConfiguration; | ||
import io.micronaut.configuration.jdbc.hikari.DatasourceFactory; | ||
import io.micronaut.context.ApplicationContext; | ||
import io.micronaut.context.annotation.Context; | ||
import io.micronaut.context.annotation.EachBean; | ||
import io.micronaut.context.annotation.Factory; | ||
import io.micronaut.context.annotation.Replaces; | ||
import io.micronaut.context.annotation.Requires; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import javax.sql.DataSource; | ||
|
||
@Factory | ||
@Replaces(factory = DatasourceFactory.class) | ||
@Requires(property = "use-custom-factory", value = "true") | ||
class CustomDataSourceFactory extends DatasourceFactory { | ||
private static final Logger LOG = LoggerFactory.getLogger(CustomDataSourceFactory.class); | ||
|
||
CustomDataSourceFactory(ApplicationContext applicationContext) { | ||
super(applicationContext); | ||
LOG.info("CustomDataSourceFactory created"); | ||
} | ||
|
||
@Override | ||
@Context | ||
@EachBean(DatasourceConfiguration.class) | ||
public DataSource dataSource(DatasourceConfiguration datasourceConfiguration) { | ||
LOG.info("Creating CustomDataSource"); | ||
return new CustomDataSource(datasourceConfiguration); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
plugins { | ||
id 'io.micronaut.build.internal.test-application' | ||
} | ||
|
||
dependencies { | ||
implementation projects.micronautJdbcHikari | ||
runtimeOnly libs.managed.h2 | ||
testImplementation projects.micronautTests.micronautCommonTests | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package example.jdbc.hikari.sync; | ||
|
||
import io.micronaut.configuration.jdbc.hikari.DatasourceConfiguration; | ||
import io.micronaut.configuration.jdbc.hikari.DatasourceFactory; | ||
import io.micronaut.context.ApplicationContext; | ||
import io.micronaut.context.annotation.Context; | ||
import io.micronaut.context.annotation.EachBean; | ||
import io.micronaut.context.annotation.Factory; | ||
import io.micronaut.context.annotation.Primary; | ||
import io.micronaut.context.annotation.Replaces; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
import javax.sql.DataSource; | ||
|
||
@Factory | ||
@Replaces(factory = DatasourceFactory.class, bean = DatasourceFactory.class) | ||
@Primary | ||
public class CustomDataSourceFactory extends DatasourceFactory { | ||
|
||
private static final Logger LOG = LoggerFactory.getLogger(CustomDataSourceFactory.class); | ||
|
||
public CustomDataSourceFactory(ApplicationContext applicationContext) { | ||
super(applicationContext); | ||
LOG.info("CustomDataSourceFactory created"); | ||
} | ||
|
||
@Override | ||
@Context | ||
@EachBean(DatasourceConfiguration.class) | ||
public DataSource dataSource(DatasourceConfiguration datasourceConfiguration) { | ||
LOG.info("Created custom datasource"); | ||
return new CustomHikariUrlDataSource(datasourceConfiguration); | ||
} | ||
} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package example.jdbc.hikari.sync; | ||
|
||
import com.zaxxer.hikari.HikariConfig; | ||
import io.micronaut.configuration.jdbc.hikari.HikariUrlDataSource; | ||
|
||
public class CustomHikariUrlDataSource extends HikariUrlDataSource { | ||
public CustomHikariUrlDataSource(HikariConfig configuration) { | ||
super(configuration); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package example.jdbc.hikari.sync; | ||
|
||
import io.micronaut.configuration.jdbc.hikari.DatasourceConfiguration; | ||
import io.micronaut.context.ApplicationContext; | ||
import io.micronaut.context.DefaultApplicationContext; | ||
import io.micronaut.jdbc.DataSourceResolver; | ||
import org.junit.jupiter.api.Assertions; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import javax.sql.DataSource; | ||
|
||
class CustomDataSourceFactoryTest { | ||
|
||
@Test | ||
void testUseCustomFactory() { | ||
ApplicationContext applicationContext = new DefaultApplicationContext("test"); | ||
applicationContext.start(); | ||
DataSourceResolver dataSourceResolver = applicationContext.findBean(DataSourceResolver.class).orElse(DataSourceResolver.DEFAULT); | ||
Assertions.assertTrue(applicationContext.containsBean(DataSource.class)); | ||
Assertions.assertTrue(applicationContext.containsBean(DatasourceConfiguration.class)); | ||
|
||
DataSource dataSource = dataSourceResolver.resolve(applicationContext.getBean(DataSource.class)); | ||
Assertions.assertTrue(dataSource instanceof CustomHikariUrlDataSource); | ||
Check failure on line 23 in tests/jdbc-hikari-tests/jdbc-hikari-h2/src/test/java/example/jdbc/hikari/sync/CustomDataSourceFactoryTest.java
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This fails unlike groovy test in jdbc-hikari module. |
||
applicationContext.stop(); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
datasources.default.password= | ||
datasources.default.dialect=H2 | ||
micronaut.application.name=hikari-tests | ||
datasources.default.schema-generate=CREATE_DROP | ||
datasources.default.url=jdbc\:h2\:mem\:devDb;LOCK_TIMEOUT\=10000;DB_CLOSE_ON_EXIT\=FALSE | ||
datasources.default.username=sa | ||
datasources.default.driver-class-name=org.h2.Driver |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<configuration> | ||
|
||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||
<encoder> | ||
<pattern>%cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n</pattern> | ||
</encoder> | ||
</appender> | ||
|
||
<root level="info"> | ||
<appender-ref ref="STDOUT" /> | ||
</root> | ||
</configuration> |
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test in jdbc-hikari module passes. Only when
testAnnotationProcessor(mn.micronaut.inject.java)
is removed it fails like in the hikari-h2-tests module