Skip to content

Commit 37d2cd6

Browse files
committed
Use JdbcConnectionDetails to detect Dialect
instead of Environment closes gh-286
1 parent d4e0878 commit 37d2cd6

File tree

3 files changed

+44
-7
lines changed

3 files changed

+44
-7
lines changed

doma-spring-boot-autoconfigure/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
<artifactId>h2</artifactId>
6262
<scope>test</scope>
6363
</dependency>
64+
<dependency>
65+
<groupId>org.postgresql</groupId>
66+
<artifactId>postgresql</artifactId>
67+
<scope>test</scope>
68+
</dependency>
6469
<dependency>
6570
<groupId>com.zaxxer</groupId>
6671
<artifactId>HikariCP</artifactId>

doma-spring-boot-autoconfigure/src/main/java/org/seasar/doma/boot/autoconfigure/DomaAutoConfiguration.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,18 @@
3939
import org.seasar.doma.jdbc.dialect.StandardDialect;
4040
import org.seasar.doma.jdbc.statistic.DefaultStatisticManager;
4141
import org.seasar.doma.jdbc.statistic.StatisticManager;
42-
import org.springframework.beans.factory.ObjectProvider;
4342
import org.springframework.beans.factory.annotation.Autowired;
4443
import org.springframework.beans.factory.annotation.Qualifier;
4544
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
4645
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
4746
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
4847
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
4948
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
49+
import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails;
5050
import org.springframework.boot.context.properties.EnableConfigurationProperties;
5151
import org.springframework.boot.jdbc.DatabaseDriver;
5252
import org.springframework.context.annotation.Bean;
5353
import org.springframework.context.annotation.Configuration;
54-
import org.springframework.core.env.Environment;
5554
import org.springframework.core.io.ResourceLoader;
5655
import org.springframework.dao.support.PersistenceExceptionTranslator;
5756
import org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator;
@@ -76,12 +75,12 @@ public class DomaAutoConfiguration {
7675

7776
@Bean
7877
@ConditionalOnMissingBean
79-
public Dialect dialect(Environment environment) {
78+
public Dialect dialect(JdbcConnectionDetails connectionDetails) {
8079
DialectType dialectType = domaProperties.getDialect();
8180
if (dialectType != null) {
8281
return dialectType.create();
8382
}
84-
String url = environment.getProperty("spring.datasource.url");
83+
String url = connectionDetails.getJdbcUrl();
8584
if (url != null) {
8685
DatabaseDriver databaseDriver = DatabaseDriver.fromJdbcUrl(url);
8786
switch (databaseDriver) {

doma-spring-boot-autoconfigure/src/test/java/org/seasar/doma/boot/autoconfigure/DomaAutoConfigurationTest.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import org.seasar.doma.jdbc.criteria.NativeSql;
5050
import org.seasar.doma.jdbc.criteria.QueryDsl;
5151
import org.seasar.doma.jdbc.dialect.Dialect;
52-
import org.seasar.doma.jdbc.dialect.H2Dialect;
5352
import org.seasar.doma.jdbc.dialect.MysqlDialect;
5453
import org.seasar.doma.jdbc.dialect.PostgresDialect;
5554
import org.seasar.doma.jdbc.dialect.StandardDialect;
@@ -58,6 +57,7 @@
5857
import org.seasar.doma.message.Message;
5958
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
6059
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
60+
import org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails;
6161
import org.springframework.context.ConfigurableApplicationContext;
6262
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
6363
import org.springframework.context.annotation.Bean;
@@ -263,11 +263,44 @@ public void testDialectByDataSourceUrl() {
263263
MutablePropertySources sources = context.getEnvironment()
264264
.getPropertySources();
265265
sources.addFirst(new MapPropertySource("test",
266-
Collections.singletonMap("spring.datasource.url", "jdbc:h2:mem:example")));
266+
Map.of("spring.datasource.url", "jdbc:postgresql://localhost:1234/example",
267+
"doma.exception-translation-enabled",
268+
"false" /* prevent database connections */)));
267269
this.context.register(DomaAutoConfiguration.class, DataSourceAutoConfiguration.class);
268270
this.context.refresh();
269271
Dialect dialect = this.context.getBean(Dialect.class);
270-
assertThat(dialect, is(instanceOf(H2Dialect.class)));
272+
assertThat(dialect, is(instanceOf(PostgresDialect.class)));
273+
}
274+
275+
@Test
276+
public void testDialectByJdbConnectionDetails() {
277+
MutablePropertySources sources = context.getEnvironment()
278+
.getPropertySources();
279+
sources.addFirst(new MapPropertySource("test",
280+
Map.of("doma.exception-translation-enabled",
281+
"false"/* prevent database connections */)));
282+
EnvironmentTestUtils.addEnvironment(this.context,
283+
"doma.exception-translation-enabled:false"); // Prevent database connections
284+
this.context.register(DomaAutoConfiguration.class, DataSourceAutoConfiguration.class);
285+
this.context.registerBean(JdbcConnectionDetails.class, () -> new JdbcConnectionDetails() {
286+
@Override
287+
public String getUsername() {
288+
return "dummy";
289+
}
290+
291+
@Override
292+
public String getPassword() {
293+
return "dummy";
294+
}
295+
296+
@Override
297+
public String getJdbcUrl() {
298+
return "jdbc:postgresql://localhost:1234/example";
299+
}
300+
});
301+
this.context.refresh();
302+
Dialect dialect = this.context.getBean(Dialect.class);
303+
assertThat(dialect, is(instanceOf(PostgresDialect.class)));
271304
}
272305

273306
@Test

0 commit comments

Comments
 (0)